Arrays 格林威治大学';t工作图动态数组
我正在尝试渲染一个四面体,我可以扩展到其他对象。 使用静态数组可以很好地绘制四面体。Arrays 格林威治大学';t工作图动态数组,arrays,ubuntu,opengl,gldrawarrays,Arrays,Ubuntu,Opengl,Gldrawarrays,我正在尝试渲染一个四面体,我可以扩展到其他对象。 使用静态数组可以很好地绘制四面体。 但当我将一个非文件读入一个动态数组时,什么也没有出现。编译时没有出现错误 GLfloat *tetra_vertices = NULL; //This is declared at the start 在从OFF文件获取数据的函数中使用了以下内容。 mod->faces从OFF文件中获取面数。在这种情况下,它是4。 我检查了从OFF文件中读取顶点的情况,这是准确的。甚至将它与静态数组进行了比较 tetra_
但当我将一个非文件读入一个动态数组时,什么也没有出现。编译时没有出现错误
GLfloat *tetra_vertices = NULL; //This is declared at the start
在从OFF文件获取数据的函数中使用了以下内容。
mod->faces从OFF文件中获取面数。在这种情况下,它是4。
我检查了从OFF文件中读取顶点的情况,这是准确的。甚至将它与静态数组进行了比较
tetra_vertices = (GLfloat *)malloc(sizeof(GLfloat) * mod->faces * 3 * 3);
for(i=0; i< (mod->faces * 3); i++){
tetra_vertices[i*3]=mod->verts[(mod->face[i])*3];
tetra_vertices[i*3+1]=mod->verts[(mod->face[i])*3+1];
tetra_vertices[i*3+2]=mod->verts[(mod->face[i])*3+2];
}
最后,在我的主要演讲中:
最后,我想将数组存储到一个列表中,这样我就可以循环从不同的OFF文件中抛出不同的对象。但现在我只想让它画些东西。如蒙协助,将不胜感激。谢谢。运算符查询对象或类型的大小,它返回类型的大小(以字节为单位),该大小将由传递给它的表达式返回。由于tetra_顶点
的类型是GLfloat*
,sizeof(tetra_顶点)
返回指针类型的大小,可能是4或8,具体取决于硬件
的第二个参数是数据缓冲区的大小(以字节为单位)
这意味着您必须像这样更改代码:
size_t vertex_size = sizeof(GLfloat) * mod->faces * 3 * 3;
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)vertex_size, tetra_vertices, GL_STATIC_DRAW);
您必须对颜色属性缓冲区tetra\u colors
执行相同的操作
GLFWwindow *window = glfwCreateWindow (512, 512, "Hello Cube", NULL, NULL);
glfwMakeContextCurrent (window);
setup(argc, argv); //This creates reads in the OFF file and creates the arrays.
init();
reshape(window, 512, 512);
glfwSetKeyCallback(window, keyboard);
glfwSetWindowSizeCallback(window, reshape);
while (!glfwWindowShouldClose (window)) {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
identity(transform);
lookat(transform, eye, at, up);
glUseProgram(program);
glBindVertexArray(vao);
glUniformMatrix4fv(ModelView, 1, GL_FALSE, transform);
glUniformMatrix4fv(Projection, 1, GL_FALSE, projection);
glDrawArrays(GL_TRIANGLES, 0, (mod->faces * 3));
glfwSwapBuffers (window);
if (animation)
update();
glfwPollEvents ();
}
size_t vertex_size = sizeof(GLfloat) * mod->faces * 3 * 3;
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)vertex_size, tetra_vertices, GL_STATIC_DRAW);