【发布时间】:2013-08-31 13:23:16
【问题描述】:
设置纹理后有 20fps,然后应用纹理为 300fps
我的代码:
void LoadTEX()
{
GLuint texture;
HBITMAP GLtex;
BITMAP tex;
byte Texture=TEX;
glGenTextures(sizeof(Texture), &texture);
GLtex= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(Texture), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
GetObject(GLtex,sizeof(tex), &tex);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, tex.bmWidth, tex.bmHeight, GL_RGB, GL_UNSIGNED_BYTE, tex.bmBits);
DeleteObject(GLtex);
}
如您所见,我从资源文件中加载了纹理。我在主 WINAPI 循环中调用 LoadTEX()。
第二个问题是纹理有点透明,所以它从后面的脸上取颜色并与自己混合。为什么?
【问题讨论】:
-
如何使用它?我试过:
glBindTexture( GL_TEXTURE_2D, texture );然后glEnable(GL_TEXTURE_2D);和finaly:glGenerateMipmap(GL_TEXTURE_2D);代码编译但没有显示窗口。 -
glEnable(GL_TEXTURE_2D) 仅用于固定管道渲染 afaik,直到您想要在绘图上进行纹理映射并且不使用着色器时才需要。您需要先使用 glTexImage2D 将纹理数据发送到 OpenGL,然后调用 glGenerateMipmap。确保您有适当的 mipmapping 过滤器集(还有 GL_LINEAR_MIPMAP_LINEAR)。您可能还想看看各向异性过滤。
标签: opengl textures render texture-mapping texture2d