3

我编写了一个带有简单模型引擎的 3d 地形引擎。

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

但是,在对我的模型进行纹理处理时,我有点卡住了。

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

这样做的原因是我开始这个爱好项目是为了自学 OpenGL 编程,并且由于我从一个非常古老的 Turbo Pascal 软件渲染器中准备好了模型,我的一个朋友在 1999 年编写了这些模型,所以我一直在使用它们。

我的问题是:

是否有一种众所周知的算法可以为我的模型所包含的三角形生成纹理坐标?如果不是,我应该遵循什么策略?

4

2 回答 2

4

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

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

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

同样容易,但通常更好的是,对于像字符这样的东西,将所有前向多边形投影到它们的 x 和 y 坐标上,同样对于后向多边形,除了你偏移它们,使两组彼此相邻。

更进一步,您还可以尝试圆柱投影。这些投影中的每一个都适用于某些类型的形状。但是,通常它们会比 Blender 等中的适当 UV 展开要差得多。

于 2010-07-30T10:42:13.093 回答
1

您还可以编写一个小的 Blender 导入器和相应的导出器。每个应该不超过 100 行 Python(您的模型格式似乎很简单),并且自动 uv 映射算法2x 100 LOC 复杂得多

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

于 2010-07-30T11:49:32.883 回答