【问题标题】:In a obj+mtl+jpg 3D file, how to get the 3D coordinate where a specific pixel in the jpg file will be applied?在 obj+mtl+jpg 3D 文件中,如何获取将应用 jpg 文件中特定像素的 3D 坐标?
【发布时间】:2018-07-04 11:37:06
【问题描述】:

我有 3 个文件,一个 .obj、一个 .mtl 和一个 .jpg 文件。

有没有办法为 .jpg 文件中的每个(相关)像素获取“投影”颜色的 3D 点?

我的意思是,这必须在将纹理应用于模型的过程中的某个地方进行计算,对吧?

这个想法是有一个与 jpg 文件具有相同高度和宽度的数组,但其中包含 3D 坐标。

我在 python 中工作,我已经使用 PyWavefront(+pyglet.gl) 和他们在此处提供的示例导入了带有纹理的 obj 文件:https://github.com/greenmoss/PyWavefront/blob/master/pywavefront/texture.py

这可能与这个问题无关,因为我想计算数组而不显示任何内容。

【问题讨论】:

  • ...PNJ 文件?还是JPG?
  • 这是jpg。我编辑了我的帖子

标签: python opengl 3d textures wavefront


【解决方案1】:

这并不是真正应用纹理的方式。 obj 为您提供的是每个顶点的 UV 坐标。 UV 坐标是 2D 向量,它告诉您某个顶点在图片中的位置。所有这些坐标构成了所谓的 UV 贴图。

这是它的视觉表示:

此信息位于 .obj 文件中。以 vt 开头的每一行描述一个向量。以 f 开头的每一行都描述了一个多边形。每组 3/4/5 描述 3dcoord/TextureCoord/normal。

在您的片段着色器中,您将使用该片段的插值 UV 坐标对纹理进行采样。

【讨论】:

  • 哦,我认为这是有道理的。因此,v 是 3D 点,vn 是法线(在我的情况下,我不在乎),vt 是纹理(介于 0 和 1 之间,很容易将其链接到图像)。谢谢,我想我明白了。
  • @SuperMouette 是的,尽管要小心,obj 中的一个顶点可以在不同的面上有两个 VT,这不是 opengl 顶点及其属性的情况。您需要复制一些顶点。
猜你喜欢
  • 1970-01-01
  • 2018-03-11
  • 2019-01-21
  • 2015-11-19
  • 2017-10-04
  • 2023-01-22
  • 2016-01-14
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多