gpt4 book ai didi

ios - OpenGL 加载后添加顶点

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

我正在 iOS 设备上将 3D 文件解析为 OpenGL ES,在我获得顶点后,我似乎无法将它们添加到包含我的顶点的 GLfloat。在我的文件顶部,我声明了这个 GLFloat:

    GLfloat gFileVertices[] = {
-0.686713, 0.346845, 3.725390, -0.000288, -0.000652, -0.000109,
-0.677196, 0.350971, 3.675733, -0.000288, -0.000652, -0.000109,
-0.673889, 0.340921, 3.726985, -0.000288, -0.000652, -0.000109,
-0.677424, 0.337048, 3.775731, -0.000283, -0.000631, -0.000071,
And so on...
}

但是我怎样才能将相同的数据(x,y,z normal.x,normal.y,normal.z)放入一个实例中的那个数组中,其中每个数据都是变量并且行数可变?

最佳答案

解决方案是在运行时动态分配顶点缓冲区,而不是在编译时静态分配。在您的代码中,一旦程序编译完成,就无法更改 gFileVertices 的大小。

出于管理目的,我将改为使用单独的法线和顶点数组,而不是将数据交织在一起。

要解析文件,确定顶点数并分配缓冲区。

GLfloat* verticesBuff = malloc(sizeof(GLfloat) * vertCount * 3); /* 3 floats per vert */
GLfloat* normalsBuff = malloc(sizeof(GLfloat) * vertCount * 3); /* 3 floats per vert */

然后将每个元素复制到新数组中:

  /* read from file or whatevs */
for (int i = 0; i < vertCount; i ++)
{
verticesBuff[i * 3] = ...
verticesBuff[i * 3 + 1] = ...
verticesBuff[i * 3 + 2] = ...

normalsBuff[i * 3] = ...
normalsBuff[i * 3 + 1] = ...
normalsBuff[i * 3 + 2] = ...

}

动态数组可以像静态数组一样在 OpenGL 中使用:

glVertexPointer(3, GL_FLOAT, 0, verticesBuff); 
glNormalPointer(GL_FLOAT, 0, normalsBuff);

就是这样!只需确保在完成后删除:

free(verticesBuff);
free(normalsBuff);

关于ios - OpenGL 加载后添加顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602672/

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