c++ - 没有 OpenGL 的纹理映射

标签 c++ visual-c++ textures texture-mapping interpolation

所以我应该对我加载到场景中的特定模型进行纹理贴图(使用帧缓冲区和平面针孔相机),但是我不允许使用 OpenGL,而且我不知道该怎么做否则(我们确实将 glDrawPixels 用于其他功能,但这是我们唯一可以使用的功能)。

这里有没有人能够告诉我如何在没有 OpenGL 功能的情况下进行纹理贴图?

我应该使用这些幻灯片:https://www.cs.purdue.edu/cgvlab/courses/334/Fall_2014/Lectures/TMapping.pdf

但它们对我来说意义不大。

到目前为止我收集到的是以下内容:

你迭代一个模型,并为每个三角形分配“纹理坐标”(我不确定它们是什么),然后使用“模型空间插值”(同样,我不明白那是什么)来以正确的视角应用纹理。

目前我的程序正在执行以下操作:

Teapot

长话短说: 1. 什么是模型空间插值/我该怎么做? 2. 什么是纹理坐标? 3. 如何在不使用 OpenGL 的情况下在高层次上(通俗地说)对模型进行纹理映射。

最佳答案

好的,让我们首先确保我们都在同一页面上了解颜色插值的工作原理。第 125 行到第 143 行设置了三个 vector redABCgreenABCblueABC,用于在三角形中插入颜色。它们一次处理一种颜色分量,三个 vector 中的每一个都有助于插入一种颜色分量。

按照惯例,s,t 坐标位于源纹理空间中。正如网格数据中所提供的那样,它们指定了三角形特定顶点在纹理中的位置。需要理解的关键是,s,t 坐标需要像颜色一样在三角形内插值

因此,您要做的是再设置两个 ABC vector :sABCtABC,完全复制用于设置的逻辑up redABC,但不是使用每个顶点的颜色分量,而是使用每个顶点的 s,t 坐标。然后对于每个像素,不是将 ssiRed 等计算为 unsigned int 值,而是将 ssisssit 计算为 float ,它们应该在 0.0f1.0f 范围内,假设您的源 s,t 值表现良好。

现在你有了一个内插的 s,t 坐标,将 ssis 乘以纹理的纹素宽度,将 ssit 乘以纹素高度,然后使用这些坐标来获取纹素。然后把它放在屏幕上。

关于c++ - 没有 OpenGL 的纹理映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452683/

相关文章:

c++ - 如何在 Windows 应用程序中截取屏幕截图?

c++ linux - 从IP获取接口(interface)

c++ - Clang 无法在模板类特化中编译模板函数,该函数具有来自模板声明的*不同的返回类型*

c++ - WIN32 :C++, 为什么在WM_CLOSE上调用Messagebox函数 程序死机

c++ - QT 与不同的工具集

objective-c - 简单的多边形纹理贴图/iOS/cocos2d

c++ - 类构造函数中指向 QProcess 对象的指针使 qt GUI 崩溃

winapi - 如何在 CWnd 中处理 wm_print 消息(使用 MFC)?

c++ - OpenGL 纹理不显示

android - Samsung Galaxy S2 OpenGl ES 2.0 问题