纹理模型

时间:2010-07-30 10:11:41

标签: c++ opengl texture-mapping dev-c++

我已经编写了一个三维地形引擎,其上面有简单的模型引擎。

我为地形使用矩形高度图,因此对这些三角形进行纹理化非常简单。

然而,在纹理化我的模型时,我有点卡住了。

我使用自定义模型格式,因此使用blender 使用3ds 等答案将无济于事。

这样做的原因是我开始这个业余爱好项目来自学OpenGL编程,并且因为我从真正的旧的Turbo Pascal软件渲染器中准备了模型,我的一位朋友在1999年写道,我只是继续使用它们。

我的问题是:

是否有一个众所周知的算法来为我的模型组成的三角形生成纹理坐标?如果没有,我应该采取什么策略?

2 个答案:

答案 0 :(得分:4)

有多种方法可以自动生成纹理坐标,但我不知道有什么简单的方法可以为您提供坐标,而不会出现明显的失真或过度的不连续性。

我想说最简单的方法是编写一个小程序,将您当前的模型格式转换为更标准的格式。我在过去做过这个,我发现XNA .x格式很容易转换为。我认为你尝试的任何其他事情最终都会花费更长的时间,而且比使用3D建模包中提供的工具更困难。

如果您确定不想进行转换,那么我的建议是瞄准简单的事情,并接受结果不会很好。一种简单的方法是球面投影 - 基本上你可以根据从模型中心到顶点的矢量对应的“纬度”和“经度”将纹理坐标分配给顶点。

同样容易,但对于像字符这样的东西来说通常更好的方法是将所有前向多边形投影到它们的x和y坐标,并且类似地用于背面多边形,除了你偏移它们以使两个集合彼此相邻。

更进一步,您也可以尝试圆柱投影。这些投影中的每一个都适用于某些形状。但是,一般来说,它们比Blender等适当的UV解包更糟糕。

答案 1 :(得分:1)

你也可以写一个小的Blender导入器和相应的导出器。每个应该不超过100行Python(你的模型格式似乎很简单),自动uv映射算法比2x 100 LOC

更复杂很多

另一个解决方案是放弃对旧格式的支持,并使用你找到的第一个.obj加载器(或任何东西)。