outdated: 38.Loading Textures From A Resource File & Texturing Triangles
2016-09-26 11:12
246 查看
未贴图前,每个蝴蝶都是由两个三角形组成,于对角线折叠,相当于翅膀扇动,每次变换对角顶点的坐标就可以。
Main.cpp
Thanks for Nehe's tutorials, this is his home.
#include <Windows.h> #include <GL/glew.h> #include <GL/glut.h> #include <GL/GLUAX.H> #include <math.h> #include <stdio.h> #include "Previous.h" #include "Resource.h" #pragma comment(lib, "legacy_stdio_definitions.lib") #ifndef CDS_FULLSCREEN #define CDS_FULLSCREEN 4 #endif GL_Window* g_window; Keys* g_keys; GLuint texture[3]; struct object { int tex; // Integer used to select texture float x, y, z; // Position float yi; // Y axis increase speed float spinz; // Z axis spin float spinzi; // Z axis spin speed float flap; // Flapping triangle float fi; // Flap direction (increase value) }; object obj[50]; void SetObject(int loop) // Initialize { obj[loop].tex = rand() % 3; obj[loop].x = rand() % 34 - 17.0f; obj[loop].y = 18.0f; obj[loop].z = -((rand() % 30000 / 1000.0f) + 10.0f); obj[loop].spinzi = (rand() % 10000) / 5000.0f - 1.0f; obj[loop].flap = 0.0f; obj[loop].fi = 0.05f + (rand() % 100) / 1000.0f; obj[loop].yi = 0.001f + (rand() % 1000) / 10000.0f; } void LoadGLTexture() { HBITMAP hBMP; // Handle of the bitmap BITMAP BMP; // Bitmap structure // The ID of the 3 bitmap images byte Texture[] = { IDB_BUTTERFLY1, IDB_BUTTERFLY2, IDB_BUTTERFLY3 }; glGenTextures(sizeof(Texture), &texture[0]); for (int loop = 0; loop < sizeof(Texture); ++loop) { // GetModuleHandle(NULL) - A handle to an instance /* MAKEINTRESOURCE(Texture[loop]) - Converts an Integer Value (Texture[loop]) * to a resource value (this is the image to load). */ // IMAGE_BITMAP - Tells our program that the resource to load is a bitmap image // 0, 0 are the desired height and width of the image in pixels // LR_CREATEDIBSECTION returns a DIB section bitmap, hBMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(Texture[loop]), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); if (hBMP) { GetObject(hBMP, sizeof(BMP), &BMP); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // Pixel storage mode (word alignment / 4 bytes) glBindTexture(GL_TEXTURE_2D, texture[loop]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Generate mipmapped texture gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits); DeleteObject(hBMP); } } } BOOL Initialize(GL_Window* window, Keys* keys) { g_window = window; g_keys = keys; LoadGLTexture(); glClearColor(0.0f, 0.0f, 0.0f, 0.5f); glClearDepth(1.0f); glDepthFunc(GL_LEQUAL); // Less or equal glDisable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable(GL_TEXTURE_2D); glBlendFunc(GL_ONE, GL_SRC_ALPHA); glEnable(GL_BLEND); for (int loop = 0; loop < 50; ++loop) { SetObject(loop); } return TRUE; } void Deinitialize(void) {} void Update(DWORD milliseconds) { if (g_keys->keyDown[VK_ESCAPE] == TRUE) { TerminateApplication(g_window); } if (g_keys->keyDown[VK_F1] == TRUE) { ToggleFullscreen(g_window); } } void Draw(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int loop = 0; loop < 50; ++loop) { glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, texture[obj[loop].tex]); glTranslatef(obj[loop].x, obj[loop].y, obj[loop].z); glRotatef(45.0f, 1.0f, 0.0f, 0.0f); glRotatef(obj[loop].spinz, 0.0f, 0.0f, 1.0f); glBegin(GL_TRIANGLES); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, obj[loop].flap); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, obj[loop].flap); glEnd(); obj[loop].y -= obj[loop].yi; obj[loop].spinz += obj[loop].spinzi; obj[loop].flap += obj[loop].fi; if (obj[loop].y < -18.0f) { SetObject(loop); } if ((obj[loop].flap > 1.0f) || (obj[loop].flap < -1.0f)) { obj[loop].fi = -obj[loop].fi; } } Sleep(15); glFlush(); }
Main.cpp
Thanks for Nehe's tutorials, this is his home.
相关文章推荐
- NeHe OpenGL Lesson38 – Loading Textures From A Resource File
- Decoding 'latch:cache buffers chains' object from Oracle trace file
- org.apache.jasper.JasperException: /login.jsp(2,0) Unable to read TLD "META-INF/c.tld" from JAR file 、、、、、、
- How to fix "Resource file <C_PsdRsdll> not found" issue in Windows OS
- fatal error RC1015: cannot open include file 'resource.h'.
- JBossAS 6.1.0.Final启动报Unable to read the logging configuration from 'file:logging.properties'
- get byte[] from DB & send it to client as download file
- how-to-load-resource-from-jar-file-packaged-in-a-war-file
- Unable to read TLD "META-INF/c.tld" from JAR file 解决方法
- 'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR'
- mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file ".\Rel
- "Error reading from file" 解决办法
- SPICE <Restart> - Read Record from Input File
- Unable to read TLD "META-INF/c.tld" from JAR file "file: 解决办法
- 移动了resource.h导致“RC1015: cannot open include file 'resource.h'”错误
- "Unable to get buffer of resource asset file"问题的解决
- VM8.0下安装遇到了问题“windows cannot read the<product key> setting from the unattend answer file”解决方法
- Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file
- getResource("somefilename")读取不到同目录下的文件?
- fatal error C1853: 'Debug\test.pch' precompiled header file is from a previous version of the compil