Чтение значений из файлового потока и сохранение их в массив переменного размера — OpenGL и C

Я пытаюсь прочитать следующий файл (комментариев нет в оригинале):

Тетра.три


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 в соответствии с файлом выше), но после этого я делаю что-то неправильно.

Вот код:


пустая функция(){

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;

}


Среди ошибок, которые я совершаю, есть также способ выделения памяти массива, поскольку я не получаю правильных значений.

Я не могу найти ошибку в циклах чтения и в объявлении массива. Также это правильный способ хранения значений в массивах?

Заранее спасибо, Валерио.


person Val    schedule 28.11.2009    source источник


Ответы (1)


Я решил проблему чтения и присвоения значений массивам, изменив значения для чтения в первом цикле for с %d на числа с плавающей запятой (%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;

Но я все еще получаю следующую ошибку:

Ошибка: запрошено преобразование в нескалярный тип!

Есть идеи, почему?

Спасибо!

person Val    schedule 29.11.2009