绘制带背景的动画模型——设置opengl矩阵模式和透视
Drawing animated model with background - setting opengl matrix mode and perspective
我正在尝试绘制带有图像背景的动画模型。
为了正确绘制我的模型,我需要使用 glMatrixMode、glLoadIdentity、gluPerspective 等。但是,要在背景上绘制矩形,我需要更改我设置的所有模式和矩阵以正确查看我的模型。
我在下面发布了我的代码。谁能告诉我应该怎么做才能同时正确查看我的模型和背景?
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset MV Matrix
glBindTexture(GL_TEXTURE_2D, m_texture1);
glBegin(GL_QUADS);
glColor4f(1.0f, 1.0f, 1.0f, 1);
glTexCoord2f(0, 1);
glVertex3f(-1.0, -1.0, 0);
glTexCoord2f(0, 0);
glVertex3f(-1.0, 1.0, 0);
glTexCoord2f(1, 0);
glVertex3f(1.0, 1.0, 0);
glTexCoord2f(1, 1);
glVertex3f(1.0, -1.0, 0);
glEnd();
const double aspectRatio = (float) getOpenGLViewWidth()
/ getOpenGLViewHeight(), fieldOfView = 45.0;
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(fieldOfView,
aspectRatio,
1.0,
1000.0);
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity();
glTranslatef(0.0f, -25.0f, -70.0f); // Move 40 Units And Into The Screen
glViewport(0, 0, getOpenGLViewWidth(), getOpenGLViewHeight());
// glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
recursive_render(_scenes[0], _scenes[0]->mRootNode, 25);
如果您的图像背景是应该填满整个视口并且不随场景旋转的静态背景,您应该使用正交矩阵单独渲染它。
我的遗留 GL 有点生疏,但它应该是这样的:
- 设置正交投影矩阵(例如使用 glOrtho)
- 将您的模型视图矩阵设置为标识
- 渲染填充整个视口的静态背景
- 设置透视投影矩阵
- 平移和旋转动画模型的模型(视图)矩阵
- 渲染你的模型
请注意,如果您想节省一些填充率,您可能需要翻转顺序并最后渲染背景。
我正在尝试绘制带有图像背景的动画模型。 为了正确绘制我的模型,我需要使用 glMatrixMode、glLoadIdentity、gluPerspective 等。但是,要在背景上绘制矩形,我需要更改我设置的所有模式和矩阵以正确查看我的模型。
我在下面发布了我的代码。谁能告诉我应该怎么做才能同时正确查看我的模型和背景?
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset MV Matrix
glBindTexture(GL_TEXTURE_2D, m_texture1);
glBegin(GL_QUADS);
glColor4f(1.0f, 1.0f, 1.0f, 1);
glTexCoord2f(0, 1);
glVertex3f(-1.0, -1.0, 0);
glTexCoord2f(0, 0);
glVertex3f(-1.0, 1.0, 0);
glTexCoord2f(1, 0);
glVertex3f(1.0, 1.0, 0);
glTexCoord2f(1, 1);
glVertex3f(1.0, -1.0, 0);
glEnd();
const double aspectRatio = (float) getOpenGLViewWidth()
/ getOpenGLViewHeight(), fieldOfView = 45.0;
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(fieldOfView,
aspectRatio,
1.0,
1000.0);
glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity();
glTranslatef(0.0f, -25.0f, -70.0f); // Move 40 Units And Into The Screen
glViewport(0, 0, getOpenGLViewWidth(), getOpenGLViewHeight());
// glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
recursive_render(_scenes[0], _scenes[0]->mRootNode, 25);
如果您的图像背景是应该填满整个视口并且不随场景旋转的静态背景,您应该使用正交矩阵单独渲染它。
我的遗留 GL 有点生疏,但它应该是这样的:
- 设置正交投影矩阵(例如使用 glOrtho)
- 将您的模型视图矩阵设置为标识
- 渲染填充整个视口的静态背景
- 设置透视投影矩阵
- 平移和旋转动画模型的模型(视图)矩阵
- 渲染你的模型
请注意,如果您想节省一些填充率,您可能需要翻转顺序并最后渲染背景。