c++ - GL_QUADS 的 Opengl 纹理映射,得到奇怪的结果

标签 c++ opengl texture-mapping

我用纹理映射得到了非常奇怪的结果。

我用 128*128 RGBA bmp 图像做 GL_QUADS 的纹理映射,然后我得到了以下奇怪的结果,用其他图像测试都可以,但是对于这个图像,我很奇怪结果。

在这里,我想将叶子图像映射到 GL_QUADS

以下是我的代码:

void init (void)
{

glClearColor(0.6, 0.6, 0.6, 0.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glEnable(GL_TEXTURE_2D);



glutSetCursor(GLUT_CURSOR_CROSSHAIR);
}

void display(){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();
gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);

GLuint texture[2];

unsigned int outWidth;
unsigned int outHeight;
unsigned int outDepth;

glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);

unsigned char * data=loadbmp("leaftest.bmp", outWidth, outHeight, outWidth, true);

gluBuild2DMipmaps(GL_TEXTURE_2D, 4, outWidth, outHeight, GL_BGRA, GL_UNSIGNED_BYTE, data);

glBindTexture(GL_TEXTURE_2D, texture[0]);

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
    glTranslatef(0, 0, 2);
    glRotatef(90, 1, 0, 0);

    glBegin(GL_QUADS);
        glTexCoord2f(0.0,0.0);
        glVertex3f(0.0,-0.6,-0.3);

        glTexCoord2f(0.0,1.0);
        glVertex3f(0.0,0.0,-0.3);

        glTexCoord2f(1.0,1.0);
        glVertex3f(0.0,0.0,0.3);

        glTexCoord2f(1.0,0.0);
        glVertex3f(0.0,-0.6,0.3);

    glEnd();
glutSwapBuffers();
}

最佳答案

可能是因为你有

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

在绑定(bind)任何纹理目标之前,这显然是错误的,我很奇怪为什么有些示例可以工作。

在编写代码之前先查看一些教程,例如 this或者买一本书什么的。

关于c++ - GL_QUADS 的 Opengl 纹理映射,得到奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108130/

相关文章:

C++ CUDA 推力 vector 多态性

opengl - 使图像显示与屏幕刷新率同步

c++ - Windows服务创建文件的默认目录在哪里?

c++ - Qt 中的新功能获取链接器和 Makefile 错误

c++ - CalcOpticalFlowLK 相机运动 C++

opengl - 如何将多个纹理传递给单个着色器?

c++ - 我是否为立方体贴图正确指定了坐标?

opengl - GPU 如何处理随机访问?

java - 使用纯 OpenGL 加载 PNG 文件

python - 为什么只有一半的预期输出使用纹理坐标环绕模式,来自 SB OpenGL 的示例