1 / 42

Informática Gráfica Aplicada

Informática Gráfica Aplicada. Módulo DirectX. Módulo DirectX. Introducción DirectDraw DirectSound DirectPlay Direct3D (Modo Inmediato) DirectT3D (Modo Retenido) Programación en Direct3D. Módulo DirectX - Introducción. ¿Qué es DirectX?

mea
Download Presentation

Informática Gráfica Aplicada

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informática Gráfica Aplicada Módulo DirectX

  2. MóduloDirectX • Introducción • DirectDraw • DirectSound • DirectPlay • Direct3D (Modo Inmediato) • DirectT3D (Modo Retenido) • Programación en Direct3D

  3. Módulo DirectX - Introducción • ¿Qué es DirectX? • Conjunto de API´s que permite a los desarrolladores de contenido interactivo acceder a características de hardware especializado sin tener que escribir código específico de hardware

  4. Módulo DirectX - Introducción • Componentes incluidos en DirectX • Nos permiten desarrollar aplicaciones de alto rendimiento y en tiempo real • API DirectPlay • API DirectInput • API DirectSound • API DirectDraw • API Direct3D

  5. Módulo DirectX - Introducción • Objetivos de DirectX • Desarrollo de Aplicaciones Windows de alto rendimiento • Tarjetas aceleradoras • Plug´n Play • Servicios de comunicaciones construidos bajo Windows • Recursos instalados en el sistema • Utilización del nuevo hardware implementado

  6. Módulo DirectX - Introducción • DirectX & COM (Component Object Model) • Objeto: caja negra que representa el hardware y requiere comunicación con las aplicaciones a través de una interface. • Método: comandos enviados y recibidos por el objeto a través de la interface COM • Ej.: Método GetDisplayMode es enviado a través de la interface IDirectDraw2 para tomar el valor de la actual resolución de la pantalla mediante el objeto DirectDraw

  7. Módulo DirectX - DirectDraw • Se encarga del manejo de la memoria de vídeo • Proporciona herramientas para • Manipulación de múltiples buffers de vídeo • Acceso directo a la memoria de vídeo • Page flipping • Back Buffering • Manejo de la paleta gráfica • Clipping

  8. Módulo DirectX - DirectDraw • Tipos de objetos • IDirectDraw • IDirectDrawSurface • IDirectDrawPalette • IDirectDrawClipper • IDirectDrawVideoPort

  9. Módulo DirectX - DirectDraw • Conceptos Gráficos y Técnicos • Bitmaps • Superficies de dibujo (buffers) • Blitting • Page Flipping y Back Buffering • Rectángulos • Sprites • Niveles cooperativos • Modos de vídeo • Buffers • Overlays • Clippers • Video Ports

  10. Ejemplo 1 • Ejemplo 2 • Ejemplo 3 • Ejemplo 4 • Ejemplo 5

  11. Módulo DirectX - DirectSound • Componente de Audio de DirectX: • Mezclado de canales de audio • Aceleración hardware • Acceso directo al dispositivo de sonido • Captura de Audio (versión 6)

  12. Módulo DirectX - DirectSound • Interfaces COM • IDirectSoundBuffer • IDirectSound3DBuffer • IDirectSound3DListener • IDirectSoundCapture • IDirectSoundCaptureBuffer

  13. Módulo DirectX - DirectPlay • Simplifica el acceso de las aplicaciones a los servicios de comunicación • Otorga independencia para la creación de servidores de juegos • Comunicaciones • Peer-to-Peer • Cliente/Servidor • Sesiones Lobby´s

  14. Módulo DirectX - Direct3D • Interfaz gráfica para hardware 3D • Permitir gráficos tridimensionales interactivos en aplicaciones de Windows • 2 Modos: • Inmediato • API 3D de bajo nivel • Independiente del dispositivo • Programadores experimentados • Retenido • Desarrollo rápidos • Capa superior del inmediato

  15. Módulo DirectX - Direct3D • Conceptos Básicos • Sistemas de coordenadas 3-D • Left-handed (mano izquierda) • Podemos simular el right-handed • Transformaciones 3-D • Traslación • Rotación • Escalado • Polígonos • Normales de cara y vértice • Modos de sombreado • Interpolaciones de triángulos

  16. Módulo DirectX - Direct3D • Conceptos Básicos • Triángulos • Reglas de rasterización de triángulos

  17. Módulo DirectX - Direct3D (Modo Inmediato) • Tipos de Objetos • IDirectDraw • IDirectDrawSurface • IDirect3Ddevice • IDirect3Dmaterial • IDirect3Dviewport • IDirect3Dlight • IDirect3DexecuteBuffer

  18. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMAnimation • Define como será modificada una transformación acorde al valor tiempo • La animación es ajustada mediante el método SetTime

  19. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMAnimationSet • Permite a IDirect3DRMAnimation que haya agrupación • Compartirán el mismo parámetro tiempo • Dim anim As IDirect3DRMAnimationSet • D3DRM.CreateAnimationSet anim • anim.Load App.Path & “\anim.x”, 0, 0, 0, 0, animframe • anim.SetTime 1

  20. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMDevice • Representa la visualización final del Render creado • Soporta Devices que renderizan directamente a la pantalla, ventana o memoria de vídeo • Dim Device As IDirect3DRMDevice • D3DRM.CreateDeviceFromSurface …..

  21. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMFace • Representa un único objeto en un mesh

  22. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMFrame • Posiciona objetos en una escena y define las posiciones y orientaciones de los objetos visuales • Escena: frame que no tiene “padre”, define el frame de referencia para todos los demás objetos • Jerarquías y Motion (rotación y velocidad intrínseca)

  23. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMInterpolator • Guarda acciones y las aplica a otros objetos mediante cálculos automáticos • Ej.: Background en el espacio tiempo 0 el color rojo y en el 10 el color verde. Coloreará de forma automática las escenas sucesivas para fundir desde el rojo al verde

  24. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMLight • Define uno de los 5 tipos de luces que son utilizadas para iluminar los objetos visuales de la escena • Ambiente, Point, Spotlight, Directional y Parallel point • La luz va contenida en un frame y consume mucho proceso de CPU

  25. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMMaterial • Define cómo una superficie refleja la luz • IDirect3DRMMesh • Podemos utilizarlo para manipular grupos de caras y vértices • IDirect3DRMMeshBuilder • Nos permite trabajar con vértices y caras individuales de un mesh. Realmente formará un objeto 3D en la escena

  26. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMPickedArray • Identifica un objeto visual que corresponde a un punto 2D determinado • IDirect3DRMPicked2Array • Suele ser utilizado para colisiones entre objetos • IDirect3DRMShadow • Define una sombra emitida por otro

  27. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMObject • Clase base utilizada por todos los demás objetos del modo retenido • IDirect3DRMProgressiveMesh • Permite la carga de objetos 3D mediante pequeñas porciones • IDirect3DRMTexture • Consta de un array rectangular de píxeles coloreados

  28. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMViewport • Define cómo la escena 3D es renderizada en un plano 2D (como una ventana de Windows) • Cámara: renderiza lo que es visible a lo largo del eje Z positivo, con la dirección ascendente representada en el eje Y positivo • Viewing Frustum: cámara en el pico de la pirámide. Serán visibles los objetos entre el front y el back clipping

  29. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMVisual • Representa cualquier cosa que pueda ser renderizada en una escena

  30. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMWrap • Calcula las coordenadas de textura para una cara o mesh. • Tipo • Frame de referencia • Origen • Vector de dirección • Vector de altura • Factores de escalado • Origen para las coordenadas de textura

  31. Módulo DirectX - Direct3D (Modo Retenido) • IDirect3DRMWrap • Tipos • Wrapping Flags • Flat • Cylindrical • Spherical • Chrome

  32. Módulo DirectX Programación Direct3D • Ejemplo 1 • Ejemplo 2

  33. Programación Direct3D • Decidir entre Clipper o FullScreen • La programación se basa en frames. • Puede contener uno o más objetos • Cada objeto 3D debe ir enlazado a un frame determinado • Cinco objetos básicos • Device • Viewport • Scene • World • Camera

  34. Programación Direct3D Inicio del Programa Option Explicit Objeto Direct3D M. retenido Dim D3DRM As IDirect3DRM3 Dim Scene As IDirect3DRMFrame3Frame de escena Dim Camera As IDirect3DRMFrame3Frame de cámara Dim clipper As IDirectDrawClipperObjeto Clipper Dim Device As IDirect3DRMDevice3Objeto Device Dim Viewport As IDirect3DRMViewPortObjeto Viewport Dim LightFrame As IDirect3DRMFrame3Frame de Luz Dim Light As IDirect3DRMLightObjeto Luz Dim Globe As IDirect3DRMMeshBuilder3Mesh (objeto 3D) Dim globeframe As IDirect3DRMFrame3Frame del Mesh Dim salir As Boolean Fin de la aplicación

  35. Programación Direct3D Inicializar los objetos Direct3D Modo Retenido, Clipper, Viewport y Device. Se crean los frames correspondientes a la escena y la cámara, enlazando el frame cámara a de la escena para que la visualización sea posible Sub init_clipper() Creamos el objeto Direct3D Modo Retenido Direct3DRMCreate D3DRM Creamos el frame de la escena sin enlazarlo a ningún frame, puesto que será el frame padre D3DRM.CreateFrame Nothing, Scene Creamos el frame de cámara enlazándolo directamente al de la escena y lo posicionamos en 0,0,0 de X, Y y Z. Variando estos valores podremos mover la cámara hacia diferentes puntos de vista de la escena que hemos creado. D3DRM.CreateFrame Scene, Camera Camera.SetPosition Scene, 0, 0, 0 Creamos el clipper (ventana) DirectDrawCreateClipper 0&, clipper, Nothing clipper.SetHWnd 0, Me.hWnd Creamos el Device y el Viewport. El Device debemos enlazarlo al Clipper para que los gráficos 3D sean volcados en el mismo. En la creación del Viewport es necesario señalar el frame del Device y la cámara que utilicemos. D3DRM.CreateDeviceFromClipper clipper, ByVal 0&, 320, 200, Device D3DRM.CreateViewport Device, Camera, 0, 0, 320, 200, Viewport End Sub

  36. Programación Direct3D ApplyTexture es un procedimiento encargado de crear el wrapper (envoltura) y la textura que se aplicarán a un objeto determinado. Los parámetros son: Meshbuilder que asigna el objeto que se verá afectado por la textura y StrTextureFileName que pasa el nombre del fichero que contiene la textura a aplicar Sub ApplyTexture(MeshBuilder As IDirect3DRMMeshBuilder3, ByVal strTextureFileName As String) Dim Box As D3DRMBOXVolumen del objeto Dim MaxY As SingleValor máximo Dim MinY As SingleValor mínimo Dim Height As SingleValor de alto Dim Wrap As IDirect3DRMWrapWrapper Dim texture As IDirect3DRMTextureTextura Tomamos el objeto para crear una caja imaginaria que lo cubra MeshBuilder.GetBox Box MaxY = Box.Max.Y MinY = Box.Min.Y Height = MaxY - MinY

  37. Programación Direct3D Creamos el wrapper con los valores obtenidos anteriormente D3DRM.CreateWrap D3DRMWRAP_CYLINDER, Nothing, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, MinY / Height, 1, -1 / Height, Wrap Aplicamos el wrapper al objeto Wrap.Apply MeshBuilder Cargamos la textura con la variable texture D3DRM.LoadTexture strTextureFileName, texture MeshBuilder.SetTexture texture Set texture = Nothing End Sub Mediante Form_Keypress detectamos si se ha pulsado una tecla para salir del programa automáticamente Private Sub Form_KeyPress(KeyAscii As Integer) salir = True End Sub

  38. Programación Direct3D En este procedimiento de formulario iniciamos los valores necesarios pare crear los objetos que conformarán la escena 3D. Además, también gestionamos el bucle principal que permitirá la visualización de la escena en pantalla Private Sub Form_Load() Llamamos a init_clipper para crear los frames y el clipper init_clipper El método SetBack se aplica al frame Viewport. Se encarga de establecer el espacio en el cual es posible visualizar los objetos. Si un objeto, o parte de él, sobrepasa este valor, no será representado en pantalla Viewport.SetBack 5000 Asignamos la calidad de Render al dispositivo Device.SetQuality D3DRMLIGHT_ON Or D3DRMFILL_SOLID Or D3DRMSHADE_GOURAUD Creamos un Frame en la escena para asignar una fuente de luz D3DRM.CreateFrame Scene, LightFrame Creamos un objeto de luz tipo direccional D3DRM.CreateLightRGB D3DRMLIGHT_DIRECTIONAL, 0.8, 0.8, 0.8, Light Asignamos el objeto al frame anterior LightFrame.AddLight Light

  39. Programación Direct3D Dim light2 As IDirect3DRMLight Objeto luz ambiente Es necesario crear una luz de tipo ambiente para definir la claridad por defecto que ofrecerá el Render. Sin luz ambiente no lograremos visualizar bien la escena D3DRM.CreateLightRGB D3DRMLIGHT_AMBIENT, 0.4, 0.4, 0.4, light2 Aplicamos la luz en la escena Scene.AddLight light2 Posicionamos la luz direccional en la escena LightFrame.SetPosition Scene, 0, 0, 0 Posicionamos la cámara para ajustar el punto de vista Camera.SetPosition Scene, 0, 0, 0 Camera.SetOrientation Scene, 0, 0, 1, 0, 1, 0 Creamos el objeto visual (Esfera) y su frame correspondiente D3DRM.CreateFrame Scene, globeframe D3DRM.CreateMeshBuilder Globe Mediante el método Load asignamos el path que contiene el objeto Globe.Load App.Path & "\globe.x", 0, D3DRMLOAD_FROMFILE, 0, 0 Establecemos la calidad que tendrá el objeto de cara al Render Globe.SetQuality D3DRMLIGHT_ON Or D3DRMFILL_SOLID Or D3DRMSHADE_GOURAUD

  40. Programación Direct3D Dependiendo del punto de vista del observador, hay veces en que las texturas de los objetos parecen descolocarse u ofrecen una representación visual muy distinta a la que deberían tener en un principio. Mediante la corrección de perspectiva se soluciona este pequeño problema. Para ello, hay que establecer en true el método SetPerspective que apliquemos al objeto Globe.SetPerspective 1 Asignamos el objeto a su frame y establecemos sus posiciones en la escena globeframe.AddVisual Globe globeframe.SetPosition Scene, 0, 0, 5 globeframe.SetOrientation Scene, 0, 0, 1, 0, 1, 0 Ponemos una rotación al objeto para animarlo constantemente globeframe.SetRotation Scene, 1, 1, 1, 0.17 Le asignamos la textura ApplyTexture Globe, App.Path & "\fire.bmp" Vaciamos los objetos que representan las Fuentes de luz Set LightFrame = Nothing Set Light = Nothing

  41. Programación Direct3D Bucle principal While salir = False Dibuja en pantalla el render obtenido redraw_clipper DoEvents Wend Descarga el formulario cuando se acabe la aplicación vacia_clipper Unload Me End Sub Descarga los objetos DirectX creados Sub vacia_clipper() Set Scene = Nothing Set Camera = Nothing Set Viewport = Nothing Set Device = Nothing Set D3DRM = Nothing Set clipper = Nothing End Sub

  42. Programación Direct3D Dibuja en pantalla el Render obtenido. Recordemos que el Render se alberga primero en el backbuffer y luego se vuelca automáticamente a la ventana Public Sub redraw_clipper() On Error GoTo mi_Error Aplica las rotaciones y velocidades para todos los frames de la jerarquía Scene.Move 1 Borra el Viewport con el color actual del background Viewport.Clear Renderiza una jerarquía de frames al Viewport utilizado. Sólo serán renderizados aquellos objetos visuales que estén en esa jerarquía de frames Viewport.Render Scene Copia la imagen que ha sido renderizada a la pantalla o buffer de destino Device.Update Exit Sub mi_Error: Resume End Sub

More Related