Foros del Web » Programación para mayores de 30 ;) » Programación General »

OpenGL en Ventanas

Estas en el tema de OpenGL en Ventanas en el foro de Programación General en Foros del Web. Como puedo hacer para usar OpenGL en ventanas pero no completas solo una seccion de ella por ejemplo que la ventana me muestre de un ...
  #1 (permalink)  
Antiguo 11/04/2006, 16:56
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
OpenGL en Ventanas

Como puedo hacer para usar OpenGL en ventanas
pero no completas solo una seccion de ella por
ejemplo que la ventana me muestre de un lado
opciones de configuracion de la imagen hecha con OpenGL
y del otro la propia imagen estoy usando el IDE de borland
(Borland® C++Builder® for Microsoft® Windows™ Version 10.0)
  #2 (permalink)  
Antiguo 11/04/2006, 20:22
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Lo que quieres es manejar multiples VIEWPORTS.

y se hace con la funcion de "glViewPort(x,y,width,height)";


Yo lo hago algo asi:

Código PHP:
// color con el que se va a borrar la pantalla
    
glClearColor(0.0f0.0f0.0f1.0f);

    
// se borra la pantalla
    
glClear(GL_COLOR_BUFFER_BIT);

    
// limpia la pantalla y el depth buffer
    
glClear(GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT);  

    
    
// for para ver que parte de la pantalla dibujara
    
for(int viewport 0viewport<2viewport++)
    {

        
// si es la parte izquiera
        
if(viewport == 0)
        {
            
glViewport (00SCREEN_WIDTH*.9SCREEN_HEIGHT);
            
InitializeOpengl(SCREEN_WIDTHSCREEN_HEIGHT);   
            
// Resetea la matriz
            
glLoadIdentity();               

                           
// dibujar algo.....
                 
}
         if( 
viewport == )
        {

            
glViewport (SCREEN_WIDTH*0.80SCREEN_WIDTH,                                 SCREEN_HEIGHT);            

            
// dibujar algo.......
        
}
           } 
Tambien Puedes checarte los tutoriales de nehe (nehe.gamedev.net) si quieres un articulo completo de como hacerlo. Checa el que se llama "multiple viewports" (o algo asi, ya no recuerdo).

espero te haya servido.

saludos,
  #3 (permalink)  
Antiguo 12/04/2006, 01:04
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
ok

Ok gracias ahora tengo otra pregunta

Tengo una aplicacion de estas que se les llama MDI

Una de las ventanas MDIChild que muestro dentro de

la otra ventana "Madre" (por decirle de alguna forma)

Esta configurada que se pueda dibujar en ella mediante OpenGL

pero al hacer los dibujos y maximizar esta ventana noto un

cierto parpadeo en el raton

De esta manera estoy actualizando
Código:
__fastcall TFormDibujoMarco::TFormDibujoMarco(TComponent* Owner)
	: TForm(Owner)
{
		  Application->OnIdle = IdleLoop;
		......
}
void __fastcall TFormDibujoMarco::IdleLoop(TObject*, bool& done)
{
	 ......
         MostrarArmaduraGL();  // Con esto creo y regenero mi dibujo
	 SwapBuffers(hdc);
}
Alguna idea?
  #4 (permalink)  
Antiguo 12/04/2006, 03:13
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
No entiendo bien tu duda........

tu problema es que cuando esta en ventana tu pantalla, y la pasas a "fullscreen" hay un pequeño parpadeo en el mouse SOLO en ese momento?, o durante toda el resto de la ejecucion de la aplicion?

Si es SOLO durante unos momentos, es normal dependiendo de tu tarjeta de video.

Si esa no es tu pregunta/duda, explicala un poco mas por favor....

saludos,
  #5 (permalink)  
Antiguo 12/04/2006, 11:24
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
Como explicarlo primero mi aplicacion no pasa a FullScreen nunca

Es cuando maximizo la ventana se ve ese parpadeo en el raton

y si siempre se ve aunque creo que es la tarjeta de video o que al

estar en modo de depuracion tal vez corra mas lento el programa o no se
  #6 (permalink)  
Antiguo 12/04/2006, 14:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Cuando se esta en modo de depuracion en algunos casos corre diferente y mas lento.

Cuando se maximiza la ventana es normal que parpadee el mouse. Lo que no es tan normal (dependiendo de tu tajeta de video) es que ya maximizida, si antes no parpadeaba durante tu aplicacion, ya que la maximices si parpadee durante todo el resto del tiempo que se esta ejecutando..es eso lo que pasa? y es ese tu problema?

o tu problema es que no logras pasarlo a fullscreen?
  #7 (permalink)  
Antiguo 12/04/2006, 15:24
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
De hecho si siempre estaba parpadeando pero si al parecer si es por el
modo de depuracion por que al correrlo fuera del entorno ya no se nota
ese parpadeo.

gracias
  #8 (permalink)  
Antiguo 13/04/2006, 22:18
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
Pregunta Otra

Ya hice que me aparesca la zona de dibujo en donde yo quiero
Pero la ocupo en varias partes y pues solo dibuja en en esa parte
a la vez lo que hize fue que cada vez que se activa/muestra ese
"form" vuelvo a cargar todo lo del openGl y si puedo ir dibujando
cada vez donde yo quiero pero el problema es la RAM el programa
empieza a creser en RAM al paso de unos 2 MB cada vez que recargo
la zona de dibujo




Tal vez esta imagen de una idea mas clara de mi problema la parte que
tiene lo negro con esa linea blanca (viga) es la zona de dibujo donde
muestro la viga y le dubuj sus respectivos dibujos representando los apoyos
pero como se ve puede haber mas de una zona de dibujo a la vez y ademas
en cada una de las pestanas "Condiciones de apoyo" y "Condiciones de carga" hay una zona de dibujo en cada una y cada vez que la muestro
recargo la zona y pues empieza a crecer el programa


Por cierto este es el codigo que ejecuto cada vez para reasignar

Código PHP:
///////////////////////////////////////////////////////////////
.......................
.......................
.......................

       
hdcFM GetDC(PApoyos->Handle);
// PApoyos es en la pestana "Condiciones de Apoyo"
//Y si ocupo la pestana "Condiciones de carga"
//Uso

       
hdcFM GetDC(PCarga->Handle);
.......................
.......................
.......................
// Despues muestro

    
PixelFormat ChoosePixelFormat(hdcFM, &pfd);
    
SetPixelFormat(hdcFMPixelFormat, &pfd);
    
hrcFM wglCreateContext(hdcFM);
    
wglMakeCurrent(hdcFMhrcFM); 
  #9 (permalink)  
Antiguo 14/04/2006, 17:04
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
Creo yo

Creo que ya lo solucione

converti mi espacio de dibujo en un objeto que
puedo construir y destruir a mi antojo


Código PHP:
----------
#include <gl/gl.h>

// Con eto creo o destruyo segun sea el caso
class EspacioDibujo {
   private:
      
// Datos miembro
      
int PixelFormat;
      
HDC hdcFM;
      
HGLRC hrcFM;

   public:
      
      
bool EstoyViva;
      
EspacioDibujo();

      
// Funciones miembro 
      
void CrearPizarron(HDC MiHDC);
      
void DestruirPizarron();
      
void IntercambiaPixels();
};

EspacioDibujo::EspacioDibujo(){
    
//Aqui iniciamos el dibujo me servira para recargar el dibujo
   
}

void EspacioDibujo::CrearPizarron(HDC MiHDC){
    
hdcFM=MiHDC;
    
PIXELFORMATDESCRIPTOR pfd = {
        
sizeof(PIXELFORMATDESCRIPTOR),
        
1,
        
PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_DOUBLEBUFFER,
        
PFD_TYPE_RGBA,
        
24,
        
0,0,0,0,0,0,
        
0,0,
        
0,0,0,0,0,
        
32,
        
0,
        
0,
        
PFD_MAIN_PLANE,
        
0,
        
0,0,0
        
};
    
PixelFormat ChoosePixelFormat(hdcFM, &pfd);
    
SetPixelFormat(hdcFMPixelFormat, &pfd);
    
hrcFM wglCreateContext(hdcFM);
    
wglMakeCurrent(hdcFMhrcFM);
    
glClear (GL_COLOR_BUFFER_BIT);    // Limpiar el color y el bufer
    
glLoadIdentity();                 // Carga la matriz de identidad
    
EstoyViva=true;
}
void EspacioDibujo::IntercambiaPixels(){
         
glFlush();
     
SwapBuffers(hdcFM);
}

void EspacioDibujo::DestruirPizarron(){
            
glClear (GL_COLOR_BUFFER_BIT); 
        
glLoadIdentity();
        
ReleaseDC(hdcFM,hrcFM);
        
wglMakeCurrent(hdcFMNULL);
        
wglDeleteContext(hrcFM);
        
EstoyViva=false;
}


Lo iniciamos

      EspacioDibujo DApoyos
;
      
EspacioDibujo DCargas;


Y destruimos o construimos el dibujo segun sea necesario

  
if(DCargas.EstoyViva)
       
DCargas.DestruirPizarron();

  
DApoyos.CrearPizarron(GetDC(DibApoyos->Handle));
  
RenderGLScene(); 
Esa fue la solucion que yo le di no se si alguien me pueda decir
como hacerlo de una manera mas eficiente
  #10 (permalink)  
Antiguo 09/04/2008, 03:10
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Re: ok

Cita:
Iniciado por unKnown Ver Mensaje
Ok gracias ahora tengo otra pregunta

Tengo una aplicacion de estas que se les llama MDI

Una de las ventanas MDIChild que muestro dentro de

la otra ventana "Madre" (por decirle de alguna forma)

Esta configurada que se pueda dibujar en ella mediante OpenGL

pero al hacer los dibujos y maximizar esta ventana noto un

cierto parpadeo en el raton

De esta manera estoy actualizando
Código:
__fastcall TFormDibujoMarco::TFormDibujoMarco(TComponent* Owner)
	: TForm(Owner)
{
		  Application->OnIdle = IdleLoop;
		......
}
void __fastcall TFormDibujoMarco::IdleLoop(TObject*, bool& done)
{
	 ......
         MostrarArmaduraGL();  // Con esto creo y regenero mi dibujo
	 SwapBuffers(hdc);
}
Alguna idea?

Hola soy estudiante y tengo que hacer una practica en la que uso borland en windows, y en mi proyecto tengo un form con diferentes botones, pero me gustaria que a partir de un boton que yo pulse se pudiese abrir una ventana o form en la que pueda pintar con opengl.

He visto tus comentarios, y hblas de que tienes una ventana configurada para pintar con opengl, ¿COMO LO HACES?, es mas tengo el codigo de mi parte con opengl, si puedes echame un cable porque me falta tiempo y no tengo ni idea de como configurar esa ventana para pintar con opengl, asi como cual es le codigo que de poner en la callback asociada al boton


Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:21.