当我从openCV图像制作纹理时,它总是旋转180度,这是为什么?有我的代码,它绑定纹理并在屏幕上显示它。 如果代码规范,建议我如何正确旋转纹理,我无法得到它。旋转纹理openGL C++
glBindTexture(GL_TEXTURE_2D, slice.texture);
glLoadIdentity();
glEnable(GL_TEXTURE_2D); //enable 2D texturing
glBegin (GL_QUADS);
float nullX = slObj->rect.x/400.0;
float nullY = slObj->rect.y/300.0;
float sliceWidth = slObj->rect.width/400.0;
float sliceHeight = slObj->rect.height/300.0;
//with our vertices we have to assign a texcoord
//so that our texture has some points to draw to
glTexCoord2d(0.0,0.0); glVertex2f(nullX, nullY);
glTexCoord2d(1.0,0.0); glVertex2f(nullX + sliceWidth, nullY);
glTexCoord2d(1.0,1.0); glVertex2f(nullX + sliceWidth, nullY + sliceHeight);
glTexCoord2d(0.0,1.0); glVertex2f(nullX, nullY + sliceHeight);
glEnd();
glFlush();
UPDATE:
// initialize
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glClearColor(0.3,0.3,0.3,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-400.0 ,400.0 ,-300.0 ,300.0 ,0 ,1.0);
我更新了我的问题,请看看 – gronzzz
@gronzzz:你的投影矩阵是正确的。我开始怀疑OpenCV将图像的原点(0,0)定义为左上角,而OpenGL使用左下角。我对API不熟悉,但许多图像API和格式允许您重新定义原点和/或跨一个轴镜像/翻转图像。如果你不能这样做,你总是可以用glScale(1.0,-1.0,1.0);'来重新定义原点。注意这只适用于固定功能的OpenGL。 –