Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





De direct3d9 a OpenGL

Iniciado por Manu343726, 07 de Febrero de 2013, 09:40:43 AM

« anterior - próximo »

Manu343726

Buenas

Estoy pensando en migrar de direct3d a OpenGL, dado el actual estado de Microsoft, que no hace más que tirar por la ventana todas sus plataformas. Además, esta el tema de la portabilidad, por supuesto.

Me gustaría que me dierais algún consejo, guía, pdf o lo que sea para cambiar el chip.
Vengo de direct3d9, la fixed function pipeline, y esas historias.

Gracias

nostromo

Hola!

Si quieres cambiar el chip de verdad con OpenGL, debes dejar atrás la fixed pipeline y entrar en el mundo de los shaders.
Puedes usar la fixed pipeline también, pero que sepas que esta funcionalidad esta deprecated.

Te recomiendo la especificación de OpenGL ES 2.0, que es para mobiles pero es un subconjunto del OpenGL de escritorio,
más reducido y que solo tiene la parte programable. Desde ahí, saltar a OpenGL de escritorio es muy directo y facil.
http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf

Y una guia/tutorial con énfasis en "OpenGL moderno": http://www.arcsynthesis.org/gltut/

Y por supuesto, el sitio oficial: http://www.opengl.org/



Advertencia: el cambio de fixed pipeline a programable no es facil, tomatelo con calma. ;)

[EX3]

Cita de: Manu343726 en 07 de Febrero de 2013, 09:40:43 AM
Estoy pensando en migrar de direct3d a OpenGL, dado el actual estado de Microsoft, que no hace más que tirar por la ventana todas sus plataformas. Además, esta el tema de la portabilidad, por supuesto.
Mira que en su día cuando empezaste el port de dx_lib32 a C++ te lo dije, pásate directamente a OpenGL, olvídate de DirectX :P

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Manu343726

Muchas gracias por los comentarios, lo tendré en cuenta.

Citar


Cita de: [EX3] en 07 de Febrero de 2013, 04:03:58 PM
Cita de: Manu343726 en 07 de Febrero de 2013, 09:40:43 AM
Estoy pensando en migrar de direct3d a OpenGL, dado el actual estado de Microsoft, que no hace más que tirar por la ventana todas sus plataformas. Además, esta el tema de la portabilidad, por supuesto.
Mira que en su día cuando empezaste el port de dx_lib32 a C++ te lo dije, pásate directamente a OpenGL, olvídate de DirectX :P

Salu2...

Ya ya, tu ahora restriegamelo por la cara XD. Si en su día hubiera empezado con OpenGL, a estas alturas no tendría absolutamente nada implementado.....
En cambio ahora, por la parte de gráficos, sólo me queda el tema de surfaces/render targets, con el que no me he puesto pro falta de tiempo, más que nada.
En cuanto acabe los exámenes me pondré a hacer un pequeño engine isométrico para renderizar terreno, para mostrar las capacidades que tiene la librería en estos momentos. Y no se me ha olvidado el tema de la "proyección en perspectiva" en cuanto tenga un rato implemento un pequeño ejemplo.

Respecto al resto (input y audio mayormente) la verdad es que no se que hacer. La parte de input ya la tengo cubierta con mi sencillo sistema de ventanas, ( se supone que la clase gráfica esta diseñada para ser utilizada en cualquier sistema de ventanas, véase Qt por ejemplo, de manera que eso es lo de menos). Y la parte de audio no se que utilizar. En su momento me plantee usar XACT, pero visto que como con muchas otras cosas Microsoft lo esta mandando a la mierda, igual aprovecho el paso a OpenGL y utilizo OpenAL.

Que os parece?


burb

el chm de referencia rápida de sus funciones te será de ayuda.
http://code.google.com/p/heronote/downloads/detail?name=OpenGL-4.3.chm

y como te han dicho, empieza con los shaders en cuanto puedas, así te evitarás tener que aprender muchas funciones que no serán necesarias.



Manu343726


PIM

#6
Quizás es un poco tarde para responder pero ojalá te sirva lo que te voy a decir.

Primero que nada decirte que has tomado una buena decisión al querer dejar a Direct3d y pasarte al lado "Oscuro" (según Mocosoft) de la programación gráfica.

... " A Powerfull Sith, you will become... "
-Darth Sidious (alias el Emperador). :P

Lo siguiente es decir que respeto por completo lo que han dicho los demás, sin embargo no estoy de acuerdo. Querer pasar al pipeline programable sin pasar por las rutinas del fijo, sería como pretender correr antes de saber caminar.

Yo te recomiendo si vas a crear una casa, primero construye los cimientos. Es decir primero aprende la base de OpenGL antes de quere lanzarte por los shaders. Esto te ahorrará muchos dolores de cabeza y si bien es cierto que representa mayor inversión de tiempo, a la larga representará una comprensión mucho mayor de los qués y los por qués de OpenGL.

Te dejo los siguientes enlaces de los que yo he aprendido, espero te sirvan:

Página Web:
http://unsitioweb.com/

Archivos PDF:
http://www.google.com.mx/url?q=http://lc.fie.umich.mx/~rochoa/Manuales/OpenGL_Bardok.pdf&sa=U&ei=Hwo8Udn_JKjc2QX82YGYCw&ved=0CCcQFjAC&usg=AFQjCNF7BRFlwr0_QXFSEVHxFWRyLKlvLw

http://www.google.com.mx/url?q=http://www.tecnun.es/asignaturas/grafcomp/OpenGL/tutorial-opengl.pdf&sa=U&ei=-wo8UanwEI662gW6poA4&ved=0CCEQFjAA&usg=AFQjCNE2yQPth3M4TL50tQ9BckYjdao_Xw

Todo está en español para que no tengas dudas por la barrera del idioma.

Saludos.

Manu343726

Muchas gracias. La verdad es que pasar directamente a shaders me estaba tirando un poco para atrás, ya que tampoco tengo mucho tiempo libre para irme documentando. L verdad es que lo que me propones me parece más razonable, primero aprender el equivalente en OpenGL de lo que ya estoy acostumbrado en d3d9. A algunos les podría parecer una pérdida de tiempo, ya que después tendré que tirar todos esos conocimientos a la basura y ponerme con shaders, pero es un cambio más progresivo.

PIM

Cita de: Manu343726 en 10 de Marzo de 2013, 11:24:13 AM
A algunos les podría parecer una pérdida de tiempo, ya que después tendré que tirar todos esos conocimientos a la basura y ponerme con shaders, pero es un cambio más progresivo.

Me alegra haberte ayudado. ¿Sabes?  yo no lo veo como que esos conocimientos los vas a tirar a la basura. Sin bien es cierto que en las versiones más actuales de OpenGL muchas funcionalidades fueron marcadas como "Deprecated" (obsoletas) Lo cierto es que me parece que la versión 4.0 o 4.1 tiene retro-compatibilidad con muchas de ellas.

Además déjame te comento que el uso de shaders se hace a partir del conocimiento previo del fix pipeline. Querer hacerlo de modo directo significará tropiezo tras tropiezo, lo que significaría una verdadera pérdida de tiempo.

Ojalá le tomes el gusto en esta nueva aventura en tu vida (la programación gráfica usango OpenGL) y si tienes alguna duda, en lo que se pueda te ayudaremos con mucho gusto.

Saludos.
;)

Ray

Bien, puedes empezar sin shaders, pero evitaría el tema de iluminación y texturas (y cualquier otro tipo de efecto como niebla o lo que sea), porque puedes perfectamente pasarte a OGL usando unos cubos coloreados como modelos. Puedes encontrarlos hechos en la red con glBegin y glEnd.

Así a bote pronto la secuencia de aprendizaje/transición sería.

- Iniciar el entorno opengl: ventana, inputs, viewport, etc.
- Dibujar en pantalla algo: crear la proyeccion ortogonal, limpiar buffer de pantalla, dibujar un rectangulo, intercambiar buffer.
- Renderizar un cubo en 3D: y aprender lo relacionado con proyeccion en perspectiva, zbuffer, face culling, modo wire, etc.
- Crear la cámara, desplazarte por el entorno, varial el FOV, el rango, aprender las operaciones con matrices...

Y la verdad es que a partir de aquí todo lo demás se puede considerar como efectos adicionales, es decir, cómo se va a pintar lo que ya tienes, aquí empezaría ya con los shaders como si fuera la segunda parte.

No tiene mucho misterio, se crea un nuevo programa, se crean y se compilan un objeto para vertex shader que están en formato de texto, otro para el fragment shader y se asignan al programa, se enlazan y ya se puede usar el shader activandolo y desactivandolo.

Para empezar por ejemplo, busca un shader en la red para luz difusa, y cargalo (los dos archivos, el vertex y el fragment), activa el programa antes de renderizar el cubo, deberás ver el cubo iluminado.

A partir de aquí empezaría con los vertex buffers objects (VBO), pasar de dibujar el cubo de pruebas con glBegin/glEnd a hacerlo con VBO. Esto se podría hacer antes de empezar con los shaders, pero la forma que tiene de hacerse está deprecatada, y como da lo mismo empezar con los shaders antes que con los VBO, es mejor ese orden. Luego puedes intentar texturizarlo.

Realmente a partir de aquí todo serán shaders y buffers objects, que los hay de muchos tipos, EBO, PBO, FBO, UBO...., aunque no todos son necesarios, los buffers se encargan de gestionar la memoria de vídeo para que sea lo más veloz posible, y los shader de cómo se pinta lo que hay en la memoria.

La mejor literatura está en el superbible http://ldc.usb.ve/~vtheok/cursos/ci4321/pdfs/02.pdf

y como referencia concreta y directa de cómo hacer tal cosa este documento
http://github.prideout.net/modern-opengl-prezo/






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.