opengl 在屏幕上渲染之前旋转对象以设置其正确的面

Posted

技术标签:

【中文标题】opengl 在屏幕上渲染之前旋转对象以设置其正确的面【英文标题】:opengl rotate an object to set its correct face before render on screen 【发布时间】:2012-09-20 10:27:50 【问题描述】:

我正在使用 GLM 库通过 opengl 中的 obj 文件加载一个对象,但它在屏幕上颠倒显示。我还为用户提供了一种功能,因此他也可以通过鼠标相应地旋转所有对象。例如放大、放大、随y轴旋转。

问题是我不知道如何首先旋转对象以根据我的需要制作它的脸。之后我想绘制这个对象,然后鼠标可以发挥它的作用来旋转它。

我的绘图函数包含以下代码

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(m_fPosX, m_fPosY,-m_fZoom);
glRotatef(m_fRotX, 1.0f, 0.0f, 0.0f);//these two for mouse movement
glRotatef(m_fRotY, 0.0f, 1.0f, 0.0f);
glRotated(180,0.0f, 0.0f, -1.0f);

glDisable(GL_TEXTURE_2D);
glColor3f(0.90f,0.90f,0.90f);
glmDraw(m_p3dModel,GLM_SMOOTH | GLM_MATERIAL); 

glPopMatrix();

这里的旋转功能都依赖于鼠标的移动,但如果它被颠倒加载,我不知道如何首先让我的对象面向正确的方向,然后在这个绘图功能中允许它......这意味着我需要设置它的脸在调用此绘制函数之前。

【问题讨论】:

【参考方案1】:
glRotatef(m_fRotY, 1.0f, 0.0f, 0.0f);

应该是

glRotatef(m_fRotY, 0.0f, 1.0f, 0.0f);

复制/粘贴是万恶之母 :o)

转换/投影/模型视图教程:查看link

【讨论】:

这不是答案,好吧,这是一些拼写错误,但我的问题是如何在将对象渲染到绘图函数之前设置它的方向。假设如果一个对象在加载时是颠倒的,那么我如何在将它渲染到屏幕上之前修复它的脸......除了你指向的这个旋转之外,它还用于绘制函数运行时的鼠标移动 @wolvornePk,很难调试为什么它是颠倒的,因为 m_fZoom 的值(以及你否定它们的原因)是未知的。您能否提供有关变量初始值的更多信息。 我正在使用 GLM 库加载在 3dmax 中制作的 3d 对象。但是当我在屏幕上显示它时,它会颠倒过来。除此之外,我希望我的鼠标表现得像观察者,例如就像我可以在运行时缩放和旋转整个对象。除了这个对象之外,还有很多其他对象,每个对象都连接在场景中,所以如果我用鼠标缩放,那么它会根据缩放显示每个模型,或者如果我用鼠标进行旋转,那么所有模型都会旋转。鼠标工作正常,但我正在加载的对象需要使其面部和方向正确 我确定我做错了,但如果您能帮助我识别,我将不胜感激,如果我无法解释得更清楚,请提出更多问题。 加载模型时m_fPosX、m_fPosY和m_fZoom的初始值是多少。

以上是关于opengl 在屏幕上渲染之前旋转对象以设置其正确的面的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 对象在 PC 上以正常速度旋转,但在笔记本电脑上非常快

使用 OpenGL,如何正确使用 gluOrtho2D 和默认投影?

opengl中渲染对象的移动

在opengl中找到旋转的图像中心

OpenGL:渲染到 FBO 时是不是支持纹理组合器功能?

OpenGL ES 学习教程(十四) 帧缓冲区对象(FBO) 实现渲染到纹理(Render To Texture/RTT)