我正在为一个类项目进行扫描线渲染。渲染器到目前为止工作,它读取模型(主要使用犹他茶壶),计算顶点/表面法线,并可以做平面和phong着色。我现在正在努力添加纹理映射,这是我遇到问题的地方(除了实际绘制屏幕上的点之外,我不能使用任何OpenGL方法)。
所以,我在我的应用程序中读取纹理并具有RGB值的2D数组。我知道这个概念是将纹理从2D纹理空间映射到一个简单的3D对象(在我的例子中是一个圆柱体)。然后,我接着将中间曲面映射到物体表面。
然而,我实际上并不知道如何做这些事情:)。我已经找到了一些关于将纹理映射到圆柱体的公式,但它们似乎总是留下细节,例如要使用哪些值。我还不知道如何获取对象的顶点坐标并获取该点的圆柱值。还有一些关于映射到圆柱体的其他StackOverflow帖子,但它们1)处理带有着色器等的新OpenGL,2)不处理中间曲面,所以我不确定如何从中转换知识。
因此,非常感谢任何有关使用圆柱体作为中间曲面将纹理映射到3D对象的伪代码的帮助。
答案 0 :(得分:2)
你继续使用短语“中间表面”,它没有正确描述过程,但暗示你脑子里有什么。
基本上,你要求一种方法将茶壶表面上的每个点映射到圆柱体上(假设纹理将被“包裹”在圆柱体上)。
只需将表面点转换为圆柱坐标( r , theta , height ),然后使用 theta u
和身高为v
(texcoords)。
这是你想要实现的目标: