opengl 绘制和移动原始形状

Posted

技术标签:

【中文标题】opengl 绘制和移动原始形状【英文标题】:opengl drawing and moving primitive shapes 【发布时间】:2014-04-18 00:39:09 【问题描述】:

所以我冒险进入 openGL 并学习我正在绘制形状。所以我有下面的代码来绘制一个多边形,它应该可以正常工作。我有两个问题 1. 如果我注释掉 glTranslatef 它可以工作,但如果我离开它,它什么也不会显示。我知道glTranslatef 是为了运动,所以因为没有形状,这是否意味着它被移走了?如果是这种情况,我如何让它移动但回来让我能看到同样的东西?

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0.0f,0.0f,-4.0f);

glColor3f(0.0f,0.0f,1.0f);

glBegin(GL_POLYGON);
    glVertex3f(-0.2f,0.2f,0.0f);
    glVertex3f(0.2f,0.2f,0.0f);
    glVertex3f(0.6f,0.0f,0.0f);
    glVertex3f(0.2f,-0.2f,0.0f);
    glVertex3f(-0.2f,-0.2f,0.0f);
    glVertex3f(-0.6f,0.0f,0.0f);
glEnd();

【问题讨论】:

【参考方案1】:

以下是您所缺少的:

视口从 [-1,1] 向您正在工作的坐标空间中的所有方向延伸(标准化设备坐标)。 z 轴是这样的,+z 指向正前方,-z 指向后方,-1.0 表示您可以看到的最近点(平面附近)。

通过将所有 -4 个单位从 0 平移,您将多边形 3 个单位在您身后 移动Z 轴。只要您将平移限制在 z 轴上的 +/- 1.0 单位内,这将正常工作,但您已经远远超出了这个范围。

但是,请注意,由于您没有使用透视投影,因此当该多边形远离您或更近时,您实际上不会看到任何视觉差异(大小不会随距离而变化)。一旦你将它移到足够远(超出范围 [-1,1]),它就会消失。


大多数时候,NDC 并不是一个特别有用的坐标空间,因此您将使用非恒等模型视图和投影矩阵来定义更大且更可控的查看体积。不过,目前你在 NDC 工作,因为你有身份矩阵。

【讨论】:

以上是关于opengl 绘制和移动原始形状的主要内容,如果未能解决你的问题,请参考以下文章

opengl 显示形状和绘制文本

C++ OpenGL,绘制形状返回错误

在 OpenGL 中绘制形状的标准(常用)方法是啥?

在opengl中绘制几何图形

在 OpenGL 中绘制多个形状

OpenGL - 如何使用弹出菜单绘制多个不同的 2D 形状?