简单的OpenGL纹理贴图不起作用?

Ton*_*y R 7 c++ opengl textures

我试图找出OpenGL中的纹理映射,我无法得到一个简单的例子.

正在绘制多边形,虽然它没有纹理,只是纯色.此位图正在正确加载到sprite1 []中,因为我现在已成功使用glDrawPixels.

我使用glGenTextures来获取我的tex名称,但我注意到它不会改变texName1; 即使在调用glGenTextures之后,这个GLuint也是我初始化它的任何东西......

我启用了GL_TEXTURE_2D.

下面是代码:

GLuint texName1 = 0;

glGenTextures(1, &texName1);
glBindTexture(GL_TEXTURE_2D, texName1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, sprite1[18], sprite1[22], 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, &sprite1[54]);

glColor3f(1, 1, 0);
glBindTexture(GL_TEXTURE_2D, texName1);
glBegin(GL_QUADS);
    glTexCoord2f (0.0, 0.0);
    glVertex3f (0.0, 0.0, -5.0f);
    glTexCoord2f (1.0, 0.0);
    glVertex3f (.5, 0.0, -5.0f);
    glTexCoord2f (1.0, 1.0);
    glVertex3f (.5, .5, -5.0f);
    glTexCoord2f (0.0, 1.0);
    glVertex3f (0.0, .5, -5.0f);
glEnd();
Run Code Online (Sandbox Code Playgroud)

更新:我不知所措.这是我尝试过的一切:

  1. 原来我在初始化OGL之前初始化我的纹理.纹理在类构造函数中初始化(glGenTextures-> glTexImage2D),并在每个帧调用的成员函数中绘制(glBegin-> glEnd).genTextures现在似乎正常工作,我的名字是1.

  2. GL_RGBA8,GL_BGRA_EXT的每个可能组合(GL_BGRA在我的系统上不起作用;我需要_EXT),我甚至从位图中删除了alpha通道并尝试了GL_RGB,GL_BGR_EXT等的所有组合.没有运气.

  3. 尝试在程序上创建一个位图并使用它

  4. 确保未启用GL_COLOR_MATERIAL.

  5. 将位图大小更改为32x32.

  6. 试过glTexEnvi而不是glTexEnvf.

unw*_*ind 6

除了mentat的注意事项,您可能会遇到非二次幂纹理尺寸的问题,您提到纹理名称生成而不更改名称.

听起来好像你打电话glGenTextures()太早,即在初始化OpenGL之前.如果你不是,那么我建议在调用之后添加代码,通过调用来glGenTextures()检查OpenGL错误状态glGetError().


Ton*_*y R 1

我发现了问题。我的电话glEnableglEnable(GL_BLEND | GL_TEXTURE_2D). 使用 glGetError 我发现这次调用得到了 GL_INVALID_ENUM,所以我将 GL_TEXTURE_2D 移动到它自己的启用函数和宾果游戏中。我想 glEnable 不允许使用逻辑或?