作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在绘制一系列彼此相邻的立方体,并且我想剔除所有接触的边,因为它们是无用的。问题是我不知道如何剔除侧面。有人可以解释如何剔除通过 glBegin()/glEnd() 调用调用的立方体的任何面吗?
最佳答案
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
关于java - OpenGL 侧面剔除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268902/
我是一名优秀的程序员,十分优秀!