Open GL - OPENGL implemente reflejo y todo se volvio lento

 
Vista:

OPENGL implemente reflejo y todo se volvio lento

Publicado por Jose Godoy (3 intervenciones) el 22/05/2007 20:10:42
hola
ayudenme por fa...
Implemente reflejos tal como lo dice en la pagina de NEHE
pero todo corren ultra lento.

Ejecuto el exe que viene en el lesson 26 de los turoriales de nehe
y cuando lo hago correr en windowed corre ultra lento, igual que lo que yo implemente.

En cambio cuando hago correr el ejemplo en fullscreen todo funciona Ok,
en cambio en lo que yo programe sigue igual de lento.

Estoy programando en c++, con Dev-cpp(c++) , con allegroGL.

Tengo un ahtlon xp 1100,256 ram, geforce 2 MX/MX 400 64MB
(lo pongo como dato no mas por que, como dije, el ejemplo corren bien aunque sea en windowed, o sea no pasa por hardware)

el codigo de la funcion display, osea la que dibuja es el siguiente:

void display (void)
{
allegro_gl_begin();

// Clear Screen, Depth Buffer & Stencil Buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);

// Plane Equation To Use For The Reflected Objects
double eqr[] = {0.0f,-1.0f, 0.0f, 0.0f};

glLoadIdentity();
camera();//con esto me muevo a travez de la escena
glColorMask(0,0,0,0);
// Set Color Mask

glEnable(GL_STENCIL_TEST);
// Enable Stencil Buffer For "marking" The Floor

glStencilFunc(GL_ALWAYS, 1, 1);
// Always Passes, 1 Bit Plane, 1 As Mask

glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
// We Set The Stencil Buffer To 1 Where We Draw Any Polygon
// Keep If Test Fails, Keep If Test Passes But Buffer Test Fails
// Replace If Test Passes

glDisable(GL_DEPTH_TEST);
// Disable Depth Testing

glEnable (GL_TEXTURE_2D);
pasto(); // con esto dibujo el suelo, habilito y desabilito la textura por que sino luego al
//modelo 3d que cargo le cambia el color
glDisable (GL_TEXTURE_2D);

// We Only Want To Mark It In The Stencil Buffer
glEnable(GL_DEPTH_TEST);
// Enable Depth Testing

glColorMask(1,1,1,1);
// Set Color Mask to TRUE, TRUE, TRUE, TRUE

glStencilFunc(GL_EQUAL, 1, 1);
// We Draw Only Where The Stencil Is 1
// (I.E. Where The Floor Was Drawn)

glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
// Don't Change The Stencil Buffer

glEnable(GL_CLIP_PLANE0);
// Enable Clip Plane For Removing Artifacts

// (When The Object Crosses The Floor)
glClipPlane(GL_CLIP_PLANE0, eqr);
// Equation For Reflected Objects( eqr=plano(0,-1,0 )

glPushMatrix();
// Push The Matrix Onto The Stack

glScalef(1.0f, -1.0f, 1.0f);
// Mirror Y Axis

luz(GL_LIGHT0,LightPos);
// Set Up Light0

glTranslatef(0.0, aa, 0.0);
glCallList(object->model_list);

glPopMatrix();
// Pop The Matrix Off The Stack

glDisable(GL_CLIP_PLANE0);
// Disable Clip Plane For Drawing The Floor

glDisable(GL_STENCIL_TEST);
// We Don't Need The Stencil Buffer Any More (Disable)

luz(GL_LIGHT0,LightPos);
// Set Up Light0

glEnable(GL_BLEND);
// Enable Blending (Otherwise The Reflected Object Wont Show)

glDisable(GL_LIGHTING);
// Since We Use Blending, We Disable Lighting

glColor4f(1.0f, 1.0f, 1.0f, 0.8f);
// Set Color To White With 80% Alpha

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Blending Based On Source Alpha And 1 Minus Dest Alpha

glEnable (GL_TEXTURE_2D);
pasto();
glDisable (GL_TEXTURE_2D);

glEnable(GL_LIGHTING);
// Enable Lighting

glDisable(GL_BLEND);
// Disable Blending

glPushMatrix();
luz(GL_LIGHT0,LightPos); //esta es la luz puntual ubicada en y=30 con direccion y=-1
glTranslatef(0.0, aa, 0.0); //esto es para mover el objeto hacia arriba o hacia abajo
glCallList(object->model_list); //esto dibuja un objeto 3d desde un archivo obj
glPopMatrix();

glFlush(); // ejecutamos todos los comandos.
allegro_gl_flip(); // mueve el backbuffer a la pantalla.
allegro_gl_end();
}

Por favor diganme si les ha pasado algo similar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:OPENGL implemente reflejo y todo se volvio len

Publicado por ewrwe (1 intervención) el 14/08/2007 17:57:34
ewrwerewrwe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar