Själva appleten

Information

Detta var min individuella j-uppgift i Datalogi som jag läste på KTH och redovisade år 2000. Det var första gången jag någonsin hållit på med Java.

Hur det fungerar

Rotation av 3D-punkter samt perspektiv-transformationen spelar de viktigaste rollerna för att få se saker tre-dimmensionellt.

Programmet tar reda på tre saker om de trianglar som ska ritas:

  1. De trianglar vars normal pekar bort från kameran ritas inte
  2. Alla resterande trianglar ritas, och de längst från kameran ritas först så att trianglar närmare kameran kan skymma dom. Notera att denna metod inte fungerar bra för objekt med få eller stora trianglar
  3. Skuggning av trianglar bestäms av vinkeln mellan kamerans titt-riktning och normalen för triangeln. Trianglar vinklade mer ifrån kameran ritas ut mörkare.

Filformat

Notera att appleten saknar rättigheter att läsa filer på DIN dator om inte du har oförsiktiga inställningar för din Browser/JRE/appletviewer. Däremot kan innehållet från filer valfria texter/filer kopieras och klistras in i textrutan. Några exempel för att begripa formatet finns nedan:

Syntaxen som beskriver objekt är enkel, och om den inte framgår av exemplen nedan så är detta grund-dragen:

Orienteringsskärm

// Orienteringsskärm
Object3D {
Triangle { color=<255,255,255>; <-50,-50,50>,<-50,50,50>,<50,-50,50>}
Triangle { color=<255,200,100>; <-50,50,50>,<50,-50,50>,<50,50,50>}
Triangle { color=<255,200,100>; <50,-50,50>,<50,50,50>,<50,50,-50>}
Triangle { color=<255,255,255>; <50,-50,50>,<50,50,-50>,<50,-50,-50>}
Triangle { color=<255,255,255>; <50,50,-50>,<50,-50,-50>,<-50,-50,-50>}
Triangle{ color=<255,255,0>; <-50,-50,-50>,<50,50,-50>,<-50,50,-50>}
Triangle{ color=<255,255,0>; <-50,-50,-50>,<-50,50,50>,<-50,50,-50>}
Triangle{ color=<255,255,255>;<-50,-50,-50>,<-50,50,50>,<-50,-50,50>}
}

En pyramid

// En pyramid

Object3D{

// Bottenytan
//Triangle{<50,50,0>,<50,-50,0>,<-50,50,0>}
//Triangle{<-50,-50,0>,<-50,50,0>,<50,-50,0>}

// De fyra sidorna
Triangle{<50,50,0>,<50,-50,0>,<0,0,80>}
Triangle{<-50,50,0>,<50,50,0>,<0,0,80>}
Triangle{<-50,-50,0>,<-50,50,0>,<0,0,80>}
Triangle{<-50,-50,0>,<50,-50,0>,<0,0,80>}
}

Komplex kub

// Lite komplex kub
Object3D {
Triangle { color=<255,255,255>; <-50,-50,50>,<-50,50,50>,<50,-50,50>}
Triangle { color=<255,200,100>; <-50,50,50>,<50,-50,50>,<50,50,50>}
Triangle { color=<255,200,100>; <50,-50,50>,<50,50,50>,<50,50,-50>}
Triangle { color=<255,255,255>; <50,-50,50>,<50,50,-50>,<50,-50,-50>}
Triangle { color=<255,255,255>; <50,50,-50>,<50,-50,-50>,<-50,-50,-50>}
Triangle{ color=<255,255,0>; <-50,-50,-50>,<50,50,-50>,<-50,50,-50>}
Triangle{ color=<255,255,0>; <-50,-50,-50>,<-50,50,50>,<-50,50,-50>}
Triangle{ color=<255,255,255>;<-50,-50,-50>,<-50,50,50>,<-50,-50,50>}

Triangle{ color=<0,128,255>;<-50,-50,-50>,<-50,-50,50>,<50,-50,-50>}
Triangle{ color=<128,255,255>;<-50,-50,50>,<50,-50,-50>,<50,-50,50>}

Triangle{ color=<0,128,255>;<-50,50,-50>,<-50,50,50>,<50,50,-50>}
Triangle{ color=<128,255,255>;<-50,50,50>,<50,50,-50>,<50,50,50>}
}

Källkod och dokumentation

Källkoden och javadoc-dokumentationen finns som zip-fil.