Arbeta med Javas 3-D klasser innebär att man definierar ett objekts geometri som beskriver dess form och definierar sitt utseende . Ett sätt att påverka ett objekts utseende är genom att fästa en befintlig bild till det . Detta tillvägagångssätt , som kallas bitmapp texturering , gör det möjligt att skapa mycket komplexa och realistiska letar objekt från några bilder appliceras på enkel geometri . Till exempel genom att tillämpa ett foto av gräs till en terrängmodell kan du skapa illusionen av en plysch äng
Du behöver : .
Java Software Development Kit .
Java 3- D programgränssnitt .
1 .
Öppna en textredigerare eller ordbehandlare och klistra in i ett nytt dokument med Java-programmet i slutet av detta steg .
Programmet konstruerar bilden ( som alla Java 3- D program gör ) genom att konstruera en " scen graf , "som du kan visualisera på papper som en enkel träd-liknande struktur med förälder och barn objekt . Den översta förälder i en scen är BranchGroup objektet , enligt vilka programmet fäster ( genom parentOfScene . addChild funktionsanrop ) geometri en enkel modell , ett plan . Den ApplyImageToModelProgram funktion skapar komponenter till kompletta 3-D- scen , inklusive duk , ( klass " Canvas3D " ) , universum ( klassen " SimpleUniverse " ) och betraktarens position ( klass " ViewingPlatform " ) .
programkoden under kommentaren " Lägg till bilden i modellen " skapar en " Utseende " objekt , som gäller en bildfil till modellen .
import java. applet. Applet ;
import java . awt. BorderLayout ;
import java. awt. GraphicsConfiguration ;
import com. sun. j3d. utils. geometry . * ;
import com . sun. j3d. utils. applet. MainFrame ;
import com. sun. j3d. utils. universe . * ;
import com. sun. j3d. utils. image . TextureLoader ;
import javax. media. j3d . * ;
import javax. vecmath . * ;
public class ApplyImageToModelProgram utökar Applet {
privat static final Point3d USERPOSITION=new Point3d ( 5,2,7 ) ,
BranchGroup makeTheScene ( ) {
BranchGroup parentOfScene=new BranchGroup () ;
QuadArray simpleModel=new QuadArray (4 , GeometryArray . KOORDINATER
| GeometryArray. TEXTURE_COORDINATE_2 ) ;
Point3f vertex=new Point3f (-3. 0f , 3. 0f , 0. 0f ) ;
simpleModel . setCoordinate (0 , vertex ) ,
vertex. set (-3. 0f , 3. 0f-, 0. 0f ) ;
simpleModel. setCoordinate (1 , vertex ) ,
vertex. set ( 3. 0f , 3. 0f-, 0. 0f ) ;
simpleModel. setCoordinate (2 , vertex ) ,
vertex. set ( 3. 0f , 3. 0f , 0. 0f ) ;
simpleModel. setCoordinate (3 , vertex ) ,
TexCoord2f texturePoint=new TexCoord2f ( 0 . 0f , 1. 0f ) ;
simpleModel. setTextureCoordinate ( 0 , 0 , texturePoint ) ,
texturePoint. set ( 0. 0f , 0. 0f ) ;
simpleModel. setTextureCoordinate (0, 1 , texturePoint ) ,
texturePoint. set ( 1. 0f , 0. 0f ) ;
simpleModel. setTextureCoordinate ( 0 , 2 , texturePoint ) ;
texturePoint. set ( 1. 0f , 1. 0f ) ;
simpleModel. setTextureCoordinate (0 , 3 , texturePoint ) ,
//Lägg till bilden till modell
Utseende objectsAppearance=nytt utseende () ;
String textureFilename=" someImage . gif " ;
TextureLoader ImageLoader=new TextureLoader ( textureFilename , null ) ;
ImageComponent2D the_image=imageloader. getImage () ;
om ( the_image == null ) {
System. out. println ( " Bilden belastning misslyckades . ");
}
Texture2D objectsTexture=new Texture2D ( Texture. BASE_LEVEL , Texture. RGBA ,
the_image. getWidth ( ) , the_image. getHeight ());
objectsTexture. setImage ( 0 , the_image ) ,
objectsAppearance . setTexture ( objectsTexture ) ,
objectsAppearance. setTransparencyAttributes (
nya TransparencyAttributes ( TransparencyAttributes. FASTEST , 0,1 f )) ;
//Skapa själva modellen
Shape3D planeObj=new Shape3D ( simpleModel , objectsAppearance ) ,
parentOfScene. addChild ( planeObj ) ;
återvända parentOfScene ;
}
offentliga ApplyImageToModelProgram () {
setLayout ( ny BorderLayout ());
GraphicsConfiguration gfxConfig=
SimpleUniverse . getPreferredConfiguration () ;
Canvas3D theCanvas=new Canvas3D ( gfxConfig ) ,
add ( "Center " , theCanvas ) ;
theCanvas. setStereoEnable ( false ) ;
SimpleUniverse universum=new SimpleUniverse ( theCanvas ) ,
//flytta synvinkel
ViewingPlatform viewPlatform=universe. getViewingPlatform () ;
TransformGroup viewPlatTransGroup=viewPlatform. getViewPlatformTransform () ;
Transform3D camTform=new Transform3D () ;
viewPlatTransGroup . getTransform ( camTform ) ,
camTform. lookAt ( USERPOSITION , nya Point3d (0,0,0 ) , nya Vector3D (0,1,0 ) ) ;
camTform . invertsocker () ;
viewPlatTransGroup. setTransform ( camTform ) ,
universe. addBranchGraph ( makeTheScene ());
}
public static void main ( String argv [] )
{
nya Mainframe ( ny ApplyImageToModelProgram ( ) , 256 , 256 ) .
}
}
2
Gör en GIF- bild vars mått är en effekt av två med hjälp av ett bildbehandlingsprogram programmet . Till exempel , 8 från 8 ( två till den tredje makten ) , 16 av 16 ( två upphöjt till fyra ) , 256 genom 256, ( två till åttonde makten ) . Spara bilden som " someimage. gif " i samma mapp som din java -filen .
3 .
Spara filen som " ApplyImageToModelProgram. java , " med filtypen inställd på " Plain text , att " se till att kompilatorn kan läsa programkoden .
4 .
Klistra in följande HTML-dokument ( som behövs för att köra programmet ) till ett nytt textdokument . Spara dokumentet med namnet " ApplyImageToModelProgram . html , "i samma mapp som java källfilen .
kodbasen=" . "width=500 height=500 >
5 .
Öppna en DOS-prompt i mappen som innehåller java -filen som du sparade i steg 2 . Kompilera programmet med " javac ApplyImageToModelProgra. java . "
6 .
Kör
programmet med följande kommando:
appletviewer ApplyImageToModelProgram . HTML
appletviewer program kommer att visa modellen med bilden från den " someImage. gif " fil .