0

在 Java/OpenGL 应用程序的上下文中,我正在绘制由 27 个较小的立方体组成的仅黑色有线(不填充)大立方体。为此,我编写了以下代码:

for (int x = 1; x <= 3; x++) {
    for (int y = 1; y <= 3; y++) {
        for (int z = 1; z <= 3; z++) {
            wireCube(x - 2, 2 - y, 2 - z);
         }
    }
}

wireCube方法是使用实​​现的GL11.glBegin(GL11.GL_LINE_LOOP);

使用正确的调用gluPerspective来定义投影和正确调用来gluLookAt定位“相机”我能够根据需要显示我的大立方体......我对此非常满意!

我现在的新问题是,如何修改此代码以“隐藏”大立方体内的所有接线?为了帮助可视化场景,这些连线是在学校学习 3D 几何时通常用虚线绘制的连线。

提前感谢您的帮助

马努

4

3 回答 3

1

启用深度测试 ( glEnable(GL_DEPTH_TEST)) 并将四边形放在立方体的表面上。

要绘制四边形,请使用glBegin(GL_QUADS)后跟四个顶点和glEnd()调用。

于 2010-08-04T12:18:15.467 回答
0

用黑色多边形绘制所有立方体(或禁用颜色输出:glColorMask(false,false,false,false);):这将填充深度缓冲区。

然后画出你的线条。被多边形隐藏的将不会出现。不过会有z-fighting,所以glDepthTest(GL_LEQUAL);

如果您想绘制“不可见”的虚线,这还不够。您可以使用 glDepthTest(GL_GREATER) 再次绘制;

另一种解决方案是用实线绘制面向摄像机的多边形,而用虚线绘制面向摄像机的多边形。这是一个简单的点积 (camDir.faceNorm)。

于 2010-08-04T12:56:04.423 回答
0

使用 glPolygonOffset() 淹没或出现在具有相同坐标的多边形上方(或下方)的线框。

于 2010-08-07T17:22:18.820 回答