summaryrefslogtreecommitdiff
path: root/common/camera.cpp
diff options
context:
space:
mode:
authorLeo2009-02-24 05:54:16 +0000
committerLeo2009-02-24 05:54:16 +0000
commit6a0c59cd1ef3362a486e9261a000020ce8aacc9c (patch)
tree20b2b9d4019fed322ffaf9c8b9d4fde967f52916 /common/camera.cpp
parent281dfd75faafc8a0806cb43649a07833d9209d07 (diff)
Removed display lists.
git-svn-id: http://svn.leocad.org/tags/leocad-0.75@743 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common/camera.cpp')
-rw-r--r--common/camera.cpp104
1 files changed, 41 insertions, 63 deletions
diff --git a/common/camera.cpp b/common/camera.cpp
index a73fe60..3713939 100644
--- a/common/camera.cpp
+++ b/common/camera.cpp
@@ -14,8 +14,6 @@
#define LC_CAMERA_SAVE_VERSION 6 // LeoCAD 0.73
-GLuint Camera::m_nTargetList = 0;
-
static LC_OBJECT_KEY_INFO camera_key_info[LC_CK_COUNT] =
{
{ "Camera Position", 3, LC_CK_EYE },
@@ -194,9 +192,6 @@ Camera::Camera (float ex, float ey, float ez, float tx, float ty, float tz, Came
Camera::~Camera()
{
- if (m_nList != 0)
- glDeleteLists (m_nList, 1);
-
delete m_pTarget;
}
@@ -208,9 +203,7 @@ void Camera::Initialize()
m_pNext = NULL;
m_nState = 0;
- m_nList = 0;
m_nType = LC_CAMERA_USER;
- m_nList = 0;
m_pTR = NULL;
for (unsigned char i = 0 ; i < sizeof(m_strName) ; i++ )
@@ -546,11 +539,28 @@ void Camera::UpdateBoundingBox()
mat.SetTranslation (m_fTarget[0], m_fTarget[1], m_fTarget[2]);
m_pTarget->BoundingBoxCalculate (&mat);
mat.SetTranslation (0, 0, 0);
+}
- if (!m_nList)
- return;
+void Camera::Render(float fLineWidth)
+{
+ // Fix the up vector
+ Vector frontvec(m_fEye[0]-m_fTarget[0], m_fEye[1]-m_fTarget[1], m_fEye[2]-m_fTarget[2]);
+ float len = frontvec.Length();
- glNewList(m_nList, GL_COMPILE);
+ Matrix mat;
+ mat.CreateLookat (m_fEye, m_fTarget, m_fUp);
+ mat.Invert ();
+ mat.SetTranslation (0, 0, 0);
+
+ if (IsEyeSelected())
+ {
+ glLineWidth(fLineWidth*2);
+ glColor3ubv(FlatColorArray[(m_nState & LC_CAMERA_FOCUSED) != 0 ? LC_COL_FOCUSED : LC_COL_SELECTED]);
+ }
+ else
+ {
+ glColor4f(0.5f, 0.8f, 0.5f, 1.0f);
+ }
glPushMatrix();
glTranslatef(m_fEye[0], m_fEye[1], m_fEye[2]);
@@ -578,73 +588,41 @@ void Camera::UpdateBoundingBox()
glVertexPointer (3, GL_FLOAT, 0, verts);
glDrawArrays(GL_LINES, 0, 24);
glDrawArrays(GL_LINE_STRIP, 24, 10);
+ glLineWidth(fLineWidth);
glTranslatef(0, 0, -len);
- glEndList();
-
- if (m_nTargetList == 0)
- {
- m_nTargetList = glGenLists(1);
- glNewList (m_nTargetList, GL_COMPILE);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- float box[24][3] = {
- { 0.2f, 0.2f, 0.2f }, { -0.2f, 0.2f, 0.2f },
- { -0.2f, 0.2f, 0.2f }, { -0.2f, -0.2f, 0.2f },
- { -0.2f, -0.2f, 0.2f }, { 0.2f, -0.2f, 0.2f },
- { 0.2f, -0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f },
- { 0.2f, 0.2f, -0.2f }, { -0.2f, 0.2f, -0.2f },
- { -0.2f, 0.2f, -0.2f }, { -0.2f, -0.2f, -0.2f },
- { -0.2f, -0.2f, -0.2f }, { 0.2f, -0.2f, -0.2f },
- { 0.2f, -0.2f, -0.2f }, { 0.2f, 0.2f, -0.2f },
- { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, -0.2f },
- { -0.2f, 0.2f, 0.2f }, { -0.2f, 0.2f, -0.2f },
- { -0.2f, -0.2f, 0.2f }, { -0.2f, -0.2f, -0.2f },
- { 0.2f, -0.2f, 0.2f }, { 0.2f, -0.2f, -0.2f } };
- glVertexPointer (3, GL_FLOAT, 0, box);
- glDrawArrays(GL_LINES, 0, 24);
- glPopMatrix();
- glEndList();
- }
-}
-
-void Camera::Render(float fLineWidth)
-{
- // Create the display lists if this is the first time we're rendered.
- if (!m_nList)
- {
- m_nList = glGenLists(1);
- UpdateBoundingBox();
- }
-
- if (IsEyeSelected())
- {
- glLineWidth(fLineWidth*2);
- glColor3ubv(FlatColorArray[(m_nState & LC_CAMERA_FOCUSED) != 0 ? LC_COL_FOCUSED : LC_COL_SELECTED]);
- glCallList(m_nList);
- glLineWidth(fLineWidth);
- }
- else
- {
- glColor4f(0.5f, 0.8f, 0.5f, 1.0f);
- glCallList(m_nList);
- }
-
if (IsTargetSelected())
{
glLineWidth(fLineWidth*2);
glColor3ubv(FlatColorArray[(m_nState & LC_CAMERA_TARGET_FOCUSED) != 0 ? LC_COL_FOCUSED : LC_COL_SELECTED]);
- glCallList(m_nTargetList);
- glLineWidth(fLineWidth);
}
else
{
glColor3f(0.5f, 0.8f, 0.5f);
- glCallList(m_nTargetList);
}
glEnableClientState(GL_VERTEX_ARRAY);
+ float box[24][3] =
+ {
+ { 0.2f, 0.2f, 0.2f }, { -0.2f, 0.2f, 0.2f },
+ { -0.2f, 0.2f, 0.2f }, { -0.2f, -0.2f, 0.2f },
+ { -0.2f, -0.2f, 0.2f }, { 0.2f, -0.2f, 0.2f },
+ { 0.2f, -0.2f, 0.2f }, { 0.2f, 0.2f, 0.2f },
+ { 0.2f, 0.2f, -0.2f }, { -0.2f, 0.2f, -0.2f },
+ { -0.2f, 0.2f, -0.2f }, { -0.2f, -0.2f, -0.2f },
+ { -0.2f, -0.2f, -0.2f }, { 0.2f, -0.2f, -0.2f },
+ { 0.2f, -0.2f, -0.2f }, { 0.2f, 0.2f, -0.2f },
+ { 0.2f, 0.2f, 0.2f }, { 0.2f, 0.2f, -0.2f },
+ { -0.2f, 0.2f, 0.2f }, { -0.2f, 0.2f, -0.2f },
+ { -0.2f, -0.2f, 0.2f }, { -0.2f, -0.2f, -0.2f },
+ { 0.2f, -0.2f, 0.2f }, { 0.2f, -0.2f, -0.2f }
+ };
+ glVertexPointer (3, GL_FLOAT, 0, box);
+ glDrawArrays(GL_LINES, 0, 24);
+ glPopMatrix();
+
+ glLineWidth(fLineWidth);
float Line[2][3] =
{