【问题标题】:OpenGL gluperspective()OpenGL gluperspective()
【发布时间】:2011-11-15 22:53:35
【问题描述】:

我想我可能严重误解了 gluperspective() 的用法并需要帮助。

我目前有这段代码会产生一个空白的黑屏(据我所知,它应该产生两个正方形,一个更近,一个更远)。它不这样做,我需要理解为什么不这样做。

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/glu.h>
#include "functionfile.h"

int main(int argc, char **argv)
{
init_perspective(640, 480);

glTranslatef(0,0,10);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
glVertex3f(0,  0,0);
glVertex3f(10, 0,0);
glVertex3f(10,10,0);
glVertex3f(0, 10,0);
glEnd();

glLoadIdentity();
glTranslatef(0,0,50);

glBegin(GL_QUADS);
glVertex3f(0,   0, 0);
glVertex3f(10,  0, 0);
glVertex3f(10, 10, 0);
glVertex3f(0,  10, 0);
glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

SDL_Delay(2000);

SDL_Quit();

return 0;
}

// from header file "functionfile.h" 

void init_perspective(int width, int height)

{

SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(width, height, 32, SDL_OPENGL);
SDL_WM_SetCaption( "OpenGL Test", NULL );

glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(45, width/height, 1, 100);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glClear( GL_COLOR_BUFFER_BIT );

}

【问题讨论】:

  • 试试glTranslatef(0, 0, -10)glTranslatef(0, 0, -50)
  • 啊,忘了它默认是向下看-z轴的,我现在至少可以在屏幕上看到一些东西了,非常感谢!

标签: opengl


【解决方案1】:

您的相机正向下看负 Z 轴,因此您的 glTranslatef 调用将几何图形移动到相机后面,而不是前面。

【讨论】:

    【解决方案2】:

    嗯,您的代码包含几个问题。首先,您缺少设置视口(请参阅glViewport 文档)。接下来您应该知道OpenGL 是一个状态机,并且在每次渲染迭代之前设置所有必需的状态是一个很好的做法。这包括设置视口和投影。所以glViewport 和设置投影矩阵在语义上属于绘图命令,而不是窗口管理命令。

    从程序执行的角度来看,您的情况还没有区别,但是一旦您引入动画和事件循环,这变得很重要。还要记住,如果渲染过程需要,您可以随时更改视口投影参数,例如在屏幕一角绘制小地图叠加层。

    【讨论】:

    • 感谢您的回复,我知道在 OpenGL 中编程时我应该使用视口,目前我只是想在屏幕上渲染一些东西,这样我就可以玩弄它了跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2011-01-25
    • 2011-07-15
    相关资源
    最近更新 更多