1. Duke Bean’Em released!

    Nu har jag äntligen lagt upp mitt spel från JavaOne. Du hittar allting, källkod och en webstart-länk, på http://jsolutions.se/DukeBeanEm. Uppdateirngar av spelet kommer ske i mån av tid.. ;)

  2. JavaOne – efterspel

    Hemma igen och någorlunda återställd (jag får alltid sån fet jetlag när jag reser…). Har fått massvis med positiv feedback på min presentation, så jag har inte riktigt kommit ner från molnen än. Jobbar på att få ut spelet och koden nu i veckan så att alla som är intresserade kan leka vidare med det. Det har börjat dyka upp en del blogg-inlägg som kommenterar min presentation. Alltid roligt att bli igenkänd. Min förhoppning är att det hela genererar ett lite större intresse för spelutveckling i Java, men även möjlighet för mig att få åka ut och prata mer om det på andra konferenser.

    För er som ska på JavaForum i Göteborg nästa vecka så tänkte jag köra en kort presentation av spelet så ni ser vad det hela handlar om. See you all there! :)

  3. En enkel lösning för att läsa in 3D Modeller i Java

    Som jag tidigare har skrivit så ska jag åka till JavaOne nu i maj och hålla en presentation med titeln ”How to write a 3D computer game using Java in less than 50 minutes.”. Detta låter kanske som ett ganska djärvt påstående, så jag tänkte berätta lite om en av de större utmaningarna som jag haft med att ta fram denna presentation.

    Som ni säkert vet så brukar man skapa de 3D modeller som används i spel med hjälp av ett 3D-modelleringsprogram, t.ex. 3DStudio MAX eller Lightwave. Den fil (eller filer) som dessa skapar kan liknas vid ett serialiserat 3D-objekt. För den som vill ladda en 3D-modell så behöver man alltså lista ut strukturen på formatet (eller hitta specifikationen) och sen skriva en parser som läser igenom filen och skapar objektrepresentationen av det hela. Låter ganska enkelt, eller hur?

    Faktum är att det är väldigt enkelt att skriva en parser som laddar en fil från en 3D-modellerare. I mitt fall handlar det om COLLADA-formatet som jag exporterat från 3D modelleraren Blender. COLLADA är ett öppet XML-baserat format som använda för att beskriva en 3D scen (Läs mer om COLLADA på http://www.khronos.org/collada/). Bland annat så har Sony valt att använda COLLADA som det standard-format som 3D modeller ska ha i PlayStation 3. Genom att använda det XML schema som finns för COLLADA så kan jag enkelt generera klasser (Java Beans) för varje element som min 3D-modell består av. Genereringen gör jag med hjälp av ett API som heter XMLBeans. Man tar kort och gott ett XML Schema, kör XMLBeans schema-compiler och vips så har du en jar-fil komplett med kompilerade klasser för alla element som finns beskrivet i ditt schema. Därefter är det en bara att läsa in din XML-fil på följande vis:

    COLLADADocument parsedDocument = COLLADADocument.Factory.parse(new File(fileName));

    COLLADADocument är en genererad klass som representerar en COLLADA-fil. Från det objektet kan jag sen stega mig ner till alla element som min 3D-modell innehåller och enkelt läsa upp datan så som jag vill använda den i min applikation. På detta vis får jag snabbt och enkelt en parser för att ladda mina modeller. Det enda du behöver känna till är strukturen på formatet, något som är ganska enkelt att lära sig då COLLADA är ett öppet format och det finns rätt mycket dokumentation för den som vill fördjupa sig.

    Det man upptäcker rätt snabbt då man börjar med 3D programmering är att inläsning av 3D-modeller är något som ställer till rätt mycket. Det finns en hel del s.k. loaders tillgängliga, men alla dessa är helt beroende av det 3D API (t.ex. Java 3D eller Xith 3D) som de skrevs för. Du kan alltså inte använda dessa loaders utan att samtidigt behöva binda upp dig till ett stort och ofta komplext ramverk. Men ovan beskrivna metod så kommer du förbi det problemet. Allt du behöver göra är att ta din 3D-modell, läsa in den i Blender (eller vilket program du nu väljer använda) och exportera den till ett XML-baserat format (Det finns två stycken öppna standarder baserade på XML, COLLADA och X3D).

    Eftersom klasserna som skapas med XMLBeans följer JavaBeans-standarden så finns det väldigt intressanta saker man kan göra här. Spring Framework för spelprogrammering någon?

    XMLBeans har även många andra användabara områden, så jag rekommenderar er att ta en titt på det om ni ska jobba mycket med olika XML-dokument i Java.

  4. IBS JavaSolutions på JavaOne 2007

    Till vår stora glädje så blev en av våra förslag till presentationer på JavaOne 2007 godkända. Vi ska nu dit och hålla en session med den preliminära titeln ”Write A 3D Game in Java Technology in Less Than 50 Minutes…”. Syftet är att visa hur enkelt och snabbt man kan sätta ihop ett spel i Java. Nervositeten är hög men ambitionen är högre. :)

    San Fransisco here we come!

  5. Fun and easy 3D in Java!

    Ever since I ran across Povray in the early nineties I’ve been a sucker for all aspects of 3D computer graphics. I loved playing around with 3D-modellers such as 3D Studio MAX, Maya or Blender (to name a few), trying to create my own 3D renderer from scratch (with a very poor result), experimenting with a wide range of 3D-engines, tried DirectX in both C++ and C# (Managed DirectX in C# is really quite nice, compared to the old-school C++ approach) and OpenGL in MANY different languages (including Scheme). However, since my skills in creating anything visually pleasing is comparable to a 3-year-old boy with crayons, the only area within the 3D computer graphics domain I can be productive in is ”pure” 3D programming in DirectX or OpenGL and rely on the 3D models available from the web (also, my color blindness has proved to be somewhat of an issue with results varying from simply weird to ”ouch, my eyes hurts!”).

    Anyone who ever tried to learn 3D programming in any other language than Java or C# are aware of how much effort you have to put in to simply displaying an empty window. On top of that comes the fairly complex way of managing all related data structures (vertices, vectors, matrices etc.). For me, this was the major reason I never got further than creating simple 3D demos (e.g., rotating cubes etc.). It wasn’t so much due to OpenGL but rather the language I used. The amount of work required took the fun out of the task.

    Imagine my anticipation when I first came across JOGL. I love developing in Java since it is so easy to work with. Setting up an OpenGL window was a piece of cake and creating a set of small utility-classes for managing matrices, vectors and vertices proved much more simple in Java than in C++. With the very nice user-input handing (KeyListener, MouseListener, MouseMotionListener etc.) in Java, creating interactive application with JOGL were a no-brainer.

    This was back in 2003. Now, in 2007, JOGL has its own finalized JSR (JSR-231) and an updated version (JOGL 1.1) will soon be available. A visit to jogl.dev.java.net shows a bunch of ready-to-use applications built on-top of JOGL, and jogl-demos.dev.java.net contains a long list of examples of visually stunning examples for those who still doubt that OpenGL on Java is as good as OpenGL in C++ or any other native programming language. FPS-fans can now run the Java port of Quake2, Jake2, from any machine supporting JOGL using Java Web Start (i.e., click’n'play). With the release of Java 6 and all the cool desktop-features, we can finally create 3D applications that are both useful and looks cool. The embedded version of OpenGL (OpenGL ES) has its own JSR started and will hopefully deliver hardware accelerated support for Java ME (both CLDC 1 and 1.1).
    Some of the things I think (or rather hope) we will see during 2007 regarding JOGL:

    • Java-based Google Earth? I bet someone at Google is already working on this…
    • Real, working examples of applications with 3D interfaces. Increased research in Human-Computer Interaction with 3D user-interfaces.
    • JOGL (and Java) support on Playstation (2 and 3), Wii and XBox 360 (ok, the last one is probably hoping to much.. ;). I know this is a bit of a stretch to hope for this, but it would be cool to be able to write your own games for these platforms (Playstation already has Linux-support so that one shouldn’t be an issue really). :)
    • Tons and tons of really cool 3D games in Java…

    Getting sick and tired of all frameworks, toolkits and APIs for developing ”state-of-the-art” AJAX-enabled, enterprise applications using *insert name of framework here*? Having nightmares about JavaScript, OR-mappings and aspects? Have you read the words Spring so many times lately that it left a scar on your retina? Try something completely different; OpenGL development in Java. :)

    There are many tutorials, demos and examples to get started with JOGL and if you prefer books you can find many good ones with a simple search on Amazon (I’m listing a bunch of resource to get you started below). I truly hope that more developers, both from the Java-community and from the gaming-industry, will discover how fantastic JOGL really is. For those of you living in Sweden I recommend visiting jFokus in Stockholm (January 30th) or JavaForum in Gothenburg (Februari 7th) to see my presentation ”JOGL and friends”. So come on everyone! Lets help make Java on the desktop really cool this year!

    Recommended JOGL-related links:

    • JOGL API Project – The main page for JOGL.
    • JOGL Demos – Cool demonstrations and examples in JOGL.
    • Xith 3D – A very nice scene graph and game middleware using JOGL.
    • Javagaming.org – Nice community and forum for Java game developers.
    • Foundations of 3D Graphics Programming: Using JOGL and Java3D – A very nice starter book for those interested in OpenGL development in Java.
    • Practical Java Game Programming – A little outdated by still a very good book on general game development in Java.
    • NeHe OpenGL tutorials – In my opinion, the best tutorial on OpenGL available on the net. The code in the tutorial is in C, but since the method calls in JOGL are basically the same it is still very useful.
    • OpenGL.org – The main site for everything related to OpenGL.
    • Shwup – A very cool P2P application for sharing picture that uses JOGL for rendering.
    • Jake2 – The Java port of Quake 2 from ID Software. Available as a Java Web Start application.
  6. Java + OpenGL = Sant

    Ända sen den dagen då jag började programmera på allvar så har jag varit intresserad av spelprogrammering och 3D-grafik. Tyvär så var de reella lösningar som fanns tillgängliga på den tiden enbart OpenGL och Direct3D. Man var dessutom mer eller mindre begränsad till C/C++.

    Java fick rätt tidigt ett eget alternativ för 3D grafik som heter Java3D. Tyvär så var detta ett ganska begränsat API som lämnade mycket att önska för den stackare som ville göra något seriöst i 3D-väg. Därför var det väldigt trevligt för alla 3D- och spel-programmeringsintresserade Java-kodare när JOGL (Java OpenGL) dök upp på https://jogl.dev.java.net/. Projektet har utvecklats stadigt sen den första releasen (september 2003 enligt projektsidan). API:et har passerat version 1.0 och det finns även en JSR på gång (JSR-231 beta 5).

    Nu tänker alla skeptiker säker något i stil med ”Men det kan ju aldrig bli lika snabbt som i C/C++…”. Tyvär så blir jag tvungen att göra er besvikna. JOGL-projektet har fokuserat på att använda en kombination av Java NIO, JNI och ett verktyg som heter GlueGen för att göra lagret mellan JVM:en och operativsystemets OpenGL-bibliotek så tunnt och snabbt som möjligt. Resultatet är att JOGL i praktiken är lika snabbt som motsvarande OpenGL program i C/C++. Kort sagt, vi har ett Java API för OpenGL som är fullt tillräckligt för att på allvar göra riktiga 3D applikationer.

    Jag har lekt med JOGL till och från sen 2004 ungefär, men aldrig gjort något mer seriöst. Detta tänkte jag nu ändra på genom att här på min jsolutions.se-blogg skriva om mitt projekt (så att ni som läser det kan gnälla på mig när min progress blir för långsam ;). Mitt JOGL-projekt är tänkt att bli ett väldigt enkelt FPS-spel. Så snart jag filat på detaljerna runt det hela så komemr jag presentera mer.

    Så jag uppmanar er att hålla koll på min blogg här och följa mitt lilla hobbyprojekt. Kom gärna med förslag på vad man kan göra och om ni själva är intresserade av att hjälpa till. Bara för att stressa mig själv lite så ska jag försöka ha en första demo klar till november.