[英]Texture Mapping without OpenGL
因此,我应该对我加载到场景中的特定模型(使用帧缓冲区和平面针孔相机)进行纹理映射,但是我不允许使用OpenGL,否则我不知道该怎么做(我们确实将glDrawPixels用于其他功能,但这是我们可以使用的唯一功能)。
这里有没有足够的能力让我了解如何在没有OpenGL功能的情况下进行纹理贴图?
我应该使用以下幻灯片: https : //www.cs.purdue.edu/cgvlab/courses/334/Fall_2014/Lectures/TMapping.pdf
但是它们对我来说意义不大。
到目前为止,我收集的是以下内容:
您遍历一个模型,并为每个三角形分配“纹理坐标”(我不确定它们是什么),然后使用“模型空间插值”(同样,我不知道这是什么)来应用纹理正确的角度来看。
目前,我的程序正在执行以下操作:
TL; DR:1.什么是模型空间插值/我该怎么做? 2.纹理坐标明确是什么? 3.在不使用OpenGL的情况下,如何在较高水平上(以通俗的术语来说)对模型进行纹理映射。
好的,让我们首先确保我们都在同一页上讨论颜色插值的工作方式。 第125到143行设置了三个矢量redABC
, greenABC
和blueABC
,用于在三角形上插值颜色。 它们一次工作一个颜色分量,并且三个向量中的每一个都有助于内插一个颜色分量。
按照惯例,s,t坐标位于源纹理空间中。 如网格数据中所提供的,它们指定三角形的特定顶点在纹理内的位置。 要理解的关键是, 像颜色一样,需要在三角形上插补s,t坐标 。
因此,您想要做的是再设置两个ABC
向量: sABC
和tABC
,精确地复制用于设置redABC
的逻辑,但是您不必使用每个顶点的颜色分量,而只需使用每个顶点的s,t坐标顶点。 然后,对于每个像素,而不是将ssiRed
等计算为unsigned int
值,而是将ssis
和ssit
计算为float,假设您的源s,t值表现良好,则它们应在0.0f
到1.0f
的范围内。
现在你有一个插S,T坐标,乘ssis
由纹理的纹理像素宽度, ssit
通过纹理像素的高度,并使用这些坐标来获取纹理像素。 然后将其放在屏幕上。
由于您未使用OpenGL,所以我假设您编写了自己的软件渲染器来渲染茶壶?
纹理只是图像。 纹理坐标是纹理中的2D位置。 因此(0,0)在左下角,而(1,1)在右上角。 对于3D模型的每个顶点,应在纹理中存储2D位置(u,v)。 这意味着在那个顶点上,您应该使用该点纹理的颜色。
要了解顶点之间的像素的UV纹理坐标,您需要在其周围插入顶点的纹理坐标。 然后,您可以使用该UV查找纹理中的颜色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.