Mam problem z wyświetleniem pliku .smf mimo, że aplikacja poprawnie czyta zawartość plik i umieszcza w tablicach dane identyczne z tymi z plik w wyświetlanym modelu są dziury oraz niektóre wierzchołki są źle połączone
Poniżej zamieszczam także link do plików z przeczytanymi tablicami, plikiem .smf oraz uproszczoną dokumentacje
https://drive.google.com/drive/folders/1rN7Xy8QC4hgL5jqD_zXR2Hw3SB2S3xEo?usp=share_link
(w zawartości tablic pierwsze indeksy są dodane dla prostoty czytania)
Funkcja ładująca model
void ConstructSMFObject(char* fn){
GLfloat* vc;
GLuint* trv;
if (ReadSMFFile(fn, &smf_nv, &vc, &smf_ntr, &trv)) {
glGenVertexArrays(1, &smf_vao);
glBindVertexArray(smf_vao);
glGenBuffers(2, smf_vbo);
glBindBuffer(GL_ARRAY_BUFFER, smf_vbo[0]);
glBufferData(GL_ARRAY_BUFFER, smf_nv * 3 * sizeof(GLfloat), vc, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), nullptr);
//smf_nv number of vertices
//vc table with vertices
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, smf_vbo[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, smf_ntr * 3 * sizeof(GLuint), trv, GL_STATIC_DRAW);
//smf_ntr number of triangles
//trv indices table
FindSMFMatrix(smf_nv, vc, smf_mm);
delete[] vc;
delete[] trv;
ExitIfGLError("ConstructSMFObject");
}
else
ExitOnError("Read error");
}
Funkcja rysująca
void DrawSMFObject(){
glUseProgram(program_id[(enlight ? 1 : 0)]);
glBindVertexArray(smf_vao);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, smf_vbo[1]);
glVertexAttrib4f(1, 0.5, 0.8, 1.0, 1.0);
glDrawElements(GL_TRIANGLES, 3*smf_ntr, GL_UNSIGNED_INT, (GLvoid*)(0));
ExitIfGLError("DrawSMFObject");
}