Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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);
}