Jens Konerow's Bloghttp://blog.jenskonerow.deNews und Artikel rund um das Thema Game Development mit DirectX/ XNACopyright 2005 - 2009 Jens KonerowXNA Game Studio 4.0 erschienenGestern war es soweit. Das XNA Game Studio 4.0 hat in seiner finalen Version das Licht der Welt erblickt. Das XNA Game Studio ist, wie aus den Vorabversionen bekannt, Bestandteil der Windows Phone Developer Tools. Die Developer Tools enthalten neben dem XNA Game Studio 4.0 die Entwicklungsumgebung Visual Studio 2010 Express for Windows Phone, den Windows Phone-Emulator, Silverlight for Windows Phone und Expression Blend. Die Entwicklung f&#252;r Microsofts neues mobiles Betriebssystem fordert Windows Vista oder h&#246;her. F&#252;r Windows XP-Benutzer steht ein Paket zum Download bereit, dass nur das XNA Game Studio 4.0 enth&#228;lt. Mit Hilfe der Standalone-Version entwickeln Sie f&#252;r Windows und die Xbox 360.<br /><br /><a href="http://creators.xna.com/de-DE/launchcenter">XNA Game Studio Launch Center</a><br /><br />Ferner hat das XNA Framework-Team &#252;ber f&#252;nfzig Samples, Artikel sowie Tutorials f&#252;r das XNA Game Studio 4.0 &#252;berarbeitet und die Roadmap f&#252;r zuk&#252;nftige Inhalte ver&#246;ffentlicht.<br /><br /><a href="http://creators.xna.com/de-DE/education/gettingstarted">Education Catalog Roadmap</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=1976d962-e7e5-43a7-a9ff-7c1b2e9bf44fFri, 17 Sep 2010 08:21:43 GMTWP7 Entwicklerbuch von Microsoft.pressWindows Phone 7 steht kurz vor der Fertigstellung. Wahrscheinlich werden die ersten Ger&#228;te ab Oktober verf&#252;gbar sein. Zeitgleich &#246;ffnet der Windows Phone 7 Marketplace seine Pforten. F&#252;r all diejenigen, die tiefer in das Thema Windows Phone 7-Entwicklung einsteigen m&#246;chten, ist sicherlich das Buch „Entwickeln f&#252;r Windows Phone 7“ von Patrick Getzmann, Simon Hackfort und Peter Nowak interessant. <br /><br /><a href="http://blogs.compactframework.de/Peter.Nowak/ct.ashx?id=975d160b-763a-45c3-a63b-7f5773b2760d&url=http%3a%2f%2fblogs.compactframework.de%2fPeter.Nowak%2fcontent%2fbinary%2fWindowsLiveWriter%2fEntwickelnfrWindowsPhone7ArchitekturFram_66C5%2fWP7_BuchCover_2.png" rel="lightbox" title="Entwickeln f&#252;r Windows Phone 7"><img class="image" alt="" src="http://blogs.compactframework.de/Peter.Nowak/ct.ashx?id=975d160b-763a-45c3-a63b-7f5773b2760d&url=http%3a%2f%2fblogs.compactframework.de%2fPeter.Nowak%2fcontent%2fbinary%2fWindowsLiveWriter%2fEntwickelnfrWindowsPhone7ArchitekturFram_66C5%2fWP7_BuchCover_2.png" /></a><br /><br />Die drei Autoren gehen sowohl auf die Entwicklung mit Silverlight als auch auf die Entwicklung mit dem XNA Framework ein. Das Buch wird ab Dezember 2010 bei Microsoft.press erh&#228;ltlich sein. Also genau das richtige Geschenk zu Weihnachten! Sie k&#246;nnen das Buch bereits bei Amazon vorbestellen.<br /><br />Bezugsquelle: <a href="http://blogs.compactframework.de/Peter.Nowak/ct.ashx?id=975d160b-763a-45c3-a63b-7f5773b2760d&url=http%3a%2f%2fwww.amazon.de%2fEntwickeln-f%25C3%25BCr-Windows-Phone-Architektur%2fdp%2f3866454627%2f">Amazon.de</a><br />ISBN-10: 3866454627<br />ISBN-13: 978-3866454620 <br />Preis: 39,90 €http://blog.jenskonerow.de/blog/Default.aspx?ID=17c38a0d-b08d-42a3-a475-856f9599e0e8Fri, 27 Aug 2010 09:20:31 GMTXNA Game Studio 4.0 kommt ins RollenEs gibt einige Neuigkeiten zum Thema Windows Phone 7-Entwicklung. Die Windows Phone Developer Tools werden in ihrer RTM-Version am 16. September 2010 ver&#246;ffentlicht. Dies teilte Jeff Wilcox &#252;ber seinen Blog mit. Au&#223;erdem hat das XNA Framework-Entwicklerteam derweilen eine Hand voll Samples zur Windows Phone 7-Entwicklung mit dem XNA Game Studio ver&#246;ffentlicht.<br /><br /><ul><li>2D Touch Game Lab (Catapult Wars)</li><li>2D Graphics Sample</li><li>2D Particles Sample</li><li>Sound + Music Sample</li><li>Landscape/ Portrait Orientation Sample</li></ul><br />Catapult Wars f&#252;r Windows Phone 7 vereint die einfacheren Sample und demonstriert damit u.a. ein XML-basiertes Sprite-Animationssystem, Text-Rendering, Kollisionserkennung mit Bounding Boxes, das Abspielen von Sounds und Musik sowie Men&#252;interaktionen und die Erkennung von Gesten. Der Interpretation von Handbewegungen ist auch ein eigener Artikel gewidmet. Ferner schreibt das XNA Framework-Entwicklerteam &#252;ber 2D Assets und gibt einen Einblick in C# f&#252;r Umsteiger, die von Objective-C oder Java kommen.<br /><br /><a href="http://creators.xna.com/de-DE/education/gettingstarted">Create games for Windows Phone 7</a><br /><br />Anwendungen die Sie &#252;ber den Marketplace ver&#246;ffentlichen m&#246;chten, sollte m&#246;glichst bis Anfang Oktober fertiggestellt sein. Dann &#246;ffnet der Marketplace seine Pforten und Einreichungen sind m&#246;glich. Jede Anwendung muss diversen Kriterien gen&#252;gen und einem Zertifizierungsprozess standhalten, damit sie es in den Marketplace schafft. Alle Details verraten Ihnen die <a href="http://go.microsoft.com/?linkid=9730558">Marketplace-Richtlinien</a>.http://blog.jenskonerow.de/blog/Default.aspx?ID=5cbbf784-9a6d-4dd7-ac54-e60aa3bb61f4Thu, 26 Aug 2010 16:22:50 GMTGPGPU Teil 2, verschollen?Der zweite Teil zum Thema GPGPU mit Compute Shadern steht schon l&#228;nger aus. Derzeit l&#228;sst die vielzahl von aktiven Projekten den Blog etwas verwaisen. Die gute Nachricht ist, dass ich gerade an zwei Artikeln f&#252;r den Blog arbeite. Der erste Artikel greift das Thema GPGPU wieder auf und kn&#252;pft an meinen letzten Blogeintrag zum Thema an. Ich habe mich entschieden den Artikel als PDF-Datei zu publizieren, weshalb es keinen zweiten Blog-Eintrag zum Thema geben wird. Der Artikel wird wahrscheinlich Anfang Juli zum kostenlosen Download bereitstehen. <br /><br />Der zweite Artikel wird die Neuerungen und &#196;nderungen des XNA Game Studio 4.0 aufgreifen. Das XNA Framework Developer-Team hat die Chance genutzt und das XNA Framework-API einem Facelift unterzogen. Viele kleine &#196;nderungen m&#246;gen zwar die Portierung erschweren, aber die t&#228;gliche Arbeit mit dem XNA Framework erleichtern. Auch dieser Artikel ist f&#252;r Juli geplant und kommt im PDF-Format daher.<br /><br />Bis dahin w&#252;nsche ich allen Lesern viel Spa&#223; bei den WM-Spielen und nat&#252;rlich einen erholsamen Sommer!http://blog.jenskonerow.de/blog/Default.aspx?ID=8f5a876e-cae2-498f-bbe8-233268e87367Mon, 21 Jun 2010 11:28:38 GMTGPGPU - Teil 1Als Konsequenz fehlender Zuw&#228;chse der Taktfrequenzen in den letzten Jahren verbauten die Chip-Hersteller mehrere Kerne. Damit auch Ihre Anwendungen von den Multicore-Systemen profitieren, sind Sie angehalten Algorithmen zu parallelisieren. Parallel zu der CPU-Entwicklungen wuchsen die GPU’s zu „konkurrenzf&#228;higen“ Chips heran, dessen Aufgabenspektrum nicht mehr nur auf die Grafikausgabe beschr&#228;nkt ist. Stattdessen l&#228;sst sich die GPU f&#252;r allgemeine Berechnungen nutzen. Aktuelle Computerspiele, wie Dirt 2, lagern bereits Physikberechnungen auf die GPU’s aus, um von dessen enormen Berechnungskapazit&#228;ten zu profitieren. <br /><br />nVidia lieferte mit CUDA eine der ersten API’s, mit der Sie Algorithmen f&#252;r GPU’s entwickeln k&#246;nnen. Das Pendant von AMD (ATI) h&#246;rt auf den Namen Stream. Beide API’s sind Hersteller-spezifisch. Soll hei&#223;en, CUDA-Programme laufen nur auf nVidia-Produkten und Stream-Applikationen laufen nur auf Produkte aus dem Hause AMD (ATI). Zusammen mit DirectX 11 f&#252;hrte Microsoft DirectCompute ein. Das DirectCompute-API erinnert sehr stark an CUDA. Bei genauerer Betrachtung weist DirectComput im Vergleich zu CUDA allerdings einige Defizite auf. Dennoch besitzt DirectCompute einen wesentlichen Vorteil: DirectCompute setzt keine Hersteller-spezifische Grafikkarte voraus, denn alle Grafikkarten die mindestens DirectX 10 beherrschen sind auch in der Lage sog. Compute Shader auszuf&#252;hren. Die Versionsnummer ist kein Schreibfehler. In der Tat k&#246;nnen Sie auf DirectX 10 f&#228;higer Hardware Compute Shader ausf&#252;hren. Voraussetzung ist ein aktueller Grafikkartentreiber. Allerdings offerieren nur DirectX 11 f&#228;hige Grafikkarten den vollst&#228;ndigen Funktionsumfang. <br /><br /><a href="images/gpgpu_abb01.jpg" rel="lightbox" title="Vergleich von CPU und GPU"><img class="image" alt="" src="./images/gpgpu_abb01.jpg" /></a><br /><br />Nun, warum sollte man seine Algorithmen umschreiben, so dass die GPU die Aufgaben abarbeitet? Moderne GPU’s sind in der Lage mehr arithmetische Operationen in einer Zeiteinheit auszuf&#252;hren als es eine CPU vermag. Der Geschwindigkeitsvorteil ist darin begr&#252;ndet, dass die GPU eine spezialisierte Zentraleinheit darstellt, bei der der Gro&#223;teil der Transistoren Rechenoperationen ausf&#252;hren und weniger Transistoren dem Steuerwerk angeh&#246;ren oder f&#252;r Caching-Mechanismen genutzt werden (siehe Abbildung). GPU’s bestehen aus einer Vielzahl von „Prozessoren“ die parallel Daten verarbeiten. Im Sinne der flynnschen Klassifkation ist von Single Instruction Multiple Data (SIMD) die Rede.<br /><br />Welche Algorithmen sind geeignet, um von der Leistungsf&#228;higkeit der GPU zu profitieren? Selbstverst&#228;ndlich stellt die GPU keinen Ersatz der CPU dar. Das hei&#223;t Sie k&#246;nnen auch nicht alles auf die GPU auslagern. In der Regel lassen sich rechenaufw&#228;ndige Probleme mit einer hohen Datenparallelit&#228;t gut von der GPU bearbeiten. Das beste Beispiel ist die Matrixmultiplikation, die in vielen Gebieten der Mathematik und der Informatik eine wichtige Rolle spielt. Beispielsweise zur L&#246;sung von linearen Gleichungssystemen, zur Bildregistrierung sowie zur Codierung und Decodierung. In solchen F&#228;llen erreichen Sie m&#252;helos, ohne gro&#223;artige Optimierungen, Speedup’s von 600-800. <br /><br />Mehr Informationen zur Entwicklung mit DirectCompute wird es in den n&#228;chsten Posts geben. Abschlie&#223;end kann ich Ihnen eine PDF-Datei zum Download anbieten, die Ihnen einen &#220;berblick &#252;ber die GPU Programmierung gibt. Der Artikel ist im Rahmen eines Hauptseminars entstanden und in Englisch verfasst. <br /><br /><a href="http://blog.jenskonerow.de/blog/Download.ashx?file=d98fe95f-8790-44af-b287-d9968b899b2b">Artikel: Programming a GPU</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=15c35245-5f2c-4064-9015-f139431a06f0Mon, 29 Mar 2010 09:42:01 GMTVideos der MIX10-KonferenzSie konnten nicht als Teilnehmer an der MIX10-Konferenz teilnehmen? Kein Problem! Die Videos der Sessions stehen nun online bereit. Insbesondere folgende zwei Sessions d&#252;rften f&#252;r Sie als Spieleentwickler interessant sein:<br /><br /><a href="http://live.visitmix.com/MIX10/Sessions/CL19">Development and Debugging Tools for Building XNA Games for Windows Phone (Cullen Waters)</a><br /><br /><a href="http://live.visitmix.com/MIX10/Sessions/CL21">Building Windows Phone Games (Michael Klucher)</a><br /><br /><a href="http://live.visitmix.com/videos">Alle Sessions</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=adcaf12f-0434-4ee7-a686-1c6fe1dc65b8Fri, 19 Mar 2010 07:11:43 GMTHeute mit der Windows Phone 7-Entwicklung starten! *UPDATE*Microsoft hat gestern Abend ein Windows Phone Developer Tool Community Technology Preview ver&#246;ffentlicht, dass Visual Studio 2010 Express for Windows Phone, XNA Game Studio 4.0 und einen Windows Phone Emulator enth&#228;lt. Damit k&#246;nnen Sie bereits heute loslegen eigene Spiele f&#252;r Windows Phone 7 zu entwickeln. <br /><br />Beachten Sie, dass die XNA Game Studio 4.0 CTP ausschlie&#223;lich das Profil 'Reach' unterst&#252;tzt, keine Xbox 360-Anbindung offeriert und auf die automatische Skalierung und Rotation verzichtet. Die CTP steht auf der Windows Phone Entwicklerhomepage zum Download bereit.<br /><br /><a href="http://developer.windowsphone.com/">Windows Phone Entwicklerhomepage</a><br /><br /><b>Update</b><br />Der, als Windows-Guru bekannte, Autor Charles Petzold arbeitet derzeit an seinem Buch &quot;Programming Windows Phone7 Series&quot; und hat jetzt ein Preview ver&#246;ffentlicht. Die Preview-Version des Buches steht sowohl im XPS- als auch im PDF-Format zur Verf&#252;gung und umfasst sechs Kapitel:<ul><li>Part I Getting Started<ul><li>•Chapter 1 Phone Hardware + Your Software</li><li>•Chapter 2 Hello, Windows Phone</li></ul></li><li>Part II Silverlight<ul><li>•Chapter 3 Code and XAML</li><li>•Chapter 4 Presentation and Layout</li></ul></li><li>Part III XNA<ul><li>•Chapter 5 Principles of Movement</li><li>•Chapter 6 Textures and Sprites</li></ul></li></ul><br /><br /><a href="http://download.microsoft.com/download/E/3/5/E359FC51-1CF5-47F1-9BF3-74AB09D3339B/ProgWinPhonePreview.xps">Preview im XPS-Format</a><br /><a href="http://download.microsoft.com/download/7/C/8/7C820C6F-C205-4ECF-B9F3-1505DD13F9BF/ProgWinPhonePreview.pdf">Preview im PDF-Format</a><br /><a href="http://download.microsoft.com/download/1/D/B/1DB49641-3956-41F1-BAFA-A021673C709E/CodeSamples_DRAFTPreview_ProgrammingWindowsPhone7Series.zip">Samples</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=38fc5278-f0b7-44a7-ab1e-916717366aefTue, 16 Mar 2010 05:05:25 GMTErste Infos zum XNA Game Studio 4.0 - Die ZweiteShawn Hargreaves schrieb in seinem Blog N&#228;heres &#252;ber die Entwicklung f&#252;r Windows Phone 7 unter Verwendung des XNA Frameworks. Aus Entwicklersicht wird sich nicht sehr viel &#228;ndern, da das API gr&#246;&#223;tenteils konsistent geblieben ist. <br />Neue Herausforderungen ergeben sich bei der Umsetzung der Steuerung. Spiele die auf Windows Phone 7 laufen, m&#252;ssen die Touch-Eingaben verarbeiten. Sofern nur ein Finger erkannt werden muss, kann auf die vorhandene Mouse-API zur&#252;ckgegriffen werden. Insgesamt kann Windows Phone 7, genauso wie Windows 7, bis zu vier Fingerbewegungen erkennen. Das entsprechende API &#228;hnelt dem API, das zuvor f&#252;r Zune HD ver&#246;ffentlicht wurde. <br />Die schwierigste Aufgabe, so schreibt Shawn Hargreaves, war die Umsetzung des Graphics-API. W&#228;ren die XNA Framework-Entwickler den bisherigen Weg gegangen, dann g&#228;be es viele plattform-spezifische CAPS, die Entwickler ber&#252;cksichtigen m&#252;ssten. Bei hunderten von CAPS ist es nicht so leicht, den passenden CAPS zu pr&#252;fen und eine Fallback-Routine zu implementieren. Die L&#246;sung erinnert an das &#252;berarbeitete Direct3D 10- bzw. Direct3D 11-API. Anstatt alle CAPS einzeln zu pr&#252;fen, greifen Sie auf entsprechende Profile zur&#252;ck, die eine Reihe von CAPS konsolidieren. Unter Direct3D 10 bzw. Direct3D 11 ist die Rede von Feature Levels (siehe Blog-Eintrag vom 08.11.2009). Herausgekommen sind zwei Profile: Reach und HiDef. W&#228;hrend das Profil Reach m&#246;glichst viele Hardwarevariationen anspricht, beschr&#228;nkt das Profil HiDef die Menge der Zielplattformen auf jene, mit aktuellen Grafikkarten. Beispielsweise Multiple Render Targets (MRT) z&#228;hlen zum Profil HiDef.<br />&nbsp;Windows Phone 7 unterst&#252;tzt im Gegensatz zu den Zune-Ger&#228;ten der ersten Generation, hardwaregest&#252;tzte 3D-Grafikausgaben, wobei das Profil Reach nahezu die F&#228;higkeiten von Windows Phone 7 ausdr&#252;ckt. Alle Features die HiDef abdeckt sind nicht unter Windows Phone 7 verf&#252;gbar. Die Unterscheidung anhand der zwei Profile vereinfacht also die Code-Pfade.<br />Insbesondere die Anwendung von eigenen Shadern unterbindet das XNA Game Studio 4.0 f&#252;r Windows Phone 7. Das hei&#223;t Sie m&#252;ssen sich auf dieser Plattform vorl&#228;ufig mit der BasicEffect-Klasse und den neuen Abwandlungen SkinnedEffect, EnvironmentMapEffect, DualTextureEffect und AlphaTestEffect begn&#252;gen. <br />XNA Game Studio 4.0 erlaubt fast beliebige Back Buffer-Gr&#246;&#223;en. Die Hardware k&#252;mmert sich w&#228;hrend der Darstellung um die passende Skalierung. Dieser Vorgang belastet nicht die GPU und bedient sich sehr guter Filter, die bessere Ergebnisse liefern als ein bilinearer Filter, den die GPU offeriert. Beim Verkaufsstart von Smart Phones mit Windows Phone 7 wird die Displayaufl&#246;sung 480x800 Pixel betragen. Sp&#228;ter kommen weitere Modelle mit 320x480 Pixel. Selbstverst&#228;ndlich kann die native Aufl&#246;sung des Telefons ermittelt werden. Aber Sie k&#246;nnen auch mit einer fixen Aufl&#246;sung arbeiten und die Skalierung der Hardware &#252;berlassen. Dabei werden auch die Touch-Eingaben skaliert. Ferner &#252;bernimmt der Grafiktreiber die Rotation des Bildes, wobei das XNA Framework eine Einflussnahme auf die Art und Weise der Rotation erlaubt.<br /><br /><a href="http://blogs.msdn.com/shawnhar/">Blog von Shawn Hargreaves</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=975f281b-fce6-4d06-a14d-9e01ae7296f5Thu, 11 Mar 2010 08:40:48 GMTKostenloser Artikel zum XNA FrameworkDie Fachzeitschrift Visual Studio One nimmt die Microsoft Developer Community als Zielgruppe ins Visier. Alle zwei Monate halten Sie bekannte Autoren zu den Themen .NET, Visual Studio, SharePoint, Silverlight, Windows Mobile, C#, VB &amp; Co. auf dem Laufenden.<br />Mit freundlicher Unterst&#252;tzung von Visual Studio One kann ich Ihnen heute einen Artikel zum Thema XNA Framework im PDF-Form als kostenlosen Download anbieten. Der Artikel fokussiert die Audio- und Videowiedergabe im XNA Framework. Der Artikel entstammt einer Serie zur Spieleentwicklung mit dem XNA Game Studio. Alle anderen Artikel der Serie k&#246;nnen Sie nachtr&#228;glich unter <a href="http://www.visualstudio1.de">www.visualstudio1.de</a> in Papierform oder als elektronische Ausgabe beziehen. <ul><li>Meine erste XNA-Anwendung (Vincent Zahnd)<br />Ausgabe 02/2009</li><li>Zweidimensionalit&#228;t<br />Ausgabe 03/2009</li><li>Dreidimensionale Echtzeit<br />Ausgabe 04/2009</li><li>XNA-Flexibilit&#228;t dank der GPU<br />Ausgabe 06/2009</li><li>Sound und Video im XNA-Framework<br />Ausgabe 01/2010</li><li>XNA-Framework im Netz<br />Ausgabe 02/2010</li></ul>Die Serie beginnt bei der zweidimensionalen Grafikausgabe, legt dann die Grundsteine f&#252;r die Dreidimensionalit&#228;t und f&#228;hrt mit der Shader-Programmierung fort. Die letzten beiden Artikel erkl&#228;ren Ihnen, wie Sie Audio- und Videodaten wiedergeben und Verbindungen im Netzwerk aufbauen sowie Ihr fertiges Computerspiel &#252;ber den Xbox LIVE Marktplatz verteilen.<br /><br /><a href="http://blog.jenskonerow.de/blog/Download.ashx?file=3fcd4660-f88e-4183-bfb3-dc2f0dfc665c">Artikeldownload: Sound und Video im XNA-Framework</a><br /><br /><a href="http://www.visualstudio1.de"><img src="http://www.visualstudio1.de/images/logo2.jpg" /></a>http://blog.jenskonerow.de/blog/Default.aspx?ID=0f97a69f-df89-41fa-bc0c-66826f99133bWed, 10 Mar 2010 08:29:44 GMTErste Infos zum XNA Game Studio 4.0Die letzten Tage ging die Information schon mehrfach durch die Presse: Microsoft erweitert die verf&#252;gbare Plattform-Palette des XNA Frameworks auf Windows Phone 7. Somit werden XNA Framework-Entwickler &#252;ber Nacht zu Entwickler f&#252;r neue Smart Phones, die ab Ende des Jahres mit der Einf&#252;hrung von Windows Phone 7 auf den Markt kommen werden. Insgesamt erm&#246;glicht das XNA Framework dann die Entwicklung f&#252;r Windows-PC’s, die Xbox 360 und Windows Phone 7-Smart Phones. Zune-Ger&#228;te unterstützt das XNA Game Studio 4.0 nicht mehr. Allerdings lassen sich XNA Game Studio 3.1 und XNA Game Studio 4.0 parallel betreiben. Im optimalen Fall gen&#252;gen ca. 10% Codeanpassungen f&#252;r die jeweilige Plattform, um Eigenheiten wie die Steuerung zu optimieren.<br />Auf der diesj&#228;hrigen Games Developer Conference (GDC) hat Microsoft nun erstmals Informationen zum XNA Framework 4.0 ver&#246;ffentlicht, das es wahrscheinlich noch in diesem Sommer in die virtuellen Regale schaffen wird. <br />Unter Windows Phone 7 dreht sich im Spielesektor alles um den Games Hub und den Marketplace Hub. Der Games Hub enth&#228;lt alle vom Benutzer bezogenen Spiele. Dar&#252;ber hinaus stehen folgende Xbox LIVE Features zur Verf&#252;gung:<br /><ul><li>Sammeln von Achievements und Ausbau des Gamer Score</li><li>Anzeige des Xbox LIVE Leaderboards</li><li>Anzeige des Xbox LIVE Avatars</li><li>Zugriff auf Spotlight Feeds</li><li>Verwaltung der Xbox LIVE Freunde</li></ul>&#220;ber den Marketplace Hub beziehen Benutzer Applikationen und Spiele. Sowohl freie Entwickler als auch professionelle Entwickler k&#246;nnen ihre Applikationen und Spiele auf dem Marketplace ver&#246;ffentlichen. <br />Besonderer Clou ist die plattform&#252;bergreifende Speicherung der Spielst&#228;nde. Erreichte Spielst&#228;nde werden online vermerkt und k&#246;nnen auf einer anderen Plattform fortgef&#252;hrt werden.<br />Doch damit nicht genug, das XNA Framework hält auch weitere neue Features bereit:<ul><li>Visual Studio 2010 Support</li><li>Dynamic Audio Output</li><li>Microphone Input</li><li>Neue Effekt-Klassen:<ul><li>SkinnedEffect</li><li>EnvironmentMapEffect</li><li>DualTextureEffect</li><li>AlphaTestEffect</li></ul></li></ul>http://blog.jenskonerow.de/blog/Default.aspx?ID=eb9463ab-e7f9-47e2-922d-c768cada911fWed, 10 Mar 2010 08:09:15 GMTVideos der PDC 2009 onlineF&#252;r alle die der diesj&#228;hrigen PDC nicht pers&#246;nlich beiwohnen konnten, stehen jetzt Videos der Sessions online zur Verf&#252;gung. Zwei Sessions, Advanced Graphics Functionality Using DirectX und Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware, von Michael Oneppo geben Einblick in die neuen M&#246;glichkeiten von Windows 7 und DirectX 11.<br /><br /><a href="http://microsoftpdc.com/Videos">Videos der PDC 2009 Sessions</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=ebf9784a-03cf-4f5e-9538-bf078a1b7db3Thu, 26 Nov 2009 17:57:22 GMTUnrealEngine 3 und CryENGINE 3 kostenlosK&#252;rzlich hat Epic Games seine UnrealEngine 3 f&#252;r nicht kommerzielle Projekte zum kostenlosen Download bereitgestellt. Nun zieht auch das Frankfurter Studio Crytek nach und ver&#246;ffentlichte seine CryENGINE 3. Crytek m&#246;chte seine Engine u.a. Universit&#228;ten anbieten. Interessenten m&#252;ssen sich auf der Website der CryENGINE bewerben.<br /><br /><a href="http://www.udk.com/">Unreal Developer Kit Download</a><br /><br /><a href="http://mycryengine.com/">CryENGINE 3 Bewerbung</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=9f5c942f-ab3b-4bd5-9ff2-4ef182d89591Thu, 19 Nov 2009 11:57:54 GMTNeues Buch zum Thema XNA FrameworkSeit langer Zeit ist mein Buch &quot;Spieleentwicklung mit dem Microsoft XNA Framework&quot; angek&#252;ndigt. Oft wurde es aufgrund chronischen Zeitmangels verschoben. Nun kann ich endlich mitteilen, dass das Buch in den Druck gegangen ist. Das hei&#223;t, das Buch wird Ende November bei <a href="http://www.entwicklerpress.de">entwickler.press</a> erh&#228;ltlich sein. Dem Buch liegt keine CD-Rom bei. Stattdessen werden die Beispielprojekte im Laufe dieses Monats online zur Verf&#252;gung stehen. <br /><a href="images/xna_cover.jpg" rel="lightbox" title="Spieleentwicklung mit dem Microsoft XNA Framework"><img class="image" alt="" src="./images/xna_cover.jpg" /></a><br /><br />Selbstverst&#228;ndlich m&#246;chte man nicht die Katze im Sack kaufen, weshalb Sie unter folgendem Link das Inhaltsverzeichnis des Buchs einsehen k&#246;nnen.<br /><br /><a href="http://blog.jenskonerow.de/blog/Download.ashx?file=10196555-c635-4201-8e88-516f709a59a8">Entwicklung mit dem Microsoft XNA Framework - Inhaltsverzeichnis</a><br /><br />Wie immer begr&#252;&#223;e ich Hinweise auf Fehler und sonstige Kritik. Letzteres wird selbstverst&#228;ndlich in einer evtl. 2. Auflage, sofern m&#246;glich, ber&#252;cksichtigt.http://blog.jenskonerow.de/blog/Default.aspx?ID=a0f05b86-41b9-43bf-9583-d27372585a46Mon, 09 Nov 2009 09:23:00 GMTFeature LevelsDie Entwicklung von Computerspielen f&#252;r Personal Computer gestaltet sich schwieriger als die Entwicklung f&#252;r Konsolen, denn herrk&#246;mmliche Computer variieren sehr stark in deren Hard- und Softwareausstattung. W&#228;hrend bei Konsolen die F&#228;higkeiten der Grafikkarte bekannt sind, muss beim PC immer abgefragt werden, welche Features die Grafikkarte unterst&#252;tzt. Infolgedessen bedarf es diverser Codepfade, um Effekte abgeschw&#228;cht auf &#228;lterer Hardware auszuf&#252;hren oder ganz zu deaktivieren. <br />Unter DirectX 9 fragen Sie die F&#228;higkeiten der Grafikkarte &#252;ber die CAPS (Capabilities) ab. Das DirectX SDK enth&#228;lt eine vollst&#228;ndige Auflistung aller CAPS. Ausgedruckt bringt es die Liste auf mehrere A4-Bl&#228;tter. Um jener Komplexit&#228;t Herr zu werden, f&#252;hrte Microsoft mit DirectX 10.1 die sog. Feature Levels ein. Unter DirectX 11 existieren sechs Feature Levels, die die CAPS gruppieren. <br /><ul><li>Feature Level 11.0</li><li>Feature Level 10.1</li><li>Feature Level 10.0</li><li>Feature Level 9.3</li><li>Feature Level 9.2</li><li>Feature Level 9.1</li></ul><br />In obiger Auflistung, von oben nach unten gesehen, repr&#228;sentiert jedes Feature Level ein Superset der darunterliegenden Ebene. Jetzt stellt sich die Frage, welchen Sinn die Feature Levels haben? Haupts&#228;chlich sollen die Feature Levels die Entwicklung vereinfachen, indem die vielen Permutationen der CAPS in den Griff zu kriegen. Statt unz&#228;hliger CAPS gibt es nun eben maximal sechs Feature Levels die die F&#228;higkeiten der Grafikkarte beschreiben. Dar&#252;berhinaus vereinfachen die Feature Levels die Verwendung des API, denn Sie k&#246;nnen ebenso ein Direct3D 11 Device auf Basis von Direct3D 9 Hardware erzeugen (gleiches gilt f&#252;r ein Direct3D 10.1 Device auf Basis von Direct3D Hardware).<br />Das Feature Level 9.1 umfasst beispielsweise das Shader Model 2.0. Feature Level 9.2 beinhaltet alle Funktionen aus dem Feature Level 9.1. Dar&#252;berhinaus unterst&#252;tzt das Feature Level 9.2 u.a. vier simultane Render Targets. Ab Feature Level 9.3 steht zum Beispiel das Shader Model 3.0 zur Verf&#252;gung. <br />W&#228;hrend bei Direct3D 10.1 beispielsweise f&#252;r jedes Feature Level versucht werden muss ein Device zu erzeugen, gen&#252;gt bei Direct3D 11 die Erzeugung des Device. Auf welchem Feature Level das Device basiert, gibt die D3D11CreateDevice()-Funktion zur&#252;ck.<br />Folgendes Beispiel demonstriert die Vorgehensweise beim Erzeugen eines Direct3D 10.1 Devices.<div class="code"><span style="color:#0000FF">const</span> D3D10_FEATURE_LEVEL1 pFeatureLevels[] =<br />{<br />&nbsp;&nbsp;D3D10_FEATURE_LEVEL_10_1,<br />&nbsp;&nbsp;D3D10_FEATURE_LEVEL_10_0,<br />&nbsp;&nbsp;D3D10_FEATURE_LEVEL_9_3,<br />&nbsp;&nbsp;D3D10_FEATURE_LEVEL_9_2,<br />&nbsp;&nbsp;D3D10_FEATURE_LEVEL_9_1,<br />};<br /><br /><span style="color:#0000FF">const</span> D3D10_DRIVER_TYPE pDriverTypes[] =<br />{<br />&nbsp;&nbsp;D3D10_DRIVER_TYPE_HARDWARE,<br />&nbsp;&nbsp;D3D10_DRIVER_TYPE_WARP,<br />&nbsp;&nbsp;D3D10_DRIVER_TYPE_REFERENCE,<br />};<br /><br /><span style="color:#0000FF">const</span> UINT iDriverCount = sizeof(pDriverTypes) / <br />&nbsp;&nbsp;sizeof(pDriverTypes[0]);<br /><span style="color:#0000FF">const</span> UINT iFeatureCount = sizeof(pFeatureLevels) / <br />&nbsp;&nbsp;sizeof(pFeatureLevels[0]);<br /><br /><span style="color:#0000FF">for</span>(UINT iDriverType = 0; iDriverType &lt; iDriverCount; <br />&nbsp;&nbsp;iDriverType++)<br />&nbsp;&nbsp;<span style="color:#0000FF">for</span>(UINT iFeatureLevel = 0; iFeatureLevel &lt; iFeatureCount; <br />&nbsp;&nbsp;&nbsp;&nbsp;iFeatureLevel++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hResult = D3D10CreateDevice1(pAdapter, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDriverTypes[iDriverType], NULL, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3D10_CREATE_DEVICE_BGRA_SUPPORT, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFeatureLevels[iFeatureLevel], <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3D10_1_SDK_VERSION, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;_pD3D10Device);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if</span>(SUCCEEDED(hResult))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">return</span> S_OK;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>Unter Direct3D 11 wurde der Vorgang vereinfacht. Hier bedarf es lediglich der Iteration aller Device Types, bis schlie&#223;lich ein Device erzeugt werden konnte.<div class="code"><span style="color:#0000FF">const</span> D3D_FEATURE_LEVEL pFeatureLevels[] =<br />{<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_11_0,<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_10_1,<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_10_0,<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_9_3,<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_9_2,<br />&nbsp;&nbsp;D3D_FEATURE_LEVEL_9_1,<br />};<br /><br /><span style="color:#0000FF">const</span> D3D_DRIVER_TYPE pDriverTypes[] =<br />{<br />&nbsp;&nbsp;D3D_DRIVER_TYPE_HARDWARE,<br />&nbsp;&nbsp;D3D_DRIVER_TYPE_WARP,<br />&nbsp;&nbsp;D3D_DRIVER_TYPE_REFERENCE,<br />};<br /><br /><span style="color:#0000FF">const</span> UINT iDriverCount = sizeof(pDriverTypes) / <br />&nbsp;&nbsp;sizeof(pDriverTypes[0]);<br /><span style="color:#0000FF">const</span> UINT iFeatureCount = sizeof(pFeatureLevels) / <br />&nbsp;&nbsp;sizeof(pFeatureLevels[0]);<br /><br /><span style="color:#0000FF">for</span>(UINT iDriverType = 0; iDriverType &lt; iDriverCount; <br />&nbsp;&nbsp;iDriverType++)<br />{<br />&nbsp;&nbsp;hResult = D3D11CreateDeviceAndSwapChain(NULL, <br />&nbsp;&nbsp;&nbsp;&nbsp;pDriverTypes[iDriverType], NULL, <br />&nbsp;&nbsp;&nbsp;&nbsp;D3D11_CREATE_DEVICE_DEBUG | <br />&nbsp;&nbsp;&nbsp;&nbsp;D3D11_CREATE_DEVICE_BGRA_SUPPORT, <br />&nbsp;&nbsp;&nbsp;&nbsp;pFeatureLevels, <br />&nbsp;&nbsp;&nbsp;&nbsp;iFeatureCount,<br />&nbsp;&nbsp;&nbsp;&nbsp;D3D11_SDK_VERSION, <br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;_GraphicsDeviceManager.SwapChainDesc, <br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;_GraphicsDeviceManager.SwapChain, <br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;_GraphicsDeviceManager.GraphicsDevice,<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;_GraphicsDeviceManager.FeatureLevel, <br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;_GraphicsDeviceManager.DeviceContext);<br />}</div>http://blog.jenskonerow.de/blog/Default.aspx?ID=13184fd5-7e0b-4703-9f8a-8fcf06b9bc65Sun, 08 Nov 2009 13:43:00 GMTBlog reloadedLange Zeit war sowohl meine Internetseite als auch mein Blog aufgrund technischer Schwierigkeiten offline. Umso gl&#252;cklicher bin ich, Ihnen mein neuen Blog nun pr&#228;sentieren zu koennen. Die Arbeiten an der Seite sind noch nicht vollst&#228;ndig abgeschlossen, weshalb es in n&#228;chster Zeit unter Umst&#228;nden zu kurzfristigen Aussetzern kommen kann. Feedback zum Blog ist selbstverst&#228;ndlich willkommen!http://blog.jenskonerow.de/blog/Default.aspx?ID=5c489a2b-2df8-423d-9ae8-9f4357b8f677Tue, 27 Oct 2009 19:33:03 GMTEffect Pools im XNA FrameworkIn der Regel verwenden Computerspiele unz&#228;hlige Effekte. Dabei besitzen fast alle Effekte mindestens eine Hand voll gleicher Parameter (globale Variablen). Ein gutes Beispiel sind die Sicht- und Projektionsmatrizen. Die Anwendung muss nun f&#252;r jeden Effekt dieselben Daten immer und immer wieder zuweisen. <br />Dem Problem begegnet man mit sog. Effect Pools. Alle Effekte die einem Effect Pool angeh&#246;ren k&#246;nnen auf gemeinsam verwendete Variablen zugreifen. Als Konsequenz muss man nur noch einem Effekt die entsprechenden Parameter-Werte zuweisen und alle anderen Effekte &#252;bernehmen die Daten ebenfalls. Wenn man nun die Effekte &#252;ber die Content Pipeline l&#228;dt, dann geh&#246;ren diese automatisch einem statischen Effect Pool an. Gemeinsam verwendete Variablen kennzeichnen Sie in der Effekt-Datei mit dem Modifier shared.<div class="code"><span style="color:#0000FF">shared</span> <span style="color:#0000FF">float3</span> LightPosition = 0.0f;</div>Per Default geh&#246;ren alle Effekte, die Sie &#252;ber die Content Pipeline laden also demselben Effect Pool an. Wie aber k&#246;nnen Effekte unterschiedlichen Effect Pools zugewiesen werden? Wirft man einen Blick auf die Konstruktor&#252;berladungen der Effect-Klasse, dann wird man eine Signatur finden, die eine GraphicsDevice-Instanz, den kompilierten Effekt-Code, Compiler-Optionen und einen Effect Pool entgegen nimmt. Jetzt gilt es nur noch den Code des kompilierten Effekts zu ermitteln. Hierf&#252;r wird ein neuer Content Processor entwickelt, der das Resultat des Effect Importers entgegen nimmt, den Effekt kompiliert und den Code als byte-Array zur&#252;ckgibt.<div class="code">[ContentProcessor(DisplayName = &quot;Plain Effect Processor&quot;)]<br /><span style="color:#0000FF">public</span> class PlainEffectProcessor : ContentProcessor<br />{<br />&nbsp;&nbsp;<span style="color:#0000FF">public</span> override <span style="color:#0000FF">byte</span>[] Process(<br />&nbsp;&nbsp;&nbsp;&nbsp;EffectContent input, ContentProcessorContext context)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;CompiledEffect oEffect = context.Convert(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input, &quot;EffectProcessor&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">return</span> oEffect.GetEffectCode();<br />&nbsp;&nbsp;}<br />}</div>Zur Laufzeit laden Sie das byte-Array und erzeugen eine neue Effect-Instanz:<div class="code">m_oEffectPool = <span style="color:#0000FF">new</span> EffectPool();<br /><br /><span style="color:#0000FF">byte</span>[] oCompiledEffect = <span style="color:#0000FF">this</span>.Content.Load(&quot;Effect1&quot;);<br />m_oEffect1 = <span style="color:#0000FF">new</span> Effect(<span style="color:#0000FF">this</span>.GraphicsDevice, oCompiledEffect, CompilerOptions.None, m_oEffectPool); </div>http://blog.jenskonerow.de/blog/Default.aspx?ID=93c924a4-77fe-4c01-b6f3-68cf1fc0aa16Wed, 15 Jul 2009 15:35:00 GMTXNA Game Studio 3.1 ist erschienenEs ist soweit, Microsoft geht mit dem XNA Game Studio 3.1 in die f&#252;nfte Runde. Mit der neuen Version k&#246;nnen Sie Avatars rendern und animieren. Es existiert eine M&#246;glichkeit die Sprachkommunikation zu erhalten, auch wenn der Freund einen anderen Titel spielt. Au&#223;erdem wurde das XNA Framework um eine Videoplayback-Funktionalit&#228;t erweitert, damit Logos oder sonstige Inhalte dargestellt werden k&#246;nnen. Eine genaue Beschreibung der neuen Features ist in der Dokumentation des XNA Game Studio 3.1 oder alternativ auf der Website des Creators Club zu finden.<br /><br /><a href="http://creators.xna.com">XNA Game Studio 3.1</a>http://blog.jenskonerow.de/blog/Default.aspx?ID=c500c992-6a41-47fd-81e5-89f26a8efb5bFri, 12 Jun 2009 13:11:00 GMTKamerawackeln als Post Processing EffectJeder aktuelle Spieletitel setzt Post Processing Effects ein, um dem Spiel eine gewisse Note zu verleihen oder besonders spektakul&#228;re Spezialeffekte umzusetzen. Allerdings muss ein derartiger Effekt nicht immer sehr aufw&#228;ndig sein, um dem Spiel zu einem besseren &quot;Feeling&quot; zu verhelfen. Ein Kamerawackler, der zum Beispiel eingesetzt werden kann, wenn der eigene Panzer getroffen wurde unterst&#252;tzt die Action eines Spiels. Ein Kamerawackeln l&#228;sst sich sehr leicht als Post Processing Effect realisieren. <br /><br />Zur Realisierung des Effekts muss die Szene in einem Render Target vorliegen, dass wir als Textur an einen Shader geben k&#246;nnen. Der Pixel Shader macht nichts anderes, als die Texturkoordinaten zu verzerren, so dass die komplette Szene auf einer Ellipse bewegt wird. Die Translation muss nur schnell genug stattfinden, damit die Verzerrung als Kamerawackeln erscheint. Wie folgt sieht der Pixel Shader aus:<div class="code"><span style="color:#0000FF">float</span> fTime;<br /><br /><span style="color:#0000FF">uniform</span> <span style="color:#0000FF">extern</span> <span style="color:#0000FF">texture</span> ScreenTexture;<br /><span style="color:#0000FF">sampler</span> ScreenS = sampler_state<br />{<br />Texture = &lt;ScreenTexture&gt;;<br />};<br /><br /><span style="color:#0000FF">float4</span> PixelShaderFunction(<span style="color:#0000FF">float2</span> oTexCoord : TEXCOORD0) : COLOR0<br />{<br />&nbsp;&nbsp;<span style="color:#0000FF">return</span> <span style="color:#0000FF">tex2D</span>(ScreenS, <br />&nbsp;&nbsp;&nbsp;&nbsp;oTexCoord + <span style="color:#0000FF">float2</span>(cos(fTime * 1000.0f) * 0.01f, <br />&nbsp;&nbsp;&nbsp;&nbsp;sin(1.0f + (1.5f - fTime) * 1000.0f) * 0.0005f) * fTime);<br />}</div>Der Pixel Shader addiert zu den Texturkoordinaten einen zweiten Vektor. Jener Vektor errechnet sich aus der Kosinus- und Sinusfunktion, um eine Kreisbewegung zu erzeugen. Die Variable fTime wird von der Anwendung hereingegeben und geht gegen 0. Somit nimmt das Kamerawackeln gegen Ende stetig ab. Da die Zeit in Sekunden angegeben wird, skaliert der Pixel Shader die Zeit mit einem Faktor von 1000. Die Ellipse entsteht dadurch, dass die Kosinus- und Sinusfunktion unterschiedlich skaliert wird. <br />Die Technique sieht folgenderma&#223;en aus:<div class="code"><span style="color:#0000FF">technique</span><br />{<br />&nbsp;&nbsp;<span style="color:#0000FF">pass</span> P0<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PixelShader = <span style="color:#0000FF">compile</span> ps_2_0 PixelShaderFunction);<br />&nbsp;&nbsp;}<br />}</div>Die Szene wird mit einem BasicEffect-Objekt gerendert:<div class="code">oSpriteBatch.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.None);<br />oEffect.Parameters[&quot;fTime&quot;].SetValue(m_fTime);<br /><br />oEffect.Begin();<br />oEffect.CurrentTechnique.Passes[0].Begin();<br />oSprite.Draw(oTexture, <span style="color:#0000FF">new</span> Rectangle(0, 0, <br />&nbsp;&nbsp;<span style="color:#0000FF">this</span>.GraphicsDevice.Viewport.Width, <br />&nbsp;&nbsp;<span style="color:#0000FF">this</span>.GraphicsDevice.Viewport.Height), Color.White);<br />oSprite.End();<br /><br />oEffect.CurrentTechnique.Passes[0].End();<br />oEffect.End();</div>Im n&#228;chsten Blogeintrag werden wir uns dann einer kleinen Druckwelle f&#252;r zweidimensionale Spiele widmen. Diese kann ebenfalls mit einer Sinusfunktion realisiert werden und erweckt dennoch Eindruck beim Benutzer.http://blog.jenskonerow.de/blog/Default.aspx?ID=cb0056e2-1445-43a9-a406-068845314cadTue, 26 May 2009 17:57:00 GMTClip DistancesIn vielen Situationen, zum Beispiel beim Rendern von Wasseroberfl&#228;chen, m&#252;ssen diverse Objekte in der virtuellen Welt geclippt werden. Beispielsweise wird Clipping eingesetzt, wenn Sie die Umgebung rendern, die in der Wasserspiegelung sichtbar ist. Die Geometrie unterhalb der Wasseroberfl&#228;che ist f&#252;r die Reflektion irrelevant.<br /><br />In &#228;lteren DirectX-Versionen kommen Clip Planes zum Einsatz, um Geometrie ober- oder unterhalb dieser Ebene zu entfernen. Clip Planes waren Bestandteil der Fixed Function Pipeline. Demzufolge ist diese Technik dem Rotstift verfallen. In DirectX 10 existieren Clip Distances. Vertex oder Geometry Shader weisen einer Ausgabe die Semantik SV_ClipDistance[n] zu, wobei n entweder 0 oder 1 ist.<br /><br />F&#252;r jeden Vertex berechnen Sie einen Wert, den die Grafikkarte &#252;ber die Primitive hinweg interpoliert. Alle Pixel, deren „Distanz“ unter 0 liegt werden verworfen. Clip Planes simulieren Sie mit folgender Ebenengleichung:<br /><br />Ax + By + Cz + D = 0<br /><br />Die Koeffizienten A, B und C repr&#228;sentieren die Normale der Clip Plane. D ist die Distanz von der Ebene zum Koordinatenursprung, sprich: Zum Beispiel die H&#246;he des Wasserspiegels. Wenn Sie die Schnittebene in Weltkoordinaten definieren, dann m&#252;ssen Sie die Vertices vorher ebenfalls in Weltkoordinaten &#252;berf&#252;hren, bevor Sie die Komponenten x, y und z in die Gleichung einsetzen. Insgesamt bringt ein Register der Grafikkarte bis zu vier float-Werte unter. Demnach d&#252;rfen Sie bis zu acht Kriterien mit den Clip Distances angeben. <br /><br />Um Clip Distances zu verwenden, definierten Sie f&#252;r die Vertex Shader-Ausgabe eine Struktur wie folgende:<div class="code"><span style="color:#0000FF">struct</span> VertexShaderOutput<br />{<br />&nbsp;&nbsp;//...<br />&nbsp;&nbsp;<span style="color:#0000FF">float</span> Distance : SV_ClipDistance0;<br />};</div>Der Vertex Shader selbst, kann beispielsweise wie folgt aussehen. Hierbei gilt es zu beachten, dass die Ebene in Weltkoordinaten spezifiziert wird.<div class="code">VertexShaderOutput VS_TerrainWithClipping(VertexShaderInput oInput)<br />{<br />&nbsp;&nbsp;VertexShaderOutput oOutput = (VertexShaderOutput)0;<br />&nbsp;&nbsp;<span style="color:#0000FF">float4</span> oPosition = <span style="color:#0000FF">mul</span>(oInput.Position, World);<br />&nbsp;&nbsp;oOutput.Distance = ClipPlaneNormal.x * oPosition.x + ClipPlaneNormal.y * <br />&nbsp;&nbsp;&nbsp;&nbsp;oPosition.y + ClipPlaneNormal.z * oPosition.z + Distance;<br /><br /><span style="color:#0000FF">return</span> oOutput;<br />}</div>Den Vektor ClipPlaneNormal und die Distanz &#252;bergibt die Anwendung dem Shader. http://blog.jenskonerow.de/blog/Default.aspx?ID=d5307184-ce5e-442e-afe6-57fb7cdbb74aSat, 14 Mar 2009 11:24:00 GMT