【问题标题】:Moving some points in z-axis in OpenGL doesnt work在OpenGL中移动z轴上的一些点不起作用
【发布时间】: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();

感谢您的帮助。

【问题讨论】:

    标签: opengl 3d sdl


    【解决方案1】:

    正交投影具有该属性,您可以在 Z 轴上移动它们,但对象看起来相同。切换到透视投影,在该投影上,物体会随着与相机的距离而变小。

    关于剔除,您在观察立方体之外进行绘制(当 Z 100 时)。投影会剔除它视野之外的任何东西。

    【讨论】:

    • 好的,那是什么意思?我的初始化错了吗?我以为我已经在透视投影中了。我唯一要做的就是上面的init,然后用glVertex3f开始绘图。你能解释我要改变什么吗?您答案的第二个部分是有道理的。感谢您的帮助。
    • 您正在使用 glOrtho,它可以进行正投影。使用 gluPerspective 获得透视投影。
    • 啊,太好了。刚刚搜索了“opengl 透视投影”。我在这里看到两个不同的。 glFrustum 和 gluPerspective。由于我使用 SDL+OpenGL,我猜“glFrustum”是我的选择。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多