690 likes | 882 Views
Spelutveckling med .NET. Johan Lindfors. Agenda. Introduktion till DirectX och Direct3D Komponenter Grafik DirectX SDK och Visual Studio Visual Studio 2005 Express? XNA XNA Framework XNA GameStudio Express. Vad är DirectX?
E N D
Spelutveckling med .NET Johan Lindfors
Agenda • Introduktion till DirectX och Direct3D • Komponenter • Grafik • DirectX SDK och Visual Studio • Visual Studio 2005 Express? • XNA • XNA Framework • XNA GameStudio Express
Vad är DirectX? • En grupp av tekniker som erbjuder multimedafunktioner till Windows-applikationer • En samling komponenter • API oberoende av hårdvara
Grafik • Direct3D – 3D grafik • DirectDraw – 2D grafik • Ljud • DirectSound • Inspelning och uppspelning • Mixning i realtid • “Surround” och positionering i 3D • Filter och effekter (reverb, dist osv) • DirectMusic
DirectInput • Hanterar inmatning med kontroller • Tangentbord, joysticks, möss osv. • Stöd för “Force Feedback” • DirectPlay • Protokoll-oberoende nätverksmöjligheter • Fungerar med NAT och brandväggar • DirectShow • “Streaming media” • Video
“Managed DirectX” • “High Level Shader Language” • API för animationer • Förbättrat 2D stöd • Interoperabilitet med GDI • En massa annat
Komponenter • DirectX grafik • 2D – DirectDraw • 3D – Direct3D • DirectSound • DirectInput • DirectPlay • AudioVideoPlayback • Enklare hantering av ljud och video • Alla funktioner och “features”
Fördelar med MDX • Bättre prestanda • Eliminerar flaskhalsar med COM interoperabilitet • Prestandan ligger i paritet med ren C++ • Enklare utveckling • Färre rader kod • ”Ingen” minneshantering • Kraftfull debuggning med Visual Studio
Grundläggande 3D Y Z X • Koordinatsystemet • Vänsterhänt • Högerhänt (OBS standard i XNA) • Nästan allting konstrueras av trianglar • En modell (kallas för Mesh) är en geometrisk struktur av trianglar
3D matematik • Vektorer (Vector3) • Används för att definera punkter, riktningar, avstånd • Matriser • Matrix = 4x4 matris • Används för transformationer • Quaternion • Används för rotationer
”Rendering Pipeline” • Applikation • Logik som är specifik för applikationen • Geometri • Definerar hur “världen” ser ut • Operationer på polygoner • Rasterisering • Tilldelar färger till pixlar på skärmen • Operationer på pixlar
Anatomin av en 3D-applikation • Starta Direct3D • Initialisera objekt • “RestoreDeviceObjects” • “Main Loop” • Uppdatera • Rita • Repetera • Städa upp Initialisera Hanterainmatning Uppdateravariabler Uppdateraskärm Städa upp
3D kort • Videominne • Vertexdata, texturer, osv. • 3D kort har mer och mer tagit över geometriska operationer • 3D kort är mycket bättre på geometri än en vanlig CPU • Specialiserade för vektor-matematik • Programmerbar “pipeline” ger nya möjligheter
Objektet ”device” • Exponerar funktionalitet från grafikkorten • Hanterar dubbel- och trippel-buffring • ”Hardware” • Erbjuder bara existerande förmågor • ”Reference” • Enbart implementera i mjukvara • Erbjuder alla förmågor • Betydligt lägre prestanda
Primitiva typer v5 v2 v4 v1 v6 v3 v2 v4 v1 v3 v5 v2 v3 v1 v4 v5 • Enkla • PointList • LineList • LineStrip • Lite mer avancerade • TriangleList • TriangleStrip • TriangleFan
Mer om vertex • En vertex är mer omfattande än en punkt • Vanliga vertex-format (CustomVertex) • Transformed - X och Y för skärm • TransformedColored - ovanstående och färg • PositionOnly - X, Y och Z • PositionColored - ovanstående och färg • Kan också innehålla • Normal för exempelvis ljussättning • Tu och Tv koordinater för texturer • Lagras ofta i en ”VertexBuffer”
VertexBuffer • Effektivare buffert av vertex • Kan lagra vertex i GPU-minnet • Kan kombineras med en uppsättning index • IndexBuffer • Vektor med int eller short • Kan snåla med minnet (med begränsningar)
Transformationer • “View Transform” • Positionerar kameran • Kontrollerar kamerans riktning • Beskriver vad som är uppåt • “Projection Transform” • Kontrollerar kamerans lins • Hur mycket och hur långt ska vi se
Transformationer • “World Transform” • Positionerar en modell i förhållande till andra • Förflyttning • Matrix.Translation(…) • Rotation • Matrix.RotationX(…) • Matrix.RotationYawPitchRoll(…) • Skalning • Matrix.Scaling(…)
Texturer (0,0) (0,1) (1,1) (0,0) (1,0) (1,0) (1,1) • Texturer • ”Mappa” en bild mot en triangel • En bild har bara 2 dimensioner • Tu och Tv koordinater • Direct3D hanterar transformationer
Ljussättning • Olika typer av ljus • Ambient – Lika mycket ljus överallt • Direction – solen • Point – lampa • Spot – ficklampa • Attribut på ljus • Position, riktning, räckvidd och avmattning • ”Diffuse”, ”ambient”, ”Specular”
Material och skuggor Material reflekterar ljus ”Diffuse” reflektion ”Ambient” reflektion ”Specular” reflektion och styrka ”Emission” – material verkar skina utan ljus Skuggor Flat – hela polygonen får samma nyans Gouraud – interpolering mellan vertex Normalen är viktig!!!
Modeller och objekt Skapas sällan av programmerare Flertal verktyg 3D Studio Max, Maya, Softimage Blender, Milkshape3D Olika filformat .X är vanligt för DirectX Funktionalitet finns i D3DX Mesh Avancerade objekt
Meshes Vad behövs för att rita en Mesh Ladda data Information om vertex och index Material och texturer Uppdatera postition Rita Anropa DrawSubset(…) för varje material
Djup med z-buffer Sparar värde på djup för varje pixel Jämförs för att hantera perspektiv ”Stencil buffer” Kan användas för skuggor Andra bufferts
Animationer • Animerade meshes • “Key Frame animation” • “Skinned Meshes” • Animations-API för att förenkla • Har stöd för interpolering mellan “frames” • Blanda animationer
Text ”Fog” 2D och 3D tillsammans ”Skybox” ”AlphaBlending” Generera terränger Rita i fullskärm Flera skärmar samtidigt (backspegel) Andra saker
”Programmable Pipeline” • Introducerades i DirectX 8 • Ger flexibilitet och prestanda • Vertex Shader • Jobbar med en vertex åt gången • Kan inte lägga till nya vertex • Pixel Shader • Jobbar med en pixel åt gången • Kan inte lägga till pixlar
”Vertex Shader” Kan skapa effekter som inte setts tidigare Simulering av kläder Avancerad animation Ansiktsrörelser och talsynkronisering Linseffekter Verktyg finns Nvidia Endast en vertex åt gången Kan inte lägga till nya vertex
”Pixel Shader” Förändra det som slutligen ritas, per pixel Ljussättning Skuggor Serieboks utseende Jobbar med en pixel åt gången Kan inte lägga till nya pixlar
Effektfiler Uppdelade i tre delar Variabel deklarationer Texturer, matriser, parametrar Tekniker och passager Tekniker kan delas upp för hantering av olika typer av hårdvara Funktioner Kod som skrivs i exempelvis HLSL
DirectInput och numera även XInput Olika enheter Tangentbord Möss Gamepads och andra kontroller Relativt enkel hantering Initiera Läs av Agera Hantera inmatning
DirectSound Kan använd as för ljudeffekter och musik Hårdvarukontrollerade bufferts Flexibilitet Positionera ljud i 3D-rymden Lägg till effekter, reverb, eko osv… Ljud och musik
Exempel Tutorials Bra att börja med Men det finns bättre på nätet Sample Framework Ett ramverk som utgångspunkt Verktyg DirectX SDK
PIX Kan användas för att analysera applikationen XACT Verktyg för konstruktion av ljud och sekvenser DXViewer Öppna och analysera .X-filer (även .FX) Texture tool För att skapa och editera texturer Några verktyg i DirectX SDK
Tänk på prestandan • 33ms… klockan tickar snabbt! • Den mesta tiden spenderas ritandes • Hitta ställan att förberäkna värden istället för beräkningar varje “frame” • Minneshantering • Trådhantering • Boxing/unboxing • Släpp objekt