C/Visual C - Custom control y cubo en OpenGL

 
Vista:

Custom control y cubo en OpenGL

Publicado por Jordi (5 intervenciones) el 04/05/2001 22:50:10
Hola!
Vereis, tengo puesto un custom control en un diálogo, al que le he asignat una variable X de una clase q me he creado.
En el DoDataExchange he puesto q esa variable pertenezca a ese control. Hasta aqui todo va bien.
Lo que quiero es dibujar un cubo en ese control. He creado la funcion DibCubo en esta clase q he creado, para luego
llamarla desde otro sitio poniendo X.DibCubo. Pero lo q no sé, es qué debo poner en esa función para q me dibuje el cubo.
Lo he de hacer en OpenGL, y conozco las instrucciones glVertex3f, etc, para dibujar, Lo q ya no domino, son las q hay
q poner para q la ventana donde dibujare el cubo (es decir, la ventana del control, ahora negra) se
active, o se configure, o lo que sea, para q salga dibujado ese cubo. Y otra pregunta. En la ventana de propiedades del
custom control hay un apartado para poner la clase. Me han dicho q ponga MyOpenGL, pero no sé por qué. La
verdad es q funciona, pq los eventos de clicar el raton sobre la ventana me van bien, pero no se
pq hay qponer esa clase. Bueno, pero lo importante es lo otro del cubo. Me podeis ayudar?. En un poquillo
urgente. Muchas gracias!. Un saludo a todos. Jordi. :o)
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
Imágen de perfil de Alejandro

Dibujar un cubo en un control personalizado utilizando OpenGL

Publicado por Alejandro (913 intervenciones) el 24/09/2024 20:09:34
Para dibujar un cubo en un control personalizado utilizando OpenGL, necesitarás seguir los siguientes pasos:

1. Asegúrate de que has configurado correctamente el entorno de desarrollo para utilizar OpenGL en tu proyecto. Esto implica incluir las bibliotecas y encabezados necesarios, así como configurar las opciones de enlace adecuadas.

2. En la función `DibCubo` de tu clase personalizada, deberás realizar las siguientes acciones:

a. Obtén el contexto de dispositivo (HDC) del control utilizando la función `GetDC()`.

b. Crea un contexto de renderizado de OpenGL utilizando la función `wglCreateContext()`.

c. Establece el contexto de renderizado activo utilizando la función `wglMakeCurrent()`.

d. Utiliza las funciones de OpenGL, como `glBegin()`, `glVertex3f()`, `glColor3f()`, etc., para dibujar el cubo.

e. Llama a la función `SwapBuffers()` para mostrar el resultado en el control.

f. Libera el contexto de renderizado utilizando la función `wglMakeCurrent(NULL, NULL)`.

g. Libera el contexto de dispositivo utilizando la función `ReleaseDC()`.

Aquí tienes un ejemplo de cómo podría ser la implementación de la función `DibCubo`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void MyOpenGL::DibCubo()
{
    // Obtener el contexto de dispositivo del control
    HDC hdc = GetDC();
 
    // Crear un contexto de renderizado de OpenGL
    HGLRC hglrc = wglCreateContext(hdc);
 
    // Establecer el contexto de renderizado activo
    wglMakeCurrent(hdc, hglrc);
 
    // Configurar el estado de OpenGL y dibujar el cubo
    glBegin(GL_QUADS);
    // Aquí puedes utilizar las funciones de OpenGL para definir los vértices y caras del cubo
    glEnd();
 
    // Mostrar el resultado en el control
    SwapBuffers(hdc);
 
    // Liberar el contexto de renderizado
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(hglrc);
 
    // Liberar el contexto de dispositivo
    ReleaseDC(hdc);
}

En cuanto a la pregunta sobre por qué se debe especificar la clase `MyOpenGL` en el apartado de la ventana de propiedades del control personalizado, esto se debe a que el control está asociado a esa clase en particular. Al especificar la clase, el sistema operativo sabe qué clase utilizar para manejar los eventos y comportamientos específicos del control.

Espero que esta información te sea útil y te ayude a dibujar el cubo en tu control personalizado utilizando OpenGL. ¡Buena suerte con tu proyecto, Jordi!
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