Lab 12
Code for Creating a Button and Opening a File
After you create the 'openFile()' slot using the QT designer, add the following header to your GL widget's header file:
#include <qtfiledialog.h>
The following 2 lines should also have been added to the header file:
public slots: void openFile();
In the source file for the widget, the 'openFile()' function should also have been added:
void GLScene::openFile() { // ... insert code to open file dialog here }
The following line will open a file dialog:
QString s = QFileDialog::getOpenFileName( QString::null, "Model FIles (*.md2)", this, "Choose a File");
Documentation for this function is here. The string that is returned will be the filename that was chosen in the dialog (or QString::null if it was cancelled).
You should now be able to open your file with a line like this ('md2File' is an object of type MD2 that has already been initialized):
md2File->LoadModel(s);
Code for drawing a frame of the MD2 file
Once you have the MD2 file open, you can use the MD2 class to access the data to draw the object. A sample function that will draw one frame of the scene might look like this (note, no texture mapping or normals have been implemented):
void GLScene::drawFrame(int n){ glBegin (GL_TRIANGLES); /* Draw each triangle */ int nrTriangles = md2File->num_tris; int nrVertices = md2File->num_xyz; vec3_t *ptrverts; // pointer on m_vertices //we moved the pointer over to the first //vertex of the frame we are interested in ptrverts = &md2File->m_vertices[nrVertices * n]; for (int i = 0; i < nrTriangles; ++i) { // A // / \ // B C int vertexIndexA = md2File->tris[i].index_xyz[0]; int vertexIndexB = md2File->tris[i].index_xyz[1]; int vertexIndexC = md2File->tris[i].index_xyz[2]; glVertex3fv(ptrverts[vertexIndexA]); glVertex3fv(ptrverts[vertexIndexB]); glVertex3fv(ptrverts[vertexIndexC]); } glEnd (); }