direct 3d víctor roldán betancort raúl sánchez ruiz

52
DIRECT 3D DIRECT 3D Víctor Roldán Betancort Víctor Roldán Betancort Raúl Sánchez Ruiz Raúl Sánchez Ruiz

Upload: rafaela-oyola

Post on 28-Jan-2016

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

DIRECT 3DDIRECT 3D

Víctor Roldán BetancortVíctor Roldán BetancortRaúl Sánchez RuizRaúl Sánchez Ruiz

Page 2: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

ÍNDICEÍNDICE1. Historia1. Historia2. Hal & Com2. Hal & Com2.1. Hardware Abstraction Layer (HAL)2.1. Hardware Abstraction Layer (HAL)2.2. Component Object Model (COM)2.2. Component Object Model (COM)3. Principios de La Programación de Gráficos en Direct3D3. Principios de La Programación de Gráficos en Direct3D4. Arquitectura: La Tubería De Direct3D (Direct3D-Pipeline)4. Arquitectura: La Tubería De Direct3D (Direct3D-Pipeline)5. Tubería de Transformaciones5. Tubería de Transformaciones6. Transformaciones del Mundo6. Transformaciones del Mundo7. Transformaciones De Vista7. Transformaciones De Vista8. Transformaciones De La Proyección8. Transformaciones De La Proyección9. Puerto de Vista (ViewPorts)9. Puerto de Vista (ViewPorts)10. Dispositivos De Direct3D10. Dispositivos De Direct3D11. Buffers de Vertices (Vertex Buffers)11. Buffers de Vertices (Vertex Buffers)12. Renderizar una escena a partir de un buffer de vértices12. Renderizar una escena a partir de un buffer de vértices13. Dibujar a Partir De Un Buffer De Índices (Index Buffer)13. Dibujar a Partir De Un Buffer De Índices (Index Buffer)14. Conclusión Final y Comparativa entre Direct3D y OpenGL14. Conclusión Final y Comparativa entre Direct3D y OpenGL15. Bibliografía15. Bibliografía

Page 3: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

1. 1. HistoriaHistoria (1) (1)

Bill Gates

• API de programación de Gráficos 3DAPI de programación de Gráficos 3D

• Era complicado el desarrollo de juegoscomplicado el desarrollo de juegos para la plataforma Windows95

• En 1995 Microsoft adquiere un motor 3D en desarrollo, ““Reality Lab” de Reality Lab” de RenderMorphicsRenderMorphics, y lo integra en DirectX

• Directx 3.0 primera versión viable

• DirectX 5.0 primera versión realmente útilprimera versión realmente útil

• DirectX 6.0 presenta muchas mejoras (T&L por aceleración de HW, reorganización de las luces, materiales, objetos de puertos de vista…)

Page 4: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

1. 1. HistoriaHistoria (2) (2)• DirectX 7.0 fue altamente aceptadaDirectX 7.0 fue altamente aceptada por desarrolladores de juegos: programación mucho mas sencilla e interfaz de programación atractiva

• La versión 8.0 introdujo las mayores mejoraslas mayores mejoras de la historia de Direct3D: modificación de arquitectura (DirectX Graphics), menor uso de memoria y mas sencillo de programar, además de la inclusión de infinidad de nuevas técnicas. Primera vez que supera a OpenGL.Primera vez que supera a OpenGL.

• La versión 9.0 no presenta muchos cambios frente a la 8.0. Destaca la mejora en los estándares de “Píxel & Vertex Shader” así como la introducción del HLSLintroducción del HLSL.

• La versión 10 está al llegar, e incluye importantes cambios estructurales y un procesamiento muy optimizado.

Page 5: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

2.1. HAL (1)2.1. HAL (1)• Capa de software que abstrae de las peculiaridades de cada abstrae de las peculiaridades de cada tarjeta gráficatarjeta gráfica, haciéndola ver como una entidad funcional

• El HAL informará sobre las capacidades de aceleración de informará sobre las capacidades de aceleración de hardwarehardware que presenta la tarjeta gráfica

• Accede al hardware de gráficos a través de su driverAccede al hardware de gráficos a través de su driver. La tarjeta debe ser compatible con Direct3D y el driver debe ofrecer una interfaz compatible.

• Cuatro modos de procesamiento de vérticesCuatro modos de procesamiento de vértices

• Si la tarjeta no soporta determinadas características, se puede se puede programar para ser emuladas por softwareprogramar para ser emuladas por software (Pluggable Software Device, anteriormente HEL). Esto proporciona garantía de una alternativa cuando el hardware no presenta determinadas habilidades.

Page 6: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

2.1. HAL (2)2.1. HAL (2)

Page 7: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

2.2. COM2.2. COM• Modelo de programación orientada a objetosModelo de programación orientada a objetos muy utilizada por Microsoft

• Se trata de una porción de código que ofrece un determinado porción de código que ofrece un determinado servicio a través de una interfazservicio a través de una interfaz compuesta de métodos. Generalmente es una librería de enlace dinámico (DLL)

• Ventajas:

• Las interfaces de los objetos COM nunca cambian

• Los objetos COM son independientes del lenguaje usado

• Es muy robustos

• Estas ventajas repercuten sobre la compatibilidad de DirectXcompatibilidad de DirectX: una aplicación programada en DirectX 3.0 funcionaráfuncionará en un computador con DirectX 9.0

Page 8: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

3. Fundamentos De La Programación 3. Fundamentos De La Programación de Gráficos en Direct3D (1)de Gráficos en Direct3D (1)

Al contrario que en OpenGL, Direct3D es levógiro por Direct3D es levógiro por defectodefecto, es decir, con la Z positiva entrando en la pantalla.

Los vértices son la base de Los vértices son la base de los gráficos 3Dlos gráficos 3D, serán usados para definir los objetos en el espacio.

Page 9: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

3. Fundamentos De La Programación 3. Fundamentos De La Programación de Gráficos en Direct3D (2)de Gráficos en Direct3D (2)

El usuario podrá definir qué estructura tendrá el tipo podrá definir qué estructura tendrá el tipo de dato vérticede dato vértice, en función de la información que interese alojar. Estructura típica:

Struct Vertex {

D3DVECTOR vPosition;

DWORD dwDiffuse;

D3DVECTOR vNormal;

FLOAT u, v;

}

Page 10: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

3. Fundamentos De La Programación 3. Fundamentos De La Programación de Gráficos en Direct3D (3)de Gráficos en Direct3D (3)

Cuando se posiciona un objeto en el espacio 3D, se necesita especificar su orientaciónnecesita especificar su orientación, esto se consigue usando tres vectoresusando tres vectores. Estos vectores se usan para indicar:

Hacia dónde está mirando el objetoDónde es arriba para el objetoEn qué posición se encuentra

Page 11: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

3. Fundamentos De La Programación 3. Fundamentos De La Programación de Gráficos en Direct3D (4)de Gráficos en Direct3D (4)

Direct3D sólo es capaz de renderizar 3 sólo es capaz de renderizar 3 tipos de primitivastipos de primitivas: puntos, líneas y triángulos

El API se encargará de descomponerse encargará de descomponer el objeto en triángulos

Para obtener un rendimiento óptimo, todo objeto que el usuario defina deberá poder deberá poder descomponerse en triángulosdescomponerse en triángulos

Page 12: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

4. Arquitectura: La Tubería De 4. Arquitectura: La Tubería De Direct3D (Direct3D-Pipeline) (1)Direct3D (Direct3D-Pipeline) (1)

Se podría asemejar a una cadena de produccióncadena de producción: al comienzo se tiene la materia prima, a partir de la cual, a lo largo de una serie de etapas, se van procesando para dar lugar a la imagen que se desea

Es el planteamiento de esta tubería lo que convierte a convierte a Direct3D en un API Direct3D en un API de gráficos 3D de gráficos 3D potente y eficientepotente y eficiente

Page 13: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

4. Arquitectura: La Tubería De 4. Arquitectura: La Tubería De Direct3D (Direct3D-Pipeline) (2)Direct3D (Direct3D-Pipeline) (2)

EtapasEtapas: Tessellation Vertex Processing Geometry Processing Píxel Processing Píxel Rendering

Por tanto, se puede descomponer la tubería en dos grandes etapasdos grandes etapas: el procesamiento de vértices y el procesamiento de píxeles

Page 14: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

4. Arquitectura: La Tubería De 4. Arquitectura: La Tubería De Direct3D (Direct3D-Pipeline) (3)Direct3D (Direct3D-Pipeline) (3)

Procesamiento de Vértices Procesamiento de Píxeles

Page 15: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

5. Tubería de 5. Tubería de Transformaciones (1)Transformaciones (1)

Para modificar la escena, se lleva a cabo diversas transformaciones:transformaciones del mundotransformaciones de vistatransformaciones de proyeccióntransformaciones del modelo

Se tiene un conjunto de vérticesconjunto de vértices sobre los cuales se efectuará una serie de operaciones para obtener la escena final

Page 16: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

5. Tubería de 5. Tubería de Transformaciones (2)Transformaciones (2)

1º Se parte de vértices haciendo referencia al espacio de coordenadas espacio de coordenadas localeslocales

2º Se transforman a un espacio de espacio de coordenadas mundialescoordenadas mundiales común a todos los objetos de la escena a través de la transformación del mundotransformación del mundo

Page 17: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

5. Tubería de 5. Tubería de Transformaciones (3)Transformaciones (3)

3º Se reorientan en función de unas coordenadas de vistacoordenadas de vista, que describen lo que ve el espectador, a través las transformaciones transformaciones de vista (espacio de vista)de vista (espacio de vista)

4º Se proyecta la escena 3D sobre un plano 2D, operando sobre los vértices, resultando el espacio de proyecciónespacio de proyección mediante las transformaciones de proyeccióntransformaciones de proyección

Page 18: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

5. Tubería de 5. Tubería de Transformaciones (4)Transformaciones (4)

5º Se ejecuta el proceso de recortadorecortado y el conjunto de vértices resultante se transforma a las coordenadas de pantalla o dispositivocoordenadas de pantalla o dispositivo (conocido como espacio de despliegueespacio de despliegue)

Transformaciones de modeloTransformaciones de modelo: no reubica vértices, sino que calcula valores de iluminación. El orden en el que se efectúa irrelevante.

Page 19: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

5. Tubería de 5. Tubería de Transformaciones (5)Transformaciones (5)

Todas las operaciones de transformación son cálculos a través de matricescálculos a través de matrices

Dichas transformaciones se especificarán haciendo uso de:

Matriz del mundo Matriz de vista Matriz de proyección

Page 20: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

6. Transformaciones del 6. Transformaciones del Mundo (1)Mundo (1)

Las transformaciones básicas que se pueden realizar son rotaciones, translaciones y rotaciones, translaciones y escaladoescalado

Las transformaciones del mundo se efectúan concatenando concatenando diversas matricesdiversas matrices de transformación para finalmente ser establecida como matriz del mundo

Page 21: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

6. Transformaciones del 6. Transformaciones del Mundo (2)Mundo (2)

Crear matriz de traslación:D3DXMatrixTranslation()

Crear matriz de rotación en torno al eje X, Y, Z:D3DXMatrixRotationX() D3DXMatrixRotationY() D3DXMatrixRotationZ()

Crear matriz de rotación en torno a un vector determinado:D3DXMatrixRotationAxis()

Page 22: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

6. Transformaciones del 6. Transformaciones del Mundo (3)Mundo (3)

Crear matriz de rotación en torno a ejes Z, X e Y consecutivamente: D3DXMatrixRotationYawPitchRoll()

Crear matriz de escalado: D3DXMatrixScaling()

El orden en que se concatenan las matrices es crucial. Las transformaciones ocurren en el Las transformaciones ocurren en el orden en que se invocan las orden en que se invocan las multiplicacionesmultiplicaciones

Page 23: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

6. Transformaciones del 6. Transformaciones del Mundo (4)Mundo (4)

EJEMPLOEJEMPLO

D3DXMATRIX matWorld;

D3DXMatrixTranslation(&matWorld, 0,1,0);

D3DXMATRIX matRotateX;

D3DXMatrixRotationY(&matRotateY, 1.57);

D3DXMatrixMultiply(&matWorld, &matRotateY, &matWorld);

m_pd3dDevice -> SetTransform (D3DTS_WORLD, matWorld);

Page 24: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

7. Transformaciones De Vista 7. Transformaciones De Vista (1)(1)

Construir una matriz de vista con un sistema de referencia levógiro.

D3DXMatrixLookAtLH

Se le pasa: Coordenadas del observador Dirección en la que está

mirando el espectador Cual será la dirección que

tomará como “arriba”

Page 25: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

7. Transformaciones De Vista 7. Transformaciones De Vista (2)(2)

EJEMPLOEJEMPLOD3DXMATRIX out;

D3DXVECTOR3 eye(2,3,3);

D3DXVECTOR3 at(0,0,0);

D3DXVECTOR3 up(0,1,0);

D3DXMatrixLookAtLH(&out, &eye, &at, &up);

m_pd3dDevice->SetTransform (D3DTS_VIEW,&out);

Page 26: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

8. Transformaciones De 8. Transformaciones De Proyección (1)Proyección (1)

Cómo se plasmará la escena 3D que se Cómo se plasmará la escena 3D que se observa en el plano 2Dobserva en el plano 2D al que se proyecta y de qué forma se proyectará los elementos dentro del volumen de vista

Direct3D proporciona las funciones para poder efectuar proyecciones enproyecciones en perspectivaperspectiva y ortogonalesortogonales

Page 27: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

8. Transformaciones De 8. Transformaciones De Proyección (2)Proyección (2)

Crea matriz de proyección levógiro:D3DXMatrixPerspectiveLH

Construir matriz de proyección levógiro basándose en un campo de visión:D3DXMatrixPerspectiveFovLH

Construir matriz de proyección levógiro personalizadaD3DXMatrixPerspectiveOffCenterLH

Page 28: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

8. Transformaciones De 8. Transformaciones De Proyección (3)Proyección (3)

EJEMPLOEJEMPLO

D3DXMATRIX matProj;

D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );

g_pd3dDevice -> SetTransform (D3DTS_PROJECTION, &matProj);

Page 29: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

9. Puerto de Vista (ViewPorts)9. Puerto de Vista (ViewPorts)

Conceptualmente, es el plano 2D sobre el que se plano 2D sobre el que se proyecta la escena 3Dproyecta la escena 3D que hemos definido

En Direct3D, las coordenadas de este plano son son definidas sobre el dispositivodefinidas sobre el dispositivo en que se renderiza la escena

El rectángulo que define el puerto de vista se especifica a través de la estructura D3DVIEWPORT9estructura D3DVIEWPORT9

Se establece y obtiene con GetViewport()GetViewport() y y SetViewport()SetViewport(), métodos de la interfaz de Direct3D

Page 30: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

10. Dispositivos De Direct3D 10. Dispositivos De Direct3D (1)(1)

Componente de Direct3D que se encarga de la renderización, encapsulando y almacenando renderización, encapsulando y almacenando todo su estadotodo su estado

También se encarga de las transformaciones y transformaciones y de las lucesde las luces, así como del proceso de rasterizadorasterizado

Podemos distinguir tres grandes módulos que lo componen: el módulomódulo de transformacionesde transformaciones, el módulo de iluminacionesmódulo de iluminaciones y el módulo de módulo de rasterizadorasterizado

Page 31: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

10. Dispositivos De Direct3D 10. Dispositivos De Direct3D (2)(2)

Direct3D da soporte a dos tipos de dispositivosda soporte a dos tipos de dispositivos: HAL: efectúa trabajos mediante aceleración de

hardware. Mejor rendimiento. Dispositivo de referencia: emular características

que aún no están disponibles en el hardware presente Para crear un dispositivo, se invoca el método

IDirect3D9::CreateDevice() Indicando si será HAL o de referencia Tipo de procesamiento de vértices Adaptador de video que usa

Page 32: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

10. Dispositivos De Direct3D 10. Dispositivos De Direct3D (3)(3)

Se debe inicializar un conjunto de parámetros del inicializar un conjunto de parámetros del dispositivodispositivo pasándole una estructura denominada D3DPRESENT_PARAMETERS, que controla:BackBuffers Intercambio de BackBuffersBuffers Z y StencilManejador del dispositivo de pantallaFrecuencia de refrescoPantalla Completa / Ventana

Page 33: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

11. Buffers de Vertices 11. Buffers de Vertices (Vertex Buffers) (1)(Vertex Buffers) (1)

Porciones de memoria que alojan vérticesPorciones de memoria que alojan vértices Estos buffers se suelen alojar en la memoria memoria

de videode video, desde donde se pueden efectuar los cálculos 3D mucho más rápido

Permite poder memorizar escenas para presentarlas cuantas veces se desee sin sin necesidad de ser calculada cada vez que necesidad de ser calculada cada vez que se presentase presenta

Page 34: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

11. Buffers de Vertices 11. Buffers de Vertices (Vertex Buffers) (2)(Vertex Buffers) (2)

Se usa el método de la interfaz del dispositivo IDirect3DDevice9::CreateVertexBuffer IDirect3DDevice9::CreateVertexBuffer

Los vértices tienen una estructura variablevértices tienen una estructura variable (FVF o Flexible Vertex Format), por lo que se deberá especificar con una mascara que estructura poseen para crear el buffer acorde a su definición

Page 35: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

11. Buffers de Vertices 11. Buffers de Vertices (Vertex Buffers) (3)(Vertex Buffers) (3)

1. Posición del vérticePosición del vértice D3DFVF_XYZ 2. RJWRJW (reciprocal of homogeneus w coordinate)

sólo para vértices ya transformados D3DFVF_XYZRHW

3. Normal del vérticeNormal del vértice D3DFVF_NORMAL 4. Tamaño de punto del vérticeTamaño de punto del vértice D3DFVF_PSIZE 5. Color difusoColor difuso D3DFVF_DIFFUSE 6. Color especularColor especular D3DFVF_SPECULAR Ejemplo: #define D3DFVF_CUSTOMVERTEX

(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

Page 36: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

11. Buffers de Vertices 11. Buffers de Vertices (Vertex Buffers) (4)(Vertex Buffers) (4)

Para poder acceder al buffer, primero hay primero hay que bloquearloque bloquearlo. Para ello se usa la función IDirect3DVertexBuffer9::Lock()

Luego se rellena el buffer con los vérticesse rellena el buffer con los vértices (por ejemplo, con un memcpy)

Tras finalizar el uso de un buffer de vértices, habrá que desbloquearlodesbloquearlo a través de IDirect3DVertexBuffer9::Unlock()

Page 37: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

12. Renderizar una escena a partir 12. Renderizar una escena a partir de un buffer de vértices (1)de un buffer de vértices (1)

En primer lugar se debe especificar la fuente de especificar la fuente de los vérticeslos vértices, para lo cual se usa la función IDirect3DDevice9::SetStreamSource()

El siguiente paso para el dibujo de una escena sería indicar el “indicar el “vertex shadervertex shader”” a usar, mediante IDirect3DDevice9:: SetVertexShader()

Ya estamos en disposición de dibujar la escenadibujar la escena, esto se realiza a través de la función IDirect3DDevice9::DrawPrimitive()

Page 38: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

12. Renderizar una escena a partir 12. Renderizar una escena a partir de un buffer de vértices (2)de un buffer de vértices (2)

D3DPT_POINTLIST: Renderiza un conjunto de puntos aislados.

D3DPT_LINELIST: Renderiza los vértices como un conjunto de líneas aisladas

D3DPT_LINESTRIP: Renderiza los vértices como un conjunto de líneas continuas

D3DPT_TRIANGLELIST: Efectuar la renderización de los vértices como un conjunto de triángulos aislados.

D3DPT_TRIANGLESTRIP: Se renderizará un conjunto de triángulos como una tira.

D3DPT_TRIANGLEFAN: Renderiza los vértices como un abanico

Page 39: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

12. Renderizar una escena a partir 12. Renderizar una escena a partir de un buffer de vértices (3)de un buffer de vértices (3)

Page 40: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

12. Renderizar una escena a partir 12. Renderizar una escena a partir de un buffer de vértices (4)de un buffer de vértices (4)

EJEMPLOEJEMPLO

if(SUCCEEDED(d3dDevice->BeginScene())) {

d3dDevice->SetStreamSource(0,m_pVB,sizeof(VERTICE));

d3dDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);

d3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);

d3dDevice->EndScene();}

Page 41: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

13. Dibujar a Partir De Un Buffer 13. Dibujar a Partir De Un Buffer De Índices (Index Buffer) (1)De Índices (Index Buffer) (1)

Los buffer de índices surgen para: Mejorar aprovechamiento de Mejorar aprovechamiento de

la memoria de videola memoria de video (en muchos modelos, las primitivas tienen vértices comunes que se podrían repetir)

Mejora rendimientoMejora rendimiento (favorece el principio de localidad de la caché de video)

Facilita diseñoFacilita diseño, ya que los vértices se deben dispone en el buffer en el orden en que se dibujan las primitivas

Page 42: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

13. Dibujar a Partir De Un Buffer 13. Dibujar a Partir De Un Buffer De Índices (Index Buffer) (2)De Índices (Index Buffer) (2)

Page 43: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

13. Dibujar a Partir De Un Buffer 13. Dibujar a Partir De Un Buffer De Índices (Index Buffer) (3)De Índices (Index Buffer) (3)

Se crean haciendo uso del método IDirect3DDevice9::CreateIndexBuffer()

También requieren ser bloqueados previo usorequieren ser bloqueados previo uso (Lock()) y desbloquearlos al finalizardesbloquearlos al finalizar (UnLock())

En lugar establecer la fuente del buffer de vértices, establecemos las fuentes de los establecemos las fuentes de los índicesíndices IDirect3DDevice9::SetIndices()

En lugar de dibujar con DrawPrimitive(), se usa IDirect3DDevice9::DrawIndexedPrimitive()

Page 44: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (1)entre Direct3D y OpenGL (1)

Ventajas Direct3DVentajas Direct3D: Se ha convertido en un pilar pilar

básico en la programación de básico en la programación de gráficos 3D en aplicaciones y gráficos 3D en aplicaciones y juegosjuegos

API muy fuerte y establefuerte y estable Garantía de soporte de nueva soporte de nueva

característicacaracterística que surjan en la evolución del hardware gráfico

Posiblemente el mejor API para mejor API para WindowsWindows, ya que es desarrollado por Microsoft

Page 45: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (2)entre Direct3D y OpenGL (2)

HALHAL: Abstracción del hardware

Uso de modelo COMmodelo COM: Independencia del lenguaje usado Compatibilidad hacia atrás

EficienteEficiente incluso para ordenadores de gama baja Frente a OpenGL, soporta las ultimas soporta las ultimas

características de hardwarecaracterísticas de hardware, mientras que este último requiere código personalizado dependiente del hardware

Page 46: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (3)entre Direct3D y OpenGL (3)

Direct3D mas complicado de programar que OpenGL, pues trabaja a mas bajo nivel. Sin embargo, esto aporta versatilidadversatilidad:OpenGL Sencillo pero poco versátilDirect3D Complejo pero muy versátil

Page 47: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (4)entre Direct3D y OpenGL (4)

Desventajas Direct3DDesventajas Direct3D Lenta actualizaciónLenta actualización, ya que se actualiza cada año o

más, frente a la rápida evolución del hardware gráfico. Requiere mucho más código para inicializarsemás código para inicializarse que

OpenGL. Requerirá un buen conocimiento de cómo funcionabuen conocimiento de cómo funciona,

por lo que es mucho más complicado de aprender a más complicado de aprender a usar que OpenGLusar que OpenGL.

No es portableNo es portable No es de estándar abiertoNo es de estándar abierto, por lo que Microsoft es el

único que puede implementarlo en sus sistema Dificultades de programación en CDificultades de programación en C, debido a que es

necesario acceder a los objetos COM a través de las V-Tables.

Page 48: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (5)entre Direct3D y OpenGL (5)

Ventajas OpenGL:Ventajas OpenGL: Relativamente Relativamente sencillo de aprendersencillo de aprender Altamente portableportable Muy eficiente y fuerteeficiente y fuerte también en cualquier plataforma Estándar abiertoEstándar abierto Desarrollo representa un amplio rango de intereses

proveniente de muchas empresas Reconocido como el estándar de la industria de los estándar de la industria de los

gráficosgráficos, como en el campo del modelado 3D profesional, uso militar, CAD, etc, salvo en el campo de los juegos y aplicaciones, donde Direct3D ofrece una fuerte competencia

Page 49: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (6)entre Direct3D y OpenGL (6)

Desventajas OpenGL:Desventajas OpenGL: Extensiones muy dependientes de hardware Extensiones muy dependientes de hardware

especifico especifico Elevado número de nombres diferentes para una Elevado número de nombres diferentes para una

misma función (Direct3D aprovecha sobrecarga)misma función (Direct3D aprovecha sobrecarga) Poco soporte para todos los lenguajes de Poco soporte para todos los lenguajes de

programación programación Actualizaciones aún más lentas que con Direct3DActualizaciones aún más lentas que con Direct3D

Page 50: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

14. Conclusión Final y Comparativa 14. Conclusión Final y Comparativa entre Direct3D y OpenGL (7)entre Direct3D y OpenGL (7)

Conclusión:Conclusión: Tanto OpenGL y Direct3D son igual igual

de complicados de aprenderde complicados de aprender, el problema está en que la programación de gráficos 3D en sí es muy complicada

Si se desea aprender a programar gráficos 3D, cualquiera de los dos cualquiera de los dos APIs es una buena elecciónAPIs es una buena elección

En cualquier momento se podrá aprender a usar el otro, ya que las las bases son las mismasbases son las mismas

Page 51: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

15. Bibliografía15. Bibliografía - Microsoft DirectX 9.0 SDK Update (April 2005) DocumentationMicrosoft DirectX 9.0 SDK Update (April 2005) Documentation - Artículo: Direct3D vs. OpenGL: Which API to Use When, Where, and Why Artículo: Direct3D vs. OpenGL: Which API to Use When, Where, and Why

by Promit Roy, GameDev.netby Promit Roy, GameDev.net- Direct3D vs. OpenGL: A Comparison, Direct3D vs. OpenGL: A Comparison,

http://www.xmission.com/~legalize/d3d-vs-opengl.htmlhttp://www.xmission.com/~legalize/d3d-vs-opengl.html- Beginning Direct3D By Vahid Beginning Direct3D By Vahid

Kazemi,www.codeproject.com/directx/d3d_tut1.aspKazemi,www.codeproject.com/directx/d3d_tut1.asp- Cutting Edge Direct 3D Programming (Publisher: The Coriolis Group) Cutting Edge Direct 3D Programming (Publisher: The Coriolis Group)

Author(s): Stan Trujillo ISBN: 1576100502 Publication Date: 11/01/96Author(s): Stan Trujillo ISBN: 1576100502 Publication Date: 11/01/96 - Beginning Direct3D Game Programming, Second Edition 2003, Wolfgang Beginning Direct3D Game Programming, Second Edition 2003, Wolfgang

F. Engel, Premier Press. ISBN: 193184139xF. Engel, Premier Press. ISBN: 193184139x - Tutoriales de Direct3D by Corday, 24 Octubre del 2001, basado en los Tutoriales de Direct3D by Corday, 24 Octubre del 2001, basado en los

textos de Wolfgang F. Engel, textos de Wolfgang F. Engel, http://www.geocities.com/cordayuk/Direct3D/ http://www.geocities.com/cordayuk/Direct3D/

- http://www.programmersheaven.com/ http://www.programmersheaven.com/ - http://www.gamedev.net/ http://www.gamedev.net/ - Apuntes de Informática Gráficas de la Ingeniería Informática de la Apuntes de Informática Gráficas de la Ingeniería Informática de la

Universidad de Salamanca creados por el Dr. Juan Manuel Corchado.Universidad de Salamanca creados por el Dr. Juan Manuel Corchado.

Page 52: DIRECT 3D Víctor Roldán Betancort Raúl Sánchez Ruiz

¡Gracias Por No Dormirse!¡Gracias Por No Dormirse!

(Super Mario Hecho Con 3DStudio Max Con Aceleración Por Hardware(Super Mario Hecho Con 3DStudio Max Con Aceleración Por Hardware)