4维隐藏表面去除

时间:2011-08-25 14:16:51

标签: c++ opengl dimensions 4d

我正在尝试编写一个小型的4d游戏。 我使用C ++和OpenGL。本网站对如何增强4d图像进行了很好的解释:
http://eusebeia.dyndns.org/4d/vis/07-hsr.html#Enhancing_4D_Projection_Images

他们告诉我们应用4d隐藏表面去除(HSR)算法 我不得不说我是编程和算法的新手,我真的不知道从哪里开始组合4d HSR,也不是3d。 如果有人有这种算法的经验,可以解释一下如何用C ++翻译它吗?

顺便说一下:我在3d中投影4d空间,所以我需要一个顶点去除算法,而不是像素修改,或者至少是我想的......我可能错了......

1 个答案:

答案 0 :(得分:0)

在许多情况下,3d隐藏曲面移除意味着当您绘制曲面时,您还会记住您绘制的每个像素的深度(距离“眼睛”的距离)。当您去绘制已经绘制了曲面的曲面时,如果像素距离已经存在的像素更接近眼睛,则只绘制像素。在3D图形库中,OpenGL(将三维场景描述投影到二维显示),这称为Depth Buffer Test

您还可以跟踪表面朝向的方向。如果它背离“眼睛”,那么根本不要画它。在OpenGL中,这是调用backface culling。如果要创建文章描述的分层透明外观,则必须根据深度对像素进行排序,并首先绘制最深的像素。然后在顶部绘制较近的那些,用旧像素颜色和当前表面颜色的凸组合替换当前像素。

对于你的4d案例,你需要决定投射4d的意义。我认为任何动画的3D模型实际上都是4d模型。如果你愿意的话,你可以像这个模拟的壁球运动员一样画出所有的框架: 4d racquetball player

在此图像中,时间由灰度值表示。因此,您可以看到球员在球场上移动并击球,所有这些都在一个静态图像中。当然,适当的4d到2d投影可能不会显示一堆绘制在一起的离散时间帧,而是宁愿连接桥接时间的顶点,以便不会看到一堆单独的球,而是会看到“管”这代表了球的轨迹。但是,在某些情况下,您链接的文章中提到了类似的内容,可能会减少沟通。