2 #include <assimp/scene.h>
7 const float AXIS_RADIUS = 5.0f;
10 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
14 draw_model_recursive(model, (*model).mRootNode);
21 point3f x_axis_start = { 0.0f, 0.0f, 0.0f };
22 point3f x_axis_end = { AXIS_RADIUS, 0.0f, 0.0f };
23 point3f y_axis_start = { 0.0f, 0.0f, 0.0f };
24 point3f y_axis_end = { 0.0f, AXIS_RADIUS, 0.0f };
25 point3f z_axis_start = { 0.0f, 0.0f, 0.0f };
26 point3f z_axis_end = { 0.0f, 0.0f, AXIS_RADIUS };
28 glColor3f(1.0f, 0.0f, 0.0f);
30 glVertex3fv(x_axis_start);
31 glVertex3fv(x_axis_end);
34 glColor3f(0.0f, 1.0f, 0.0f);
36 glVertex3fv(y_axis_start);
37 glVertex3fv(y_axis_end);
40 glColor3f(0.0f, 0.0f, 1.0f);
42 glVertex3fv(z_axis_start);
43 glVertex3fv(z_axis_end);
47 void draw_model_recursive(const struct aiScene* model, const struct aiNode* node) {
48 if (((*model).mFlags & AI_SCENE_FLAGS_INCOMPLETE) == AI_SCENE_FLAGS_INCOMPLETE) {
52 for (int i = 0; i < (*node).mNumMeshes; ++i) {
53 const struct aiMesh* mesh = (*model).mMeshes[(*node).mMeshes[i]];
54 for (int k = 0; k < (*mesh).mNumFaces; ++k) {
55 const struct aiFace face = (*mesh).mFaces[k];
58 switch(face.mNumIndices) {
59 case 1: face_mode = GL_POINTS; break;
60 case 2: face_mode = GL_LINES; break;
61 case 3: face_mode = GL_TRIANGLES; break;
62 default: face_mode = GL_POLYGON; break;
67 glColor3f(1.0f, 1.0f, 1.0f);
68 for (int l = 0; l < face.mNumIndices; ++l) {
69 glVertex3fv((const GLfloat*) &(*mesh).mVertices[face.mIndices[l]]);
76 for (int i = 0; i < (*node).mNumChildren; ++i) {
77 draw_model_recursive(model, (*node).mChildren[i]);