Tanpohp

3D

Bachelorarbeit

by on Mar.23, 2010, under 3D, Computer Graphics, shader

Nun habe ich schon mehrfach Inhalte geschrieben, welche ich in meiner Bachelorarbeit verarbeitet/genutzt habe. Langsam ist es damit an der Zeit, diese auf zu veröffentlichen. Was nutzt schließlich das darin zusammengetragene Wissen, wenn es niemanden hilft?

Im folgenden also die Bachelorarbeit, welche Sebastian Ohme und ich, David Störmer, zusammen im Sommersemester 2009 bei Dr. Prof. Tramberend an der TFH Berlin (jetzt Beuth Hochschule für Technik)geschrieben haben. Im Stile der Creative Commons wird diese Arbeit veröffentlicht. Nur eine Bedingung wird gestellt: Solltet ihr die Arbeit oder Teile der Arbeit (Bilder) verwenden, möchten wir als Autoren genannt werden. Insbesondere die Erstellung der Bilder, welche wir komplett selbstständig erstellten, hat viel Zeit in Anspruch genommen. Des Weiteren wäre eine Link auf diesen Blog (www.tanphop.de/blog) sehr nett.

Bachelorarbeit zum Thema(PDF, 2MB): Panoramaprojektion – Verzerrungsfreie Darstellung von 360° Panoramen und interaktive Panoramen

Und noch einmal in besserer Auflösung(PDF, 65MB): Panoramaprojektion – Verzerrungsfreie Darstellung von 360° Panoramen und interaktive Panoramen

Comments Off on Bachelorarbeit :, , , , , , more...

HowTo: Anaglyph Shader in XNA

by on Feb.27, 2010, under 3D, Computer Graphics, HowTo, shader

Im Rahmen meiner Bachelorarbeit brauchte ich eine Möglichkeit, in XNA Bilder anaglyph zu kodieren. Ausgangsmaterial waren 2 Bilder, eines für das linke, eines für das rechte Auge. Diese müssen Mithilfe einer SpriteBatch gemalt und durch Verwendung eines Pixelshaders entsprechend kodiert werden. Der verwendete Shader kodiert die Bilder so, das diese mit einer rot-cyan-Brille korrekt betrachtet werden können. Die Kodierung selbst erfolgt durch den Dubois-Algorithmus von Frederic V. Hessmann, welchen ich aus seinem Java-Programm zu Erstellung von Anaglyphbildern adaptiert habe.
Auf der Seite von XNA sieht das Ganze dann wie folgt aus:

Texture2D left = Texture2D.FromFile(graphicsDevice, FilepathLeft);
Texture2D right = Texture2D.FromFile(graphicsDevice, FilepathRight);

spriteBatch.Begin(
   SpriteBlendMode.None,
   SpriteSortMode.Immediate,
   SaveStateMode.SaveState);
{
   effect.Begin();
   {
      effect.CurrentTechnique.Passes[0].Begin();
      effect.Parameters["left"].SetValue(left);
      effect.CommitChanges();
      spriteBatch.Draw(right, new Microsoft.Xna.Framework.Rectangle(
         0, 0, Width, Height), Color.White);
      effect.CurrentTechnique.Passes[0].End();
   }
   effect.End();
}
spriteBatch.End();

Das linke Teilbild wird als Parameter an den Shader übergeben, das rechte Teilbild wird direkt mit der SpriteBatch gemalt.

//Auszug aus dem Shader

float4 PixelShader(float2 uv: TEXCOORD0) : COLOR
{
   float4 l = tex2D(leftSampler, uv);
   float4 r = tex2D(ColorMapSampler, uv);

   float red = 0.456100*l.r + 0.500484*l.g + 0.176381*l.b
             - 0.0434706*r.r - 0.0879388*r.g - 0.00155529*r.b;
   if (red > 1) { red = 1; }   if (red < 0) { red = 0; }

   float green = -0.0400822*l.r - 0.0378246*l.g
                 -0.0157589*l.b + 0.378476*r.r
                 +0.73364*r.g - 0.0184503*r.b;

   if (green > 1) { green = 1; }   if (green < 0) { green = 0; }

   float blue = -0.0152161*l.r - 0.0205971*l.g
                -0.00546856*l.b - 0.0721527*r.r
                -0.112961*r.g + 1.2264*r.b;

   if (blue > 1) { blue = 1; }   if (blue < 0) { blue = 0; }

   return float4(red, green, blue, 1);
}

Als erstes wird der aktuelle Pixel aus de Bildern gesampelt, wobei der linke Sampler ein gewöhnlicher Texturesampler ist und der rechte Sample auf Register s0 (sampler ColorMapSampler : register(s0)) zugreift. Im Anschluss werden die 3 Farbkanäle des Zielpixels nach dem Dubois-Algorithmus berechnet und als zu zeichnender Pixel zurück geliefert.

Der im Folgenden verlinkte AnaglypShader.fx und JPSLoader.cs bauen im Wesentlichen auf diesem Beispiel auf und erweitern dieses noch. Der JPS-Loader ist in der Lage ein JPS-Bild (JPEG-Stereo) zu laden, welches im Grunde eine JPEG-Bild ist, bei dem das linke und rechte Bild nebeneinander in der gleichen Datei liegen. Der JPS-Loader zerschneidet das Bild und liefert so das Ausgangsmaterial für den oben beschriebenen
AnaglypShader.

Comments Off on HowTo: Anaglyph Shader in XNA :, , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...