所以我应该对我加载到场景中的特定模型进行纹理映射(使用帧缓冲区和平面针孔相机),但是我不允许使用OpenGL,而且我不知道如何做(否则)我们确实使用 glDrawPixels 来实现其他功能,但这是我们唯一可以使用的功能)。
这里有人能够给我演示如何在没有 OpenGL 功能的情况下进行纹理贴图吗?
我应该使用这些幻灯片:https://www.cs.purdue.edu/cgvlab/courses/334/Fall_2014/Lectures/TMapping.pdf
但它们对我来说毫无意义。
到目前为止我收集到的内容如下:
您迭代模型,并分配每个三角形“纹理坐标”(我不确定它们是什么),然后使用“模型空间插值”(同样,我不明白那是什么)来应用具有正确视角的纹理。
我的程序目前执行以下操作:
TL;博士: 1.什么是模型空间插值/如何进行? 2. 纹理坐标具体是什么? 3. 在高层次上(用外行人的话来说)我如何在不使用 OpenGL 的情况下对模型进行纹理映射。
好的,首先让我们确保我们对于颜色插值的工作原理达成共识。第 125 行到第 143 行设置了三个向量
redABC
、greenABC
和 blueABC
,用于在三角形上插值颜色。它们一次处理一种颜色分量,三个向量中的每一个都有助于插入一种颜色分量。
按照惯例,s,t 坐标位于源纹理空间中。正如网格数据中所提供的,它们指定了三角形特定顶点的纹理内的位置。要理解的关键一点是,s,t 坐标需要像颜色一样在三角形上进行插值。
因此,您要做的是设置另外两个
ABC
向量:sABC
和 tABC
,完全复制用于设置 redABC
的逻辑,但不使用每个顶点的颜色分量,而是只需使用每个顶点的 s,t 坐标即可。然后,对于每个像素,不是将 ssiRed
等计算为 unsigned int
值,而是将 ssis
和 ssit
计算为浮点数,它们应该在 0.0f
到 1.0f
范围内(假设源为 s,t)价值观表现良好。
现在您已经有了插值的 s,t 坐标,将
ssis
乘以纹理的纹素宽度,将 ssit
乘以纹素高度,然后使用这些坐标来获取纹素。然后把它放在屏幕上。
既然你没有使用 OpenGL,我假设你编写了自己的软件渲染器来渲染那个茶壶?
纹理只是一个图像。纹理坐标是纹理中的 2D 位置。所以 (0,0) 是左下角,(1,1) 是右上角。对于 3D 模型的每个顶点,您应该在纹理中存储一个 2D 位置 (u,v)。这意味着在该顶点,您应该使用纹理在该点的颜色。
要了解顶点之间像素的 UV 纹理坐标,您需要对其周围顶点的纹理坐标进行插值。然后您可以使用该 UV 来查找纹理中的颜色。
如果您是一名业余爱好者,正在寻找一款易于使用且功能强大的 CAD 软件,那么 CADHOBBY IntelliCAD 就是您的最佳选择。它是创建 3D 设计和模型的完美软件。