所以我应该对我加载到场景中的特定模型进行纹理贴图(使用帧缓冲区和平面针孔相机),但是我不允许使用 OpenGL,而且我不知道该怎么做否则(我们确实将 glDrawPixels 用于其他功能,但这是我们唯一可以使用的功能)。
这里有没有人能够告诉我如何在没有 OpenGL 功能的情况下进行纹理贴图?
我应该使用这些幻灯片:https://www.cs.purdue.edu/cgvlab/courses/334/Fall_2014/Lectures/TMapping.pdf
但它们对我来说意义不大。
到目前为止我收集到的是以下内容:
你迭代一个模型,并为每个三角形分配“纹理坐标”(我不确定它们是什么),然后使用“模型空间插值”(同样,我不明白那是什么)来以正确的视角应用纹理。
目前我的程序正在执行以下操作:
长话短说: 1. 什么是模型空间插值/我该怎么做? 2. 什么是纹理坐标? 3. 如何在不使用 OpenGL 的情况下在高层次上(通俗地说)对模型进行纹理映射。
最佳答案
好的,让我们首先确保我们都在同一页面上了解颜色插值的工作原理。第 125 行到第 143 行设置了三个 vector redABC
、greenABC
和 blueABC
,用于在三角形中插入颜色。它们一次处理一种颜色分量,三个 vector 中的每一个都有助于插入一种颜色分量。
按照惯例,s,t 坐标位于源纹理空间中。正如网格数据中所提供的那样,它们指定了三角形特定顶点在纹理中的位置。需要理解的关键是,s,t 坐标需要像颜色一样在三角形内插值。
因此,您要做的是再设置两个 ABC
vector :sABC
和 tABC
,完全复制用于设置的逻辑up redABC
,但不是使用每个顶点的颜色分量,而是使用每个顶点的 s,t 坐标。然后对于每个像素,不是将 ssiRed
等计算为 unsigned int
值,而是将 ssis
和 ssit
计算为 float ,它们应该在 0.0f
到 1.0f
范围内,假设您的源 s,t 值表现良好。
现在你有了一个内插的 s,t 坐标,将 ssis
乘以纹理的纹素宽度,将 ssit
乘以纹素高度,然后使用这些坐标来获取纹素。然后把它放在屏幕上。
关于c++ - 没有 OpenGL 的纹理映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452683/