如何使用OpenGL将纹理放置在正方形上?

时间:2018-11-17 03:26:14

标签: opengl textures

我尝试使用以下代码将纹理应用于正方形,但未应用。 上面的代码有问题吗? “ dd”打印在控制台窗口上。 我认为这是读取bmp文件。 但是我只能看到白色正方形,如下图所示。

white square

位图文件位于项目文件夹中。

path

LoadGLTextures()是打开bmp文件的功能。 #define _CRT_SECURE_NO_DEPRECATE #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <GL/GLAUX.H> #pragma comment (lib,"glaux.lib") unsigned int MyTextureObiect[1]; AUX_RGBImageRec *pTextureImage[1]; AUX_RGBImageRec *LoadBMP(char *szFilename) { FILE * pFile = NULL; if (!szFilename) { return NULL; } pFile = fopen(szFilename, "r"); if (pFile) { fclose(pFile); return auxDIBImageLoad(szFilename); } return NULL; } int LoadGLTextures() { int Status = FALSE; memset(pTextureImage, 0, sizeof(void *) * 1); if (pTextureImage[0] = LoadBMP("butterflyans.bmp")) { printf("dd"); Status = TRUE; glGenTextures(1, &MyTextureObiect[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, pTextureImage[0]->sizeX, pTextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pTextureImage[0]->data); glEnable(GL_TEXTURE_2D); } if (pTextureImage[0]) { if (pTextureImage[0]->data) { free(pTextureImage[0]->data); } free(pTextureImage[0]); } return Status; } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, MyTextureObiect[0]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5, -0.5, 0.0); glTexCoord2f(1.0f, 0.0f); glVertex3f(0.5, -0.5, 0.0); glTexCoord2f(1.0f, 1.0f); glVertex3f(0.5, 0.5, 0.0); glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5, 0.5, 0.0); glEnd(); glFlush(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutCreateWindow("OpenGL Drawing Example"); glutDisplayFunc(myDisplay); if (LoadGLTextures()) { glEnable(GL_TEXTURE_2D); } glutMainLoop(); return 0; } 是加载纹理的功能。

ps。我不会英语。对不起。

Expression

1 个答案:

答案 0 :(得分:1)

在设置纹理参数和指定纹理之前,您错过了绑定glBindTexture纹理对象。
请注意,glTexParameterglTexImage2D适用于当前绑定的纹理:

glGenTextures(1, &MyTextureObiect[0]);

glBindTexture(GL_TEXTURE_2D, MyTextureObiect[0]); // <---- bind the texture

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D( .... );

顺便说一句,您两次设置了GL_TEXTURE_MIN_FILTER,但从未设置过GL_TEXTURE_MAG_FILTER

相关问题