Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





OpenGL dentro de un Control.

Iniciado por swapd0, 26 de Febrero de 2007, 11:13:26 PM

« anterior - próximo »

swapd0

Hola, ¿Alguien sabe como poder dibujar en OpenGL dentro de un control? No me vale en una ventana separada. Tiene que ser bajo Visual Studio 2005.

Yo tengo un control para dibujar en OpenGL usando las (supercutres) MFC dentro de un formulario. Ahora necesito hacer lo mismo pero bajo el Visual Studio 2005 sin usar las MFC, usando C++ "manejado", el problema es que en mi control necesito pasarle un CWnd*, y como esto es de las MFC pues no funciona.

He intentado con la propiedad Handle (convirtiendola a un ¿¿HWND?? porras no me acuerdo), pero no funciona porque necesito el CWnd.

Tambien me valdria, algo que pueda enganchar desde Visual Studio.

shephiroth

Buenas.

A ver, no se si funcionara pq este lo use en el visual 2002, y seguramente habran sacado cosas mejores, pero a ver si esto te sirve.

Si no estas usando MFC me imagino que estarás usando Windows.Forms. Los formularios tienen un metodo CreateGraphics que devuelve un objeto Graphics. Este objeto ya tiene metodos para poder dibujar lineas, texto y demas lindeces. A mi con eso me dio suficiente, pero acabo de ver que este objeto tiene un metodo GetHdc (Gets the handle to the device context associated with this Graphics).

Siento no poder darte nada mas concreto, pero espero que por lo menos te sirva como punto de partida ^^

SUERTE

MrK

Seleccionas el contexto de openGL para dibujar con wglMakeCurrent?
Si es asi creo que lo que tienes que buscar es un HDC para tu ventana (y el HGLRC para
el openGL)

Fran

Es una lastima que no lo uses, xq desde Java si están dibujando dentro de controles Swing con OpenGL

swapd0

Parece que se hace usando el GetHdc, pero debido a mi inutilidad con el C++ manejado no consigo echarlo andar... jo con lo facil que es hacer esto en el BeOS  :(

MrK

Cita de: "swapd0"Parece que se hace usando el GetHdc, pero debido a mi inutilidad con el C++ manejado no consigo echarlo andar... jo con lo facil que es hacer esto en el BeOS  :(

hombre, podrias poner algun codigo de ejemplo que quizas te podriamos ayudar mas :)

Por ejemplo (y asi a botepronto, que no puedo probar) con solo

HWND hWnd=::GetDlgItem (this->m_hWnd,IDC_GFX);
HDC hDC=::GetDC (hWnd);

deberia retornarte un hDC de un control llamado IDC_GFX (si, hay formas mas
elegantes de hacerlo). Con ese hDC tendrias que poder pintar una linia en GDI
(por ejemplo)
MoveToEx (hDC,1,1,NULL);
LineTo (hDC,100,100);

o hacer cualquier otra cosa con openGL, como seleccionar el contexto con
wglMakeCurrent

swapd0

Es curioso pero me falla en el wglCreateContext, y los datos que le paso al setpixelformat son los mismos que en la clase de MFC...

PD: como odio programar para windows, mierda de Micro$oft que son incapaces de hacer algo facil de usar.

MrK

Cita de: "swapd0"Es curioso pero me falla en el wglCreateContext, y los datos que le paso al setpixelformat son los mismos que en la clase de MFC...

que te retorna GetLastError() ??

Citar
PD: como odio programar para windows, mierda de Micro$oft que son incapaces de hacer algo facil de usar.

tamos de acuerdo xD

swapd0

Me da formato de pixel invalido (0x7d0), y el formato es el siguiente
static PIXELFORMATDESCRIPTOR pfd= // pfd Tells Windows How We Want Things To Be
{
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
1, // Version Number
PFD_DRAW_TO_WINDOW | // Format Must Support Window
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
PFD_DOUBLEBUFFER, // Must Support Double Buffering
PFD_TYPE_RGBA, // Request An RGBA Format
32, // Select Our Color Depth
0, 0, 0, 0, 0, 0, // Color Bits Ignored
0, // No Alpha Buffer
0, // Shift Bit Ignored
0, // No Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits Ignored
16, // 16Bit Z-Buffer (Depth Buffer)  
0, // No Stencil Buffer
0, // No Auxiliary Buffer
PFD_MAIN_PLANE, // Main Drawing Layer
0, // Reserved
0, 0, 0 // Layer Masks Ignored
};

MrK

Pues no se, pero he hecho un ejemplito rapido basandome en el codigo base del
ejemplo 3 de nehe.gamedev.net y a mi me funciona :? ::

http://www.sharebigfile.com/file/98035/gltest-zip.html

(no tengas en cuenta las chapuzas y el codigo que no se usa, lo he hecho en
un momentillo en el curro xDD)

swapd0

¡¡Tambien me funciona!! Ya me encargare de limpiar el codigo, muchas gracias MrK.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.