用背景绘制动画模型 - 设置opengl矩阵模式和透视

时间:2016-06-10 06:30:03

标签: opengl assimp

我正在尝试绘制带有图像背景的动画模型。 要正确绘制我的模型,我需要使用glMatrixMode,glLoadIdentity,gluPerspective等。但是,要在背景上绘制rect,我需要更改我设置的所有模式和矩阵以正确查看我的模型。

我在下面发布了我的代码。任何人都可以告诉我应该做什么来同时正确地看到我的模型和背景?

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);

1 个答案:

答案 0 :(得分:0)

如果您的图像背景是一个静态背景,应填充整个视口而不是随场景一起旋转,则应使用正交矩阵将其渲染为单独的。

我的遗产GL有点生疏,但看起来应该是这样的:

  1. 设置正交投影矩阵(例如,使用glOrtho)
  2. 将模型视图矩阵设置为标识
  3. 渲染填充整个视口的静态背景
  4. 设置透视投影矩阵
  5. 翻译并旋转动画模型的模型(视图)矩阵
  6. 渲染模型
  7. 请注意,如果您想保存一些填充率,您可能需要翻转订单并最后渲染背景。