我正在尝试阅读以下文件(注释不存在于原始文件中):
四联体
4 4 //顶点总数和三角形总数
0.693361 0.693361 0.693361 //顶点坐标
0.693361 -0.693361 -0.693361
-0.693361 -0.693361 0.693361
-0.693361 0.693361 -0.693361
3 1 2 3 //要显示的三角形(前面的3指定是三角形)
3 0 3 2
3 0 1 3
3 0 2 1
我试图使用动态数组来执行此操作,因为我将需要打开其他文件,并且因为我正在使用顶点数组绘制到屏幕上。
我正确地获得了第一个值(根据上面的文件,vertcount和tricount分别为4和4),但是之后我做错了。
这是代码:
void main(){
struct Vertex // Vertex Structure
{
float x,y,z;
};
struct Triangle // Triangle Structure
{
struct Vertex vert1, vert2, vert3;
};
int vertcount=0; //total number of vertices
int tricount=0; // number of triangles to display
int v=0; //var to store index value of each vertex
int t=0; //var to store index value of each triangle
struct Vertex InstVertex; // Instantiation of Vertex defined as struct with 3 floats to store coordinates
struct Triangle InstTriangle; // Instantiation of the Triangle STRUCT
long filesize;
char buffer;
struct Vertex vertArray[v];
struct Triangle triArray[t];
FILE * pmesh; // pointer to the mesh file to be opened
pmesh = fopen ("/Users/.../tetra.tri","r"); // Tries to access the file specified. TO BE CHANGED ----> Dialaog window with browse for file function
/ **********读取文件并存储值********** /
fscanf(pmesh, " %i %i ", &vertcount, &tricount); //read from file and assign the first two values: number of Vertices and Triangles
vertArray[v] = malloc(vertcount*(sizeof(struct InstVertex))); // Array of vertexes - space allocated = total number of vertices * the size of each Vertex
triArray[t] = malloc(tricount*(sizeof(struct InstTriangle))); // Array of triangles
int i=0, j=0; // Temp variables for for loops
for (i=0; i<=vertcount; i++){
fscanf(pmesh, "%d %d %d", &InstVertex.x, &InstVertex.y, &InstVertex.z); //read file and store coordinates in
vertArray[v]=InstVertex;
v++;
}
int check=0;
for (j=0; j<=tricount; j++){
fscanf(pmesh, "%i %i %i %i", &check, &InstTriangle.vert1, &InstTriangle.vert2, &InstTriangle.vert3);
triArray[t]=InstTriangle;
t++;
}
fclose(pmesh);
/ ******************************************** /
glutMainLoop();
return 0;
}
在我犯的错误中,还有一种分配数组内存的方式,因为我没有得到正确的值。
我在读取循环和数组声明中找不到错误。
这也是将值存储在数组中的正确方法吗?
先感谢您,
瓦列里奥
最佳答案
我已经解决了通过将要在第一个for循环中读取的值从%d更改为floats(%f)来读取和分配值的问题,这为我提供了正确的值。
但是,尽管将malloc调用更改为:
vertArray[v] = (struct Vertex) malloc(vertcount*(sizeof(struct Vertex)));
triArray[t] = (struct Triangle) malloc(tricount*(sizeof(struct Triangle)));
其中v和t已经具有值(在这种情况下为4和4),因为我已经编辑了上面的代码以包含两个调用:
v=vertcount;
t=tricount;
但是我仍然收到以下错误:
错误:要求转换为非标量类型!
有什么想法吗?
谢谢!