void renderOctrees() { glClearColor (0.0,0.0,0.0,1.0); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthFunc(GL_LEQUAL); glEnable(GL_COLOR_MATERIAL); // glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_NORMALIZE); glLoadIdentity(); //Add ambient light //GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f}; //Color (0.2, 0.2, 0.2) //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor); //Add positioned lights GLfloat lightColor0[] = {0.5f, 0.5f, 0.5f, 1.0f}; //Color (0.5, 0.5, 0.5) GLfloat lightPos0[] = {-1.0f, 1.0f, -1.0f, 1.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos0); GLfloat lightColor1[] = {0.5f, 0.2f, 0.2f, 1.0f}; //Color (0.5, 0.2, 0.2) GLfloat lightPos1[] = {-1.0f, 0.5f, 0.5f, 0.0f}; glLightfv(GL_LIGHT1, GL_SPECULAR, lightColor1); glLightfv(GL_LIGHT1, GL_POSITION, lightPos1); glOrtho(-2.0, 2.0, -2.0, 2.0, 0.1, 4); gluLookAt(sin(_eyex)*2, 0, cos(_eyex)*2, 0, 0, 0, 0, -1, 0); glColor3f(1.0, 1.0, 1.0); glRotatef(_anglex,1.0,0.0,0.0); glRotatef(_angley,0,1.0,0.0); drawOctree(&octsphere, -0.75, 0.0, 0.0, 1.0); glColor3f(1, 1, 1.0); drawOctree(&octabs, 0.75, 0.0, 0.0, 1.0); glFlush(); }
void COctree::drawOctree(OctreeNode* node, gxHWShader* shader) { if(!node) return; #if defined (USE_ProgrammablePipeLine) float r=(float)node->getLevel()/(float)m_nMaxLevel; if(node->getLevel()<m_nMaxLevel) { shader->sendUniform4f("u_diffuse_v4", r, 0.0f, 0.0f, 1.0f); node->getAABB().draw(shader); } else { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); shader->sendUniform4f("u_diffuse_v4", r, 0.0f, 0.0f, 0.8f); node->getAABB().draw(shader); glDisable(GL_BLEND); } #else glDisable(GL_LIGHTING); float r=(float)node->getLevel()/(float)m_nMaxLevel; if(node->getLevel()<m_nMaxLevel) { glColor4f(r, 0.0f, 0.0f, 1.0f); node->getAABB().draw(); } else { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(r, 0.0f, 0.0f, 0.8f); node->getAABB().draw(true); glDisable(GL_BLEND); } #endif for(int x=0;x<MAX_OCTREECHILD;x++) drawOctree(node->getChild(x), shader); }