Lesen Sie Werte aus dem Dateistrom und das Speichern in ein Array der variablen Größe - OpenGL und C.

StackOverflow https://stackoverflow.com/questions/1812975

  •  06-07-2019
  •  | 
  •  

Frage

Ich versuche die folgende Datei zu lesen (die Kommentare sind im Original nicht vorhanden):

Tetra.tri


4 4 // Tot Anzahl von Scheitelpunkten und totale Anzahl von Dreiecken

0,693361 0,693361 0,693361 // Vertex -Koordinaten

0.693361 -0.693361 -0.693361

-0.693361 -0.693361 0.693361

-0.693361 0.693361 -0.693361

3 1 2 3 // Dreiecke zum Anzeigen (die 3 vorne gibt an, dass es sich um ein Dreieck handelt)

3 0 3 2

3 0 1 3

3 0 2 1


Ich versuche, dies mit dynamischen Arrays zu tun, da ich andere Dateien öffnen muss und da ich Vertex -Arrays zum Zeichnen zum Bildschirm verwende.

Ich erhalte die ersten Werte richtig (Vertcount und Tricount, welche 4 und 4 gemäß der obigen Datei), aber ich mache etwas falsch.

Hier ist der Code:


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

/********** Lesen Sie die Datei und speichern Sie Werte **********//

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;

}


Unter den Fehlern, die ich mache, gibt es auch die Art und Weise, wie das Array -Speicher zugewiesen wird, da ich nicht die richtigen Werte bekomme.

Ich kann den Fehler in den Leseschleifen und in der Array -Erklärung nicht finden. Ist dies auch der richtige Weg, um Werte in den Arrays zu speichern?

Vielen Dank im Voraus, Valerio

War es hilfreich?

Lösung

Ich habe das Problem des Lesens und Zuweisen von Werten an die Arrays gelöst, indem ich die Werte geändert habe, die in der ersten für Schleife von %d zu Schwimmern ( %f) gelesen werden sollen, was mir die richtigen Werte ergab.

Trotz des Änderns des Malloc -Anrufs in:

vertArray[v] = (struct Vertex) malloc(vertcount*(sizeof(struct Vertex)));

triArray[t] = (struct Triangle) malloc(tricount*(sizeof(struct Triangle)));

wobei V und t bereits Werte (4 und 4 in diesem Fall) haben, da ich den obigen Code bearbeitet habe, um auch zwei Anrufe hinzuzufügen:

v=vertcount;
t=tricount;

Aber ich bekomme immer noch den Schlussfehler:

Fehler: Konvertierung in nicht-scalare Typen angefordert!

Irgendwelche Ideen warum?

Vielen Dank!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top