Introduction to Computer Graphics with Managed DirectX and C# 2.0

Reviews
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 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 Teoría básica del espacio 3D • El espacio se compone de 3 dimensiones – Espacio Euclideo Linear – Dispone de 3 ejes, perpendiculares entre si 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 Teoría básica del espacio 3D • Movimientos en el espacio 3D – Translación – Rotación – Siempre con vectores 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... 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 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 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, ... 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 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. DEMO Inicializar dispositivo DirectX Device Capabilites 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 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 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. Primitivas, Meshes y Pipelines • Los vértices se pueden dibujar de distintas formas: PointList LineList LineStrip TriangleList TriangleStrip TriangleFan Primitivas, Meshes y Pipelines • Los Meshes son objetos mas complejos creados a partir de primitivas – Cubo – Donut (Torus) – Tetera (Teapot) – Esfera – Cono – Cilindro 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 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 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); 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 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. 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. DEMO Primitivas y Meshes Rotación y Traslación de Meshes Texturización de un Mesh 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. Entorno a reflejar Cubo de mapeo Dentro estaría el objeto DEMO Environmental Mapping Reproducción de videos • Referencias a DirectX y AudioVideoPlayback • Crear objeto Video • Establecer Owner (control) • Reproducir :) DEMO Reproducción de videos Iluminación y Cámaras • DirectX nos proporciona diferentes modelos de iluminación para nuestras escenas: – Directional – Spot (foco) – Point (bombilla) – Ambiental (entorno) 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” 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. 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; DEMO Alpha Blending 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 Sombra – Renderizar el objeto de nuevo en la matriz sombra Plano (invisible) Objeto Superficie/objeto Objeto “shadow” 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. 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 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 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(); DEMO HLSL Ejemplo de alteración de pixels Shaders en los videojuegos 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 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 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 DEMO Demo MCCD Demo de Managed DirectX y C# ¿Preguntas? DirectX http://msdn.microsoft.com/directx/ Blogs http://blogs.clearscreen.com/migs http://blogs.clearscreen.com/kartones Demoscene http://www.demoscene.tv http://www.scene.org

Related docs
DirectX
Views: 71  |  Downloads: 2
Setting up DirectX Programming Environment
Views: 0  |  Downloads: 0
Introduction to Computer Graphics
Views: 1  |  Downloads: 0
2 Computer Graphics
Views: 27  |  Downloads: 2
Computer Graphics Introduction to Shaders
Views: 48  |  Downloads: 4
Introduction To Computer Graphics 1
Views: 17  |  Downloads: 3
CS480 Introduction to Computer Graphics
Views: 40  |  Downloads: 2
Introduction to Computer Graphics
Views: 166  |  Downloads: 7
The Institute for Computer Graphics
Views: 21  |  Downloads: 0
Other docs by gregoria