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

Desarrollo de juegos y aplicaciones con DirectX

Kartones
November 24, 2011

Desarrollo de juegos y aplicaciones con DirectX

@ MSDN CodeCamp Madrid (November 2005)

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