【问题标题】:Texturing a model纹理模型
【发布时间】:2011-03-23 04:19:23
【问题描述】:
我编写了一个带有简单模型引擎的 3d 地形引擎。
我对地形使用矩形高度图,因此对这些三角形进行纹理处理非常简单。
但是,在为我的模型设置纹理时,我有点卡住了。
我使用自定义模型格式,因此use blender 或use 3ds 之类的答案不会有帮助。
这样做的原因是我开始这个爱好项目是为了自学 OpenGL 编程,并且因为我从一个 真正 旧的 Turbo Pascal 软件渲染器中准备好了模型,这是我的一个朋友在 1999 年编写的,我只是一直在使用它们。
我的问题是:
是否有一种众所周知的算法可以为我的模型所包含的三角形生成纹理坐标?如果不是,我应该遵循什么策略?
【问题讨论】:
标签:
c++
opengl
texture-mapping
dev-c++
【解决方案1】:
您还可以编写一个小的 Blender 导入器和相应的导出器。每个应该不超过 100 行 Python(您的模型格式似乎很简单),并且自动 uv 映射算法比 2x 100 LOC 复杂得多
另一个解决方案是放弃对旧格式的支持,并使用您找到的第一个 .obj 加载器(或任何东西)。
【解决方案2】:
有很多方法可以自动生成纹理坐标,但我不知道有什么简单的方法可以在没有明显失真或过度不连续的情况下为您提供坐标。
我想说最简单的方法是编写一个小程序,将您当前的模型格式转换为更标准的格式。我过去做过这个,我发现 XNA .x 格式很容易转换。我认为您尝试的任何其他事情最终都会比这样做并使用 3D 建模包中提供的工具花费更长的时间和更困难。
如果您绝对确定不想进行转换,那么我的建议是瞄准一些简单的事情,并接受结果不会很好。一种简单的方法是球面投影 - 基本上,您根据与从模型中心到顶点的向量相对应的“纬度”和“经度”将纹理坐标分配给顶点。
同样简单,但通常更适合角色之类的事情是将所有前向多边形投影到它们的 x 和 y 坐标上,对于后向多边形也类似,只是将它们偏移以使两组彼此相邻。
更进一步,您还可以尝试圆柱投影。这些投影中的每一个都适用于某些类型的形状。但是,通常它们会比在 Blender 等中进行适当的 UV 展开要差得多。