gpt4 book ai didi

c++ - 我可以将 openGL 缓冲区设置为按照与 OBJ 文件类似的原理工作吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:42 25 4
gpt4 key购买 nike

假设我有以下数组(每个数组都有任意长度)并将它们用作备件箱;将它们中的每一个都放在缓冲区中,然后让 openGL 读取元素数组中的索引,并通过从每个数组容器中挑选顶点来构造顶点。

我们可以使用
构造一个顶点{坐标v1,正常vn3,颜色c1,纹理坐标vt4}

或者我们可以使用
构造另一个顶点{coordinate v1 again, normal vn3 again, color c3, texCoord vt2}

请注意,“坐标数组”还不是一个顶点,它只是提供一个位置来构造一个顶点。

在使用缓冲区和着色器的现代 openGl 中,这样的事情(对于初学者来说)会非常困难吗?

坐标数组:
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000

法线数组:
越南 0.000000 0.000000 -1.000000
vn -1.000000 -0.000000 -0.000000
vn -0.000000 -0.000000 1.000000
vn -0.000001 0.000000 1.000000
越南 1.000000 -0.000000 0.000000
越南 1.000000 0.000000 0.000001

调色板:
c 1.0,1.0,1.0
c 0.0,1.0,0.0
c 0.2,0.3,0.2

TextureCoordArray:
vt 0.748573 0.750412
vt 0.749279 0.501284
vt 0.999110 0.501077
vt 0.999455 0.750380
vt 0.250471 0.500702
vt 0.249682 0.749677
vt 0.001085 0.750380
vt 0.001517 0.499994
vt 0.499422 0.500239
vt 0.500149 0.750166
vt 0.748355 0.998230
vt 0.500193 0.998728
vt 0.498993 0.250415
vt 0.748953 0.250920

索引接收数组:
f {1,2,1,4}, {2,2,1,4}, {3,2,1,4}
f {2,2,1,4}, {3,2,1,4}, {4,2,1,4}
f {4,5,1,4}, {5,2,1,4}, {6,2,1,4}
f {6,2,1,4}, {7,2,1,4}, {8,2,1,4}
f {1,2,1,4}, {1,2,1,4}, {1,2,1,4}

最佳答案

这已多次以类似的形式出现。但是我找不到完全相同的拷贝,所以无论如何我都会回答。

OpenGL 不直接支持这一点。它只能有一个索引数组,这意味着每个唯一的属性组合都需要一个顶点。

有一个相当接近的扩展:AMD_interleaved_elements .它确实引入了每个属性索引的概念。但是使用它有几个问题:

  • 顾名思义,它是特定于供应商的。因此,您不能将它用作您支持的唯一呈现路径,除非您可以接受您的代码仅在一组有限的硬件上工作。
  • 它有严重的限制。它只支持两个 16 位索引或四个 8 位索引。由于两个索引不足以满足您描述的情况,因此每个绘制调用将被限制为 256 个顶点。对于任何有趣的事情,这很少是足够的。

因此,典型的方法是在将顶点数据提供给 OpenGL 之前,在您自己的代码中生成唯一的属性组合和相应的索引。我为这个任务发布了一些伪代码来回答这个问题:OpenGL - Index buffers difficulties .

关于c++ - 我可以将 openGL 缓冲区设置为按照与 OBJ 文件类似的原理工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31307337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com