Added dislay list support for 3D models

This commit is contained in:
trotFunky 2019-11-04 15:12:28 +01:00
parent 6209e91c28
commit c4a0218d62
3 changed files with 31 additions and 0 deletions

View file

@ -112,6 +112,7 @@ int main(int argc, char** argv)
raptor.assign_texture(raptor_texture);
raptor.set_scaling(0.01,0.01,0.01);
raptor.set_rotation(-90,1,0,0);
raptor.prepare_displaylist();
glutTimerFunc(50,update_angle,0);

View file

@ -30,10 +30,23 @@ Model3D::~Model3D()
delete(face_textures);
delete(normals);
}
if (has_displaylist)
{
glDeleteLists(display_list_index,1);
}
}
void Model3D::draw_model()
{
if (has_displaylist)
{
glCallList(display_list_index);
return; // Executing the regular draw calls is unnecessary
}
// If there is no display list available, draw each triangles and texture them if necessary.
if (is_textured)
{
glEnable(GL_ALPHA_TEST);
@ -84,6 +97,17 @@ void Model3D::draw_model()
}
}
void Model3D::prepare_displaylist()
{
display_list_index = glGenLists(1);
glNewList(display_list_index,GL_COMPILE);
draw_model();
glEndList();
has_displaylist = true;
}
bool Model3D::load_ascii_off_file(const std::string& file_name)
{
std::fstream file_stream(file_name, std::ios_base::in);

View file

@ -26,9 +26,13 @@ public:
void set_scaling(float x_scale, float y_scale, float z_scale);
void set_rotation(float angle, float x, float y, float z);
/// Draws the model, using a display list if available.
void draw_model();
/// Sets up an OpenGL display list for the model
void prepare_displaylist();
bool is_textured;
bool has_displaylist = false;
private:
uint32_t vertex_count;
uint32_t face_count;
@ -51,6 +55,8 @@ private:
Vec3f scaling{};
Vec3f rotation_axis{};
float rotation_angle{};
GLuint display_list_index;
};