最近我开始用C / C ++编程,但我觉得有点难以理解某些事情。例如,我的vertices.h文件:
#ifndef _vertices_h
#define _vertices_h
typedef struct
{
float XYZW[4];
float RGBA[4];
} Vertex;
extern Vertex Vertices[];
extern GLubyte Indices[];
#endif
我的vertices.c文件:
#include "vertices.h"
Vertex Vertices[] =
{
{ { 0.0f, 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }
};
GLubyte Indices[] = {
0, 1, 3,
0, 3, 2,
3, 1, 4,
3, 4, 2
};
不,我需要在其他.h文件中创建一个使用我的Vertices数组的函数。这是shader.c文件:
#include "vertices.h"
void CreateVBO(){ #############################################1
// some operations that uses the passed Vertices array
}
和我的“shaders.h”文件:
#ifndef _shaders_h
#define _shaders_h
void CreateVBO(); #############################################################2
#endif
现在我的问题是,在我的main函数中我调用函数CreateVBO,我想传递它需要的顶点数组。在我的情况下,我只宣布1,但我想宣布更多,并传递我想要的。所以基本上,我真的不知道如何声明函数CreateVBO的参数。我缺少的行标有####。
void doSemthing(int argc, char* argv[]){
...
CreateVBO(); #############################################################3
}
答案 0 :(得分:1)
Vertices[]
是全局的,您不需要通过参数传递它。但是,您也可以传递顶点。
使您的功能如下
void CreateVBO(Vertex vertices[]);
称之为
CreateVBO(Vertices);
答案 1 :(得分:1)
我的问题似乎并不清楚,虽然我假设您要向数组“Vertices []”声明更多元素,并且您希望将其中任何一个传递给“CreateVBO()”。< / p>
假设您在“vertices.h”中将“Vertices []”声明为:
Vertices[index1] = {...something....}; // Vertices with index1 elements.
现在在“shaders.h”文件中,您可以将CreateVBO()声明并定义为:
void CreateVBO(Vertex *V)
{
//....something....
V[index1].XYZW[index2] // You can access the variables as shown.
V[index1].RGBA[index2] // You can access the variables as shown.
//....something....
}
在“doSemthing()”中,顶点可以传递给“CreateVBO()”:
void doSemthing(int argc, char* argv[])
{
...something....
CreateVBO(Vertices);
...something....
}