我正在尝试编写一些4D游戏。
我使用C++和OpenGL。该网站对如何增强4d图像提供了很好的解释:
http://eusebeia.dyndns.org/4d/vis/07-hsr.html#Enhancing_4D_Projection_Images
他们告诉应用4d隐藏表面去除(HSR)算法。
我必须说我是编程和算法方面的新手,但我真的不知道从哪里开始编写4D HSR或3D HSR。
如果有人对这种算法有经验,可以向我解释如何在C++中进行翻译吗?
顺便说一句:我在3d中投影4d空间,所以我将需要一种算法来去除顶点,而不是像素修改,或者至少是我认为的...我可能是错的...
最佳答案
在许多情况下,3d隐藏表面去除意味着您在绘制表面时,还记得所绘制的每个像素的深度(与“眼睛”的距离)。当您在已经绘制了表面的表面上进行绘制时,仅当像素比已经存在的像素更靠近眼睛时才绘制像素。在3d图形库OpenGL中(将3d场景描述投影到2d显示器上),这称为Depth Buffer Test。
您还可以跟踪表面朝向哪个方向。如果它背对着“眼睛”,则根本不要画它。在OpenGL中,这称为backface culling。如果要创建文章描述的分层透明外观,则必须根据深度对像素进行排序,然后首先绘制最深的像素。然后在顶部绘制较近的像素,用旧像素颜色和当前表面颜色的凸组合替换当前像素。
对于您的4D情况,您需要确定投影4D事物意味着什么。我认为任何具有动画效果的3D模型实际上都是4D模型。如果需要,您可以像使用此模拟壁球运动员一样一次绘制所有帧:
在此图像中,时间在此处由灰度值表示。这样一来,您就可以看到球员在球场上移动并击球,所有这些都是一个静态的图像。当然,正确的4d到2d投影可能不会显示一堆离散的时间框架,而是连接连接时间的顶点,这样您就看不到一堆“球”,而不是一堆球代表球的轨迹。但是,在您链接的文章中提到了类似的情况,在某些情况下,这种交流可能较少。
关于c++ - 4维隐藏表面去除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7191946/