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.
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


0