当我从openCV图像制作纹理时,它总是在180度旋转,为什么会这样?有我的代码,绑定纹理并在屏幕上显示。 如果代码规范,建议我如何正确旋转纹理,我无法得到它。
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();
更新:
// 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);
答案 0 :(得分:1)
您的投影矩阵如何设置?
这些坐标是正确的,假设您有一个传统的投影矩阵,其中Y轴从屏幕的底部到顶部增加。另一方面,如果您反转了投影矩阵,使得(0,0)实际上是屏幕的左上角,那么就会出现问题。
如果是这种情况,纹理不会真正旋转,它会被镜像。没有可以产生这种情况的轮换,这就是所谓的chirality (also known as handedness)的变化。您可以使用传统的投影矩阵,其中Y轴的行为如前所述,或者在通过翻转第二个纹理坐标(T)计算纹理坐标时进行补偿。
答案 1 :(得分:0)
因为我使用openCV来加载和切片图像,我只是翻转图像。
IplImage *source = cvLoadImage("space.png",1);
if(source == NULL) source = cvLoadImage("C://space.png",1);
cvFlip(source, source, 0);
感谢大家的帮助!