我画的是一系列彼此相邻的立方体,我想要剔除所有触摸的边,因为它们没用。问题是我不知道如何剔除双方。有人可以解释如何使用glBegin()/ glEnd()调用来剔除正在调用的多维数据集的任何一侧吗?
答案 0 :(得分:2)
OpenGL不会为你做这件事,你必须自己剔除它们。
我在最近的一个项目中做了以下事情:
从立方体位置的集合中,我将每个面的条目添加到字典中。此映射的面部中心位置面向正常。在添加新的(位置,正常)对之前,我会测试该位置的存在。如果找到:删除现有条目并丢弃新条目。否则添加新的(位置,正常)。
从这本词典中你可以建立顶点和三角形列表,你就不会有任何碰面。
可能有更有效的方法可以做到这一点,但这对我的应用程序来说已经足够了,而且很容易实现。
修改强>
PSEUDOCODE:
d = dictionary<vec3, vec3>
for each cube:
for face 1..6:
pos = faceCenterFor(cube, face)
if pos in d:
remove d[pos]
else:
d[pos] = normalFor(cube, face)
for each (pos, normal) in d:
draw(vertsForFace(pos, normal))
# or save verts to an array for drawing later
答案 1 :(得分:0)
如果确保为立方体指定面法线,则可以至少启用背面剔除(glEnable()
),但很可能对于立方体侧面,您需要手动剔除。
但是,您可以将侧面的法线设置为背面,以便通过背面剔除来拾取。
使用(例如):
指定每个面的法线gl.glNormal3f(1, 0, 0);
用于背面剔除用途:
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);