G
GlochFile
Gast
Hallo.Ich hab grad irgendwie ein Brett vor'm Kopf,
ich beschäftige mich seit einer Weile mit Java3D
und bin grad bei der Terraingenerierung mit QuadArrays.
Eine 2-Dimensionale Map m*n durch die ich lauf,und
3 Eckpunkte(pt0,pt1,pt3) von den QuadArrays daneben übernehm und den 4.Eckpunkt(pt2)
zufällig bestimme.Das klappt eig. ohne Probleme.
Ich speicher grad noch die höhenpositionen der Eckpunkte in einem anderen Array,
anstatt das mit Picking zu machen,weil ich mich mit Picking auch noch nicht so gut auskenn!
Ich kann auch gern noch mehr vom code posten,wenns hilft!!!
Allerdings hab ich gemerkt,wenn ich jetzt eine Appearance und Textur draufknall,
ist zwar die Textur auf jedem QuadArray zu sehen,aber Licht reflektieren sie überhaupt nicht...
Weiß jemand woran das vielleicht liegt?
ich beschäftige mich seit einer Weile mit Java3D
und bin grad bei der Terraingenerierung mit QuadArrays.
Eine 2-Dimensionale Map m*n durch die ich lauf,und
3 Eckpunkte(pt0,pt1,pt3) von den QuadArrays daneben übernehm und den 4.Eckpunkt(pt2)
zufällig bestimme.Das klappt eig. ohne Probleme.
Ich speicher grad noch die höhenpositionen der Eckpunkte in einem anderen Array,
anstatt das mit Picking zu machen,weil ich mich mit Picking auch noch nicht so gut auskenn!
Ich kann auch gern noch mehr vom code posten,wenns hilft!!!
Allerdings hab ich gemerkt,wenn ich jetzt eine Appearance und Textur draufknall,
ist zwar die Textur auf jedem QuadArray zu sehen,aber Licht reflektieren sie überhaupt nicht...
Weiß jemand woran das vielleicht liegt?
Java:
Random r = new Random();
QuadArray[][] polygon = new QuadArray[5][5]; //Eine quadratische 2-Dimensionale Map
//Die aus QuadArrays besteht
float[][][] pos = new float[5][5][4];
float pt0,pt1,pt2,pt3;
float heightQuad=2.0f;
float widthQuad=2.0f;
float xposTerrain=-((polygon[0].length*widthQuad)/2);
float yposTerrain=-((polygon.length*heightQuad)/2);
...
//In der Methode createSceneGraph() die vom Konstruktor aufgerufen wird:
*** Appearance ***
Color3f ambientColour = new Color3f(0.3f,0.3f,0.0f);
Color3f emissiveColour = new Color3f(0.5f,0.5f,0.0f);
Color3f diffuseColour = new Color3f(0.7f,0.7f,0.0f);
Color3f specularColour = new Color3f(0.9f,0.9f,0.0f);
Appearance app = new Appearance();
app.setMaterial(new Material(ambientColour,emissiveColour,
diffuseColour,specularColour,20.0f));
app.setTexture((new TextureLoader("leaves.jpg",null)).getTexture());
app.setTexCoordGeneration(new TexCoordGeneration
(TexCoordGeneration.OBJECT_LINEAR,TexCoordGeneration.TEXTURE_COORDINATE_3));
app.setTextureAttributes(new TextureAttributes
(TextureAttributes.MODULATE,new Transform3D(),new Color4f(),TextureAttributes.NICEST));
app.setPolygonAttributes(new PolygonAttributes
(PolygonAttributes.POLYGON_FILL,PolygonAttributes.CULL_BACK,0));
ColoringAttributes ca = new ColoringAttributes();
ca.setShadeModel(ca.SHADE_FLAT);
app.setColoringAttributes(ca);
*** Objekte ***
for(int m=0;m<polygon[0].length;m++){
for(int n=0;n<polygon.length;n++){
try{
pt0=pos[n][m-1][1];
pt1=pos[n-1][m][2];
pt2=r.nextFloat()*1.3f;
pt3=pos[n][m-1][2];
}catch(Exception e){}
pos[n][m][0] = pt0; //Speicher die Positionen des aktuellen Quads im Array
pos[n][m][1] = pt1;
pos[n][m][2] = pt2;
pos[n][m][3] = pt3;
polygon[n][m] = new QuadArray (4, QuadArray.COORDINATES | QuadArray.NORMALS);
polygon[n][m].setCoordinate(0, new Point3f (xposTerrain+(m*widthQuad), yposTerrain+(n*heightQuad), pos[n][m][0])); //Die Stellen wo sie anliegen,sollen sie
polygon[n][m].setCoordinate(1, new Point3f (xposTerrain+(m*widthQuad)+widthQuad, yposTerrain+(n*heightQuad), pos[n][m][1])); //von den anderen übernehmen!
polygon[n][m].setCoordinate(2, new Point3f (xposTerrain+(m*widthQuad)+widthQuad,yposTerrain+(n*heightQuad)+heightQuad, pos[n][m][2]));
polygon[n][m].setCoordinate(3, new Point3f (xposTerrain+(m*widthQuad), yposTerrain+(n*heightQuad)+heightQuad, pos[n][m][3]));
theScene.addChild(new Shape3D(polygon[n][m],app));
...
//Die Methode wird auch im Konstruktor aufgerufen um Licht zu erzeugen
public void addLight(SimpleUniverse su)
{
BranchGroup bgLight = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 1000.0);
PointLight light1=new PointLight(new Color3f(0f,8f,0f),new Point3f
(-1.0f,0.3f,3.6f),new Point3f(0.0f,0.0f,0.0f));
light1.setInfluencingBounds(bounds);
bgLight.addChild(light1);
su.addBranchGraph(bgLight);
}