/*-----------------------------------------------------------------*/ // Author: Darryl Davis // File: RenderLight.cpp // Date: 8/18/06 // Last Update: 8/21/06 // Purpose: RenderLight inherits from RenderObject and is used // to display an OpenGL light in the scene. /*-----------------------------------------------------------------*/ #include "RenderLight.h" #include "RenderPrimitive.h" /*-----------------------------------------------------------------*/ // Name: initialize() // Date: 8/24/06 // In: // Purpose: Initialize the light, do this once. /*-----------------------------------------------------------------*/ void CRenderLight::initialize(void) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); m_fPosition[0] = 0.0f; m_fPosition[1] = 0.0f; m_fPosition[2] = 20.0f; m_fPosition[3] = 1.0f; // Turn Off *global ambient* light - cbr GLfloat noLight[] = { 0.0f, 0.0f, 0.0f }; GLfloat someLight[] = { 0.4f, 0.4f, 0.4f }; GLfloat diffuseLight[] = { 0.1f, 0.1f, 0.1f, 0.1f }; //GLfloat lightPos[] = { 100.0f, 0.0f, -100.0f }; GLfloat gray[] = { 0.5f, 0.5f, 0.5f }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, noLight); GLfloat spotDir[] = { 0.0f, 0.0f, -1.0f }; glLightfv(GL_LIGHT0, GL_AMBIENT, noLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, someLight); // glLightfv(GL_LIGHT0, GL_SPECULAR, someLight); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir); glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 200.0f); // glLightfv(GL_LIGHT0, GL_POSITION, m_fPosition); glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); } /*--------------------------------------------------------*/ // Name: render // Date: 8/24/06 // Purpose: The Render function renders the light. /*--------------------------------------------------------*/ void CRenderLight::render(void) { static float m_fRotate = 0.0f; glDisable(GL_LIGHTING); glPushMatrix(); //m_fPosition[2] += 0.01f; //glRotatef(m_fRotate, 1.0f, 0.0f, 0.0f); glTranslatef( m_fPosition[0], m_fPosition[1], m_fPosition[2] ); glColor3f(1.0f, 1.0f, 1.0f); GLUquadric *pSphere = gluNewQuadric(); gluSphere(pSphere, 1.0f, 10, 10); gluDeleteQuadric(pSphere); glPopMatrix(); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, m_fPosition); // Draw a sphere! m_fRotate += 0.1f; } void CRenderLight::enable() { } void CRenderLight::disable() { glDisable(GL_LIGHT0); }