使用 OpenGL 进行纹理映射后的奇怪结果

Posted

技术标签:

【中文标题】使用 OpenGL 进行纹理映射后的奇怪结果【英文标题】:Strange result after Texture Mapping with OpenGL 【发布时间】:2015-11-16 10:11:38 【问题描述】:

    步骤:在 2D 图像上查找 68 个地标(使用 dlib) 所以我知道每个地标的所有 68 个坐标!

    创建通用面部的 3D 蒙版(使用 OpenGL)-> 结果

我也知道面部模型的所有 3d 坐标!

    现在我想使用this Tutorial 将所有三角形从 2d 图像纹理映射到 3D 通用人脸模型

有人知道我的问题的答案吗?如果您需要更多信息,请给我留言,我会向您发送您需要的信息。谢谢大家!

编辑:找到this tutorial 后,我更改了图片的大小以获得宽度和高度,即为二的幂。 然后将我所有的图片坐标(地标)与大小分开: 地标(x)/高度和地标(y)/宽度

图片: 结果:

宽度和高度越大,图像清晰度越好!

【问题讨论】:

首先尝试禁用多边形剔除。然后我们将看到发生了什么。 您对此也有答案吗? (见正在编辑的图片) 【参考方案1】:

您所看到的似乎您将所有顶点直接传递给glDrawArrays,而没有任何重用。因此,每个顶点用于结果中的单个三角形,而不是用于原始图片中的 6 个或更多三角形。

您需要使用元素缓冲区来描述所有三角形是如何由您拥有的顶点组成的,并使用glDrawElements 来绘制它们。

另请注意,原始图像上的某些多边形实际上不是三角形。您可能需要为这些多边形(眼睛内部)插入额外的三角形。

【讨论】:

感谢您的建议。我做了你在回答中提到的。您可以在编辑下看到上面的结果。但现在怎么了?请你再帮我一次好吗? 嗯,你的纹理坐标看起来不对...看起来你的 CV 代码在输入图像上找不到正确的特征?实际上,在无纹理的线框中覆盖三角形也有助于调试。 坐标不能错,重新核对过,调试也没有给出任何答案。它可能是坐标系吗?那dlib和Opencv用的不是同一个系统? 好吧,他们错了,否则你会得到正确的图片:)。它确实可能是坐标的坐标系问题。但是,如果您至少提供了要重新映射的原始图像,那将有很大帮助。这篇文章中的第一张图片看起来不像重新映射的那张! tomdalling.com/blog/modern-opengl/02-textures 看看这个链接,它会为你描述整个操作。对于我的问题,我忘记将所有图片坐标与整个图片的宽度和高度(像素)分开。第二个问题是我没有宽度和高度,它是 2 的幂。更改所有这些后它工作正常(编辑结果的屏幕截图);)

以上是关于使用 OpenGL 进行纹理映射后的奇怪结果的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL 中将深度渲染到纹理时出现奇怪的结果

Android OpenGL ES 纹理映射/绘图问题 - 倾斜图像

使用 OpenGL 和 QT 进行纹理映射 - C++

opengl纹理映射总结

opengl使用bmp纹理映射画不出东西

OpenGL 半球纹理映射