使用Marching Cubes和纹理坐标的麻烦

时间:2012-01-02 20:49:13

标签: c++ opengl 3d directx

我正在OpenGL中实现MC算法。

一切都很顺利,直到我到达纹理坐标点。

我无法弄清楚如何实施它们!

我的进步:

img

编辑: 我要归档的是在我生成的MC三角形上放置一些纹理。 据我所知,我需要告诉OpenGL uv坐标,但不知道如何计算它们。

2 个答案:

答案 0 :(得分:4)

用于行进立方体算法的典型纹理坐标生成算法是使用环境映射。

简而言之,您通过平均所有投影面的面法线来计算每个顶点的顶点法线,然后丢弃法线的z坐标并使用(x / 2 + 0.5,y / 2 + 0.5)作为( u,v)纹理坐标。

设置一个纹理,中间有一个漂亮的白点,一些结构填充纹理的其余部分,你得到终结器 - 两个银色机器人的外观。

答案 1 :(得分:3)

  

我需要告诉OpenGL uv坐标,但不知道如何计算它们。

你面临一些大问题:从MC出来的拓扑可以是任何东西。 OpenGL中纹理的拓扑结构是(超)圆环(GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D)或球体(GL_TEXTURE_CUBE_MAP)。

所以你不可避免地要将表面切割成所谓的地图。这是一项非常重要的任务,但是qood策略是沿着具有高曲率的区域切割。见论文

  

“用于自动纹理图集生成的最小二乘保形贴图”

     

BrunoLévy,Sylvain Petitjean,Nicolas Ray和JéromeMaillot

     

http://alice.loria.fr/index.php/publications.html?Paper=lscm@2002

了解脏的细节。