繁体   English   中英

旋转纹理openGL c ++

[英]Rotate texture openGL c++

当我从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); 

您的投影矩阵如何设置?

假设您具有传统的投影矩阵,其中Y轴从屏幕的底部到顶部增加,则这些坐标是正确的。 另一方面,如果您反转投影矩阵以使(0,0)实际上是屏幕的左上角,则您有问题。

如果是这种情况,纹理并没有真正旋转,而是被镜像了。 没有旋转会产生这种情况,这就是手性的变化(也称为惯性) 您可以使用传统的投影矩阵,其中Y轴的行为如前所述,或者在翻转第二个纹理坐标(T)来计算纹理坐标时进行补偿。

因为我使用openCV加载和切片图像,所以我只是翻转图像。

IplImage *source = cvLoadImage("space.png",1);
if(source == NULL) source = cvLoadImage("C://space.png",1);

cvFlip(source, source, 0);

感谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM