【发布时间】:2010-07-26 09:00:55
【问题描述】:
我在 opengl 的屏幕上绘制了一个简单的矩形。
我的目标是在 3D 中绘制这个矩形,使其左侧比右侧更深(z 轴)。
看看这张照片,你就会明白我的意思: http://www.battleteam.net/tech/fis/docs/images/metroid_hud1.png
这是我用来绘制使用不同颜色的矩形的代码,我将左侧的两个点向上移动了一点。
glColor4f( 1.0, 1.0, 1.0, 1.0 );
glVertex3f( 0, -20, z_left );
glColor4f( 0.0, 1.0, 1.0, 1.0 );
glVertex3f( SQUARE_WIDTH, 0, 0 );
glColor4f( 1.0, 0.0, 1.0, 1.0 );
glVertex3f( SQUARE_WIDTH, SQUARE_HEIGHT, 0 );
glColor4f( 1.0, 1.0, 0.0, 1.0 );
glVertex3f( 0, SQUARE_HEIGHT-20, z_left );
我使用 z_left 变量动态更改左侧两个点的 z 值,以在 z 轴上移动这些点。但是会发生什么是矩形从左侧被切断。当 z_left 值达到通过“glOrtho”函数调用定义的 zFar 或 zNear 变量时,就会发生这种情况。
我的 glOrtho 看起来像这样: glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100);
因此,如果 z_left 高于 100 或低于 -100,那么奇怪的截断就开始了。我不知道为什么。我希望矩形的左侧在 z 轴上移动,这意味着将其移动得更深(远离眼睛)或更靠近。
有人能告诉我这里有什么问题吗?其余的代码非常简单和标准。 将 3D 环境中的一个简单矩形稍作更改,使其具有类似矩形的“3d 面板”。
我的 OpenGL 初始化看起来像这样。
glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity(); glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
感谢您的帮助。
【问题讨论】: