【问题标题】:4 dimensional Hidden Surface Removal4 维隐藏表面去除
【发布时间】:2011-08-25 14:16:50
【问题描述】:

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

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

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

【问题讨论】:

  • 请参阅how should i handle (morphing) 4D objects in opengl? 深度缓冲区 HSR 移除非常简单,实际上只是像素光栅化中的一个。无论如何,如果您想执行基于几何的 HSR,那么只需对表面进行法线处理,并使用相机视图方向制作一个点积,如果正面或负面将告诉您您的脸是否可见(假设存在多边形缠绕规则)当心交叉积在 4D 中来自 3 个向量!!!

标签: c++ opengl dimensions 4d


【解决方案1】:

在许多情况下,3d 隐藏表面移除意味着当你绘制一个表面时,你还记得你绘制的每个像素的深度(到“眼睛”的距离)。当你去绘制一个已经绘制了表面的表面时,你只绘制比已经存在的像素更靠近眼睛的像素。在 3d 图形库 OpenGL(将 3d 场景描述投射到 2d 显示器)中,这称为Depth Buffer Test

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

对于您的 4d 案例,您需要确定投影 4d 事物的含义。我认为任何具有动画效果的 3d 模型实际上都是 4d 模型。如果需要,您可以像使用这个模拟壁球运动员一样一次绘制所有帧:

在这张图片中,时间在这里用灰度值表示。所以你可以看到球员在球场上移动并击球,所有这些都在一个单一的静态图像中。当然,正确的 4d 到 2d 投影可能不会显示一堆离散的时间框架,而是连接连接时间的顶点,这样您就不会看到一堆单独的球,而是看到一个“管”代表球的轨迹。但是,您链接的文章中提到了类似的东西,在某些情况下,这可能会减少交流。

【讨论】:

  • 感谢您提供直接而准确的答案,但我将 4d 空间投影到 3d 中,所以我需要一个像深度缓冲区这样的算法,用于顶点而不是像素:( 我读到了那些(深度缓冲区,背面剔除)算法,对我来说看起来很复杂:(
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多