Hide Rubik的立方体内部接线

时间:2010-08-04 12:13:53

标签: java opengl rubiks-cube

在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几何体时通常用虚线绘制的。

提前感谢您的帮助

马努

3 个答案:

答案 0 :(得分:1)

启用深度测试(glEnable(GL_DEPTH_TEST))并将四边形放在多维数据集的表面上。

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

答案 1 :(得分:0)

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

然后绘制你的线条。多边形隐藏的那些将不会出现。虽然会有z-fighting,所以glDepthTest(GL_LEQUAL);

如果你想绘制“不可见”的线条,这是不够的。您可以使用glDepthTest(GL_GREATER);

再次绘制

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

答案 2 :(得分:0)

使用glPolygonOffset()淹没或在相同坐标的多边形上方(或下方)显示线框。