-5

最近我开始用 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

现在我的问题是,在我的主函数中,我调用函数 CreateVBO,并且我想将我需要的顶点数组传递给它。就我而言,我只声明了 1,但我想声明更多并传入我想要的。所以基本上,我真的不知道如何声明函数 CreateVBO 的参数。我缺少的行是用#### 签名的。

void doSemthing(int argc, char* argv[]){
...
CreateVBO(); #############################################################3
}
4

2 回答 2

1

Vertices[]是全局的,你不需要通过参数传递它。但是,您也可以传递顶点。

使您的功能如下

void CreateVBO(Vertex vertices[]);

叫它

CreateVBO(Vertices);
于 2013-04-18T14:00:55.027 回答
1

您的问题对我来说似乎并不清楚,尽管我假设您要向数组“ Vertices [ ] ”声明更多元素,并且您希望将其中任何一个传递给“ CreateVBO() ”。

假设您将“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....
}
于 2013-04-18T15:30:34.177 回答