c++ - 纹理模型

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

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

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

但是,在为我的模型添加纹理时,我有点卡住了。

我使用自定义模型格式,所以像使用 blender 使用 3ds 这样的回答不会有帮助。

这样做的原因是我开始了这个业余项目来自学 OpenGL 编程,并且因为我已经从一个真的我的一个 friend 在 1999 年写的老式 Turbo Pascal 软件渲染器准备好了模型,我一直在使用它们。

我的问题是:

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

最佳答案

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

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

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

同样简单,但对于像角色这样的东西来说通常更好的是将所有面向前方的多边形投影到它们的 x 和 y 坐标,对于面向背面的多边形也类似,只是你要偏移它们以使两组彼此相邻。

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

关于c++ - 纹理模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3370501/

相关文章:

c++ - C++的SVM教程

c++ - 读取 GLSL 文件时获取垃圾字符

opengl - 如何在 OpenGL 中使用多个视口(viewport)?

javascript - (THREE.JS) 计算自定义缓冲区几何体的自定义 UV

c++ - OpenGL 平铺/ block 传输/裁剪

java - Java 中的 C++ 样式多态输出

c++ - 重新定义符号的算法如何工作?

java - OpenGL 高度图加载器

c++ - OpenGL 纹理 : why does order matter?

javascript - Three.js MeshBasicMaterial 无法按预期工作