Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OpenGL中创建背景的步骤_C++_Opengl_Freeglut_Opengl Compat - Fatal编程技术网

C++ 在OpenGL中创建背景的步骤

C++ 在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_

我试图在OpenGL游戏中创建一个背景。这是基于freeglut和OpenGL即时模式(根据需求)。我的问题是,我无法正确显示背景图像,它看起来像一条细条,随着我的相机旋转。这让我相信这是一个定位问题,但我已经尝试改变对象的所有Z位置。下面是我的渲染函数,我想先绘制背景,然后绘制播放器“mSpaceShip”

在某些情况下 屏幕宽度=1200 屏幕高度=1200

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