在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几何体时通常用虚线绘制的。
提前感谢您的帮助
马努
答案 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()淹没或在相同坐标的多边形上方(或下方)显示线框。