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:
- De trianglar vars normal pekar bort från kameran ritas inte
- 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
- 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:
- Allt ska omges av "Object3D{ }"
- Tredimensionella punkt anges på formen "<0,0,0>"
- En triangel anges på formen "Triangle{<50,50,0>,<50,-50,0>,<0,0,80>}" och har tre tredimensionella punkter separerade av komman innanför parenteserna. Ordningen bestämmer normalens riktning, och man byter riktning på normalen genom att byta två punkter mot varandra.
- En triangel kan även ha en färg, som anges genom att skriva "color=
;" som första element innuti "Triangle{ }" (giltiga värden på färgerna är heltal 0-255)
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.