Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Desarrollo de juegos y aplicaciones con DirectX

Avatar for Kartones Kartones
November 24, 2011

Desarrollo de juegos y aplicaciones con DirectX

@ MSDN CodeCamp Madrid (November 2005)

Avatar for Kartones

Kartones

November 24, 2011
Tweet

More Decks by Kartones

Other Decks in Programming

Transcript

  1. Introduction to Computer Graphics with Managed DirectX and C# 2.0

    Miguel Jiménez aka Migs Diego Muñoz aka Kartones ilitia technologies http://www.ilitia.com
  2. Agenda • Teoría básica del espacio 3D • Introducción a

    Managed DirectX • Inicialización de dispositivos • Primitivas, Meshes y Pipelines de renderización • Texturización, Pixel Shaders y Vertex Shaders • Camaras y acción en el espacio 3D • Introducción a la demoscene • Demonstración práctica de DirectX y C# 2.0
  3. Teoría básica del espacio 3D • El espacio se compone

    de 3 dimensiones – Espacio Euclideo Linear – Dispone de 3 ejes, perpendiculares entre si
  4. Teoría básica del espacio 3D • Existen diferentes espacios 3D

    – Espacio del Objeto (Object Space) – Espacio del Mundo (World Space) – Espacio de la Vista (Viewport Space) – Espacio de la Pantalla (Screen Space) • Diferentes espacios son necesarios para diferentes movimientos y algoritmos
  5. Teoría básica del espacio 3D • Movimientos en el espacio

    3D – Translación – Rotación – Siempre con vectores
  6. Teoría básica del espacio 3D • Matématicas básicas del 3D

    – Algebra!!! – Matrices y operaciones entre ellas – Vectores – Operaciones entre matrices y vectores – Trigonometría básica • Seno, Coseno, Pi, Radianes, etc...
  7. Introducción a Managed DirectX • Set avanzado de APIs multimedia

    incluido en los sistemas operativos Windows • Managed DirectX es una capa completa del runtime de DirectX – Cumple guias de estilo de desarrollo .NET – Puedes hacer todo como con DirectX nativo
  8. Introducción a Managed DirectX • DirectX nos aisla del hardware

    – Hardware Abstraction Layer • Sistemas heterogénos a través de simulación software del hardware – Software Emulation Layer • Identificamos las posibilidades hardware – Device Capabilities
  9. Introducción a Managed DirectX • Microsoft.DirectX – Contiene estructuras algebraicas

    útiles • Matrix, Vector3, Plane, Quaternion, ... • Microsoft.DirectX.Direct3D – Contiene todo lo demas • Device, Meshes, Texture, Light, Material, ...
  10. Inicialización de dispositivos • Device, la piedra angular de DirectX

    – Todo se realiza en un dispotivo – Gestiona los Parametros de Presentación – Es el que presenta la escena en la pantalla – Hardware o Software
  11. Inicialización de dispositivos • Toda escena en DirectX se renderiza

    entre la llamada a los metodos: – BeginScene – EndScene – Present • Por tanto es necesario generar un bucle de renderización.
  12. Primitivas, Meshes y Pipelines • Primitivas son los datos más

    basicos representables, el punto • Existen diferentes tipos de primitivas, basados en la primera – Lineas – Triangulos • En 3D todo esta triangulado
  13. Primitivas, Meshes y Pipelines • Las primitivas se almacenan en

    vértices. Los hay básicos (Vector3, Vector4,…) y CustomVertex: Position, Transformed + Colored, Textured, Normal Ej: CustomVertex.PositionColoredTextured
  14. Primitivas, Meshes y Pipelines • Los indices de vértices pueden

    ser almacenados en buffers. VertexBuffer, IndexBuffer • Los VertexBuffer se han de bloquear y desbloquear si se van a modificar.
  15. Primitivas, Meshes y Pipelines • Los vértices se pueden dibujar

    de distintas formas: PointList LineList LineStrip TriangleList TriangleStrip TriangleFan
  16. Primitivas, Meshes y Pipelines • Los Meshes son objetos mas

    complejos creados a partir de primitivas – Cubo – Donut (Torus) – Tetera (Teapot) – Esfera – Cono – Cilindro
  17. Primitivas, Meshes y Pipelines • Los Meshes se almacenan en

    ficheros con extensión .X – Modo Texto, legibles y fácilmente editables • Los grandes del 3D exportan directamente a formato .X a través de plug-ins – AliasWavefront Maya – Discreet 3D Studio Max
  18. Primitivas, Meshes y Pipelines • Tenemos que decidir el orden

    de dibujado de los poligonos y objetos. ZBuffer • El orden se puede especificar en el CullMode – Clockwise – CounterClockwise – None
  19. Simplificación de Meshes • SimplifyMesh: Reducción simple Objeto SimplificationMesh simplifiedMesh.ReduceFaces(…)

    simplifiedMesh.ReduceVertices(…) • ProgressiveMesh: Simplificación/Optimización progressiveMesh = new ProgressiveMesh(…) progressiveMesh.NumberVertices = … progressiveMesh.NumberFaces = … • PatchMesh: Reduce/Amplia vértices y caras PatchMesh patch = PatchMesh.CreateNPatchMesh(mesh); patch.Tessellate(tessLevel, mesh);
  20. Texturización • Existen diferentes modos de relleno (FillModes) para poligonos:

    – Wireframe, es un alámbrico – Flat, rellena cada poligono con un unico color – Shaded, se sombrea cada poligono
  21. Texturización • Ademas del modo de relleno, disponemos del modo

    de sombreado. Existen dos modos básicos: – Goraud. Se sombrea cada vertice y se aplica interpolación entre la linea que los une. – Phong. Se sombrea cada pixel del poligono basandose en la normal del mismo.
  22. Texturización • Rellenar y sombrear un poligono u objeto no

    es suficiente. • Hay que aplicar texturas, graficos • Para ello disponemos de la clase Texture que nos permite realizar la carga de las mismas • El dispositivo selecciona la textura a aplicar antes de dibujar cada objeto.
  23. Environmental Mapping • Reflejar el entorno sobre un objeto o

    parte del mismo. -Se crea un objeto invisible (cubo, esfera,…) que recubre el objeto que reflejará -Se renderiza la escena en cada cara del objeto, aputando a su normal (ej: camara 90º visión para cada cara del cubo) -Se mapean las caras en la superficie reflectante. Dentro estaría el objeto Cubo de mapeo Entorno a reflejar
  24. Reproducción de videos • Referencias a DirectX y AudioVideoPlayback •

    Crear objeto Video • Establecer Owner (control) • Reproducir :)
  25. Iluminación y Cámaras • DirectX nos proporciona diferentes modelos de

    iluminación para nuestras escenas: – Directional – Spot (foco) – Point (bombilla) – Ambiental (entorno)
  26. Iluminación y Cámaras • Las cámaras deciden la proyección que

    se visualiza en 2D en la pantalla • Se posicionan como cualquier otro objeto: – Vector3 que define la posicion – Vector3 que define donde apunta, LookAt – Vector3 que define donde esta nuestro “arriba”
  27. Iluminación y Cámaras • Como todo objeto 3D posicionado en

    nuestro mundo a través de vectores, las cámaras y luces se pueden animar: – Rotación y Traslación aplicando matrices – Generación de movimientos sinuidales basados en el Tick del sistema. • Se pueden crear paths para animar la camara y las luces.
  28. Alpha Blending • Transparencias en texturas/materiales – Añadir propiedad Difusse

    al mesh cube = cube.Clone(MeshFlags.Managed, VertexFormats.Position | VertexFormats.Normal | VertexFormats.Diffuse, renderer.Device); – Establecer alpha channel data[i].Color = Color.FromArgb(127, 255, 255, 255).ToArgb(); – Activar blending device.RenderState.SourceBlend = Blend.SourceAlpha; device.RenderState.DestinationBlend = Blend.InvSourceAlpha; device.RenderState.AlphaBlendEnable = true;
  29. Sombras básicas • Renderización de una sombra básica: – Plano

    con la normal del objeto – Matrix.Shadow: • Genera flattern/aplastamiento del objeto – Renderizar el objeto en el mundo – Renderizar el objeto de nuevo en la matriz sombra Objeto Objeto “shadow” Sombra Superficie/objeto Plano (invisible)
  30. High Level Shader Language • Todo lo anterior es “básico”

    y funciona con el fixed pipeline. • HLSL emplea el programmable pipeline mediante Vertex Shaders y Pixel Shaders. • Sintaxis similar a C. • Dependiente del hardware. • Representan mini-programas, pero desde DirectX se llaman como efectos.
  31. High Level Shader Language • Se componen de: – Variables,

    constantes, estructuras – Funciones – Techniques (punto de entrada ~ main()) • Vertex Shaders: Para modificar vértices • Pixel Shaders: Para modificar pixels
  32. High Level Shader Language float4x4 WorldViewProj : WORLDVIEWPROJECTION; sampler TextureSampler;

    void Transform( in float4 inputPosition : POSITION, in float2 inputTexCoord : TEXCOORD0, out float4 outputPosition : POSITION, out float2 outputTexCoord : TEXCOORD0 ) { outputPosition = mul(inputPosition, WorldViewProj); outputTexCoord = inputTexCoord; } void TextureColor( in float2 textureCoords : TEXCOORD0, out float4 diffuseColor : COLOR0) { diffuseColor = tex2D(TextureSampler, textureCoords); }; technique TransformTexture { pass P0 { VertexShader = compile vs_1_1 Transform(); PixelShader = compile ps_1_1 TextureColor(); } } Se almacenan en ficheros .fx
  33. High Level Shader Language • Uso desde C#: effect =

    Effect.FromFile(device, @"..\..\transf.fx", null, ShaderFlags.None, null); effect.Technique = "TransformTexture"; … effect.SetValue("WorldViewProj", worldViewProj); int numPasses = effect.Begin(0); for (int iPass = 0; iPass < numPasses; iPass++) { effect.Pass(iPass); for (int i = 0; i < meshMaterials.Length; i++) { device.SetTexture(0, meshTextures[i]); mesh.DrawSubset(i); } } effect.End();
  34. El Futuro • XNA – Plataforma de desarrollo de videojuegos

    – Xbox 360 y PC – XNA Studio (Visual Studio Team System especial) • DirectX 10 – Rediseño APIs y DLL – Mayor velocidad, compatibilidad hacia atrás mediante software layer (mas lento) – Shaders 4.0+ – Geometry Shader (gestión de polígonos en lugar de vértices/pixels) • Mobile DirectX - Acc. 3D en PDAs ! – Managed Mobile DirectX – Requiere Windows Mobile 5.0
  35. Introducción a la Demoscene • Movimiento underground de principio de

    los 90 • Los crackers de juegos hacian pequeños créditos en las aplicaciones que crackeaban • Se originó en Amiga y Commodore 64
  36. Introducción a la Demoscene • Rapidamente se segregó la producción

    de esos créditos y se separaron del mundo del warez • Nació el concepto de Demostración para demostrar las habilidades de los programadores • Todo en una demo se renderiza en tiempo real, nada se genera con programas auxiliares • Existen diferentes modalidades de demos: 4Kb, 64Kb y Megademo