/* * Author: Josh Holtrop * DornerWorks ScreenSaver * This module can be used to create "LogoBox" objects * which consist of a 3D DW logo */ #include #include "WFObj.h" #include "LogoBox.h" #include "LoadFile.h" #include /* memcpy() */ #include using namespace std; static GLuint _logoList = 0; static GLuint _drawList; static LoadFile loadFile; static float _width, _depth, _height; /* * construct a LogoBox object * The first time the constructor is called it loads the * Alias Wavefront object model. Subsequent calls will * reuse the same module. */ LogoBox::LogoBox() { if (_logoList == 0) { WFObj obj(loadFile); if (obj.load(FileLoader::Path("", "dwlogo.obj"))) { _logoList = obj.render(false); if (_logoList == 0) { cerr << "Error rendering dwlogo.obj" << endl; } const float * aabb = obj.getAABB(); float c_x = (aabb[0] + aabb[3]) / 2.0f; float c_y = (aabb[1] + aabb[4]) / 2.0f; float c_z = (aabb[2] + aabb[5]) / 2.0f; _width = aabb[3] - aabb[0]; _depth = aabb[4] - aabb[1]; _height = aabb[5] - aabb[2]; _drawList = glGenLists(1); glNewList(_drawList, GL_COMPILE); glPushMatrix(); glTranslatef(-c_x, -c_y, -c_z); glCallList(_logoList); glPopMatrix(); glEndList(); } else { cerr << "Error loading dwlogo.obj" << endl; } } m_drawList = _drawList; m_width = _width; m_depth = _depth; m_height = _height; }