C++ 在OpenGL中创建背景的步骤
我试图在OpenGL游戏中创建一个背景。这是基于freeglut和OpenGL即时模式(根据需求)。我的问题是,我无法正确显示背景图像,它看起来像一条细条,随着我的相机旋转。这让我相信这是一个定位问题,但我已经尝试改变对象的所有Z位置。下面是我的渲染函数,我想先绘制背景,然后绘制播放器“mSpaceShip” 在某些情况下 屏幕宽度=1200 屏幕高度=1200C++ 在OpenGL中创建背景的步骤,c++,opengl,freeglut,opengl-compat,C++,Opengl,Freeglut,Opengl Compat,我试图在OpenGL游戏中创建一个背景。这是基于freeglut和OpenGL即时模式(根据需求)。我的问题是,我无法正确显示背景图像,它看起来像一条细条,随着我的相机旋转。这让我相信这是一个定位问题,但我已经尝试改变对象的所有Z位置。下面是我的渲染函数,我想先绘制背景,然后绘制播放器“mSpaceShip” 在某些情况下 屏幕宽度=1200 屏幕高度=1200 void GameInstance::Render() { glClear(GL_COLOR_BUFFER_BIT | GL_
void GameInstance::Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(-SCREEN_WIDTH / 2, SCREEN_WIDTH / 2, -SCREEN_HEIGHT / 2, SCREEN_HEIGHT / 2);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(0.0f, 0.0f, 100.0f);
glBegin(GL_QUADS);
glVertex2i(0, 0);
glVertex2i(SCREEN_WIDTH, 0);
glVertex2i(SCREEN_WIDTH, SCREEN_HEIGHT);
glVertex2i(0, SCREEN_HEIGHT);
glEnd();
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
mSpaceShip->Render();
//for (int i = 0; i < 500; i++) {
// cubeField[i]->Draw();
//}
glFlush();
glutSwapBuffers();
}
void GameInstance::Render()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(-SCREEN_WIDTH/2,SCREEN_WIDTH/2,-SCREEN_HEIGHT/2,SCREEN_HEIGHT/2);
glMatrixMode(GLU模型视图);
glPushMatrix();
GLTRANSTEF(0.0f、0.0f、100.0f);
glBegin(GL_QUADS);
glVertex2i(0,0);
glVertex2i(屏幕宽度,0);
glVertex2i(屏幕宽度、屏幕高度);
glVertex2i(0,屏幕高度);
格伦德();
glPopMatrix();
glMatrixMode(GL_投影);
glPopMatrix();
glMatrixMode(GLU模型视图);
mSpaceShip->Render();
//对于(int i=0;i<500;i++){
//立方字段[i]->Draw();
//}
glFlush();
glutSwapBuffers();
}
尽量不要让事情过于复杂化
void GameInstance::Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// the default matricies set the origin to be at the center of the screen, with
// (-1, -1) being at the bottom-left corner, and
// ( 1, 1) being at the top-right.
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
// render a full-screen quad without writing to the depth buffer
glDisable(GL_DEPTH_TEST);
glBegin(GL_QUADS);
glVertex2i(-1, -1);
glVertex2i( 1, -1);
glVertex2i( 1, 1);
glVertex2i(-1, 1);
glEnd();
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
mSpaceShip->Render();
glFlush();
glutSwapBuffers();
}
在调用gluOrtho2D
时,您将原点设置在屏幕的中心,但仅渲染右上象限内的四边形(但当您在Render()
之外对glu MODELVIEW
进行更改时,这只是一个猜测)
使用glutorho2d
相当于调用glOrtho
,z-clipping范围设置为[-1..1]
,因此我怀疑调用glTranslatef
需要更小的z值,比如0.5f
而不是100.0f