[JAVA3D] Schattenstrich durch die Szene

evilion

Mitglied
Hallo alle miteinander

Ich bin hier neu und suche nach eurer Hilfe.

Mein Problem ist das:
line.jpg


Eine Linie, welche nicht da sein soll und wie die umgekehrte Schattierung aussieht, verläuft von der oberen linken Ecke über den Mittelpunkt in die untere rechte Ecke.

Wenn ich das Licht drehe, dann passiert folgendes:
line2.jpg


Mein Code zum erstellen von dem ganzen poste ich auch hier hier. Alle Einstellungen für die Szene und die Erscheinung werden da gesetzt.

Java:
   public Land(boolean start)
   {
      //Die Minimap wird aufgerufen
      //Minimap canvas = new Minimap();
      
      /*double xMin = 624376;
      double xMax = 628748;
      double yMax = 257996;
      double yMin = 257124;*/

      //abstand muss grösser als 900 sein
      double xMin = 622500;
      double xMax = 623500;
      double yMax = 259000;
      double yMin = 258000;

      //Für die Koordinaten, die aus der Minimap kommen würden
      /*int absoluteXBotLeftCorner = 590000;
      int absoluteYBotLeftCorner = 240000;
      int absoluteXBotRightCorner = 640000;
      int absoluteYTopLeftCorner = 275000;

      int minX = (absoluteXBotLeftCorner + ((int) (canvas.rect.getX() + 25) * (absoluteXBotRightCorner - absoluteXBotLeftCorner) / 326)) - 450;
      int maxX = (absoluteXBotLeftCorner + ((int) (canvas.rect.getX() + 25) * (absoluteXBotRightCorner - absoluteXBotLeftCorner) / 326)) + 450;
      int maxY = (absoluteYBotLeftCorner + ((int) (canvas.rect.getY() + 25) * (absoluteYBotLeftCorner - absoluteYTopLeftCorner) / 326)) - 450;
      int minY = (absoluteYBotLeftCorner + ((int) (canvas.rect.getY() + 25) * (absoluteYBotLeftCorner - absoluteYTopLeftCorner) / 326)) + 450;

      System.out.println(
            "Rectangle X:" + canvas.rect.getX() + " Rectangle Y:" + canvas.rect.getY());*/


      int yMaxup = 0;
      int xMaxup = 0;
      //int ny = 0;

      //Wenn yMax und Ymin / 2 grösser als das Limit ist, also ungerade für Float Zahlen
      if (((yMax + yMin) / 2.0) % STEP > LIMIT) {
         yMax += STEP;
         yMaxup = 1;
      }
      if (((xMax + xMin) / 2.0) % STEP > LIMIT) {
         xMax += STEP;
         xMaxup = 1;
      }
      /*int nx = (int) Math.rint((xMax - xMin) / STEP + 1);
      //Wenn es vorher ungerade war, sollte das
      if (yMaxup == 1) {
         ny = (int) Math.rint((yMax - yMin) / STEP);
      }
      else {
         ny = (int) Math.rint((yMax - yMin) / STEP + 1);
      }*/
      //Wenn es eine Abfrage von der Minimap ist, also kein erster Start
      if (start == false) {
         // grid = getCoord(xMaxup, yMaxup, maxX, maxY, minX, minY);
      }
      //Sonst zeige die Mitte der Karte
      else {
         //coord = getMoarCoord(yMaxup);
         //coord = getMoarCoordGebaeude(yMaxup);
         coord = getCoord(xMaxup, yMaxup, (int) xMax, (int) yMax, (int) xMin,
                          (int) yMin);
         start = false;
      }

      //Geometrie
      GeometryInfo gi = new GeometryInfo(GeometryInfo.QUAD_ARRAY);
      //Länge der Textur
      int texLen = FLOOR_LEN;
      //Texturkoordinaten
      TexCoord2f[] tCoords = createTexCoords(createCoords(), texLen);
      //Setze eine Lage der 2D Textur
      gi.setTextureCoordinateParams(1, 2);
      //Textur fängt bei 0 an und hat die Texturkoordinaten aus tCoords
      gi.setTextureCoordinates(0, tCoords);
      //Setze Geometriekoordinaten
      gi.setCoordinates(createCoords());
      
      //Bilde Streifen, damit die Berechnung schneller wird
      Stripifier sp = new Stripifier();
      sp.stripify(gi);

      System.out.println("GeometryInfo wurde gebaut. Ich mache mit Normalen Generator weiter.");
      //Mache die Normalen
      NormalGenerator ng = new NormalGenerator();
      //Abgerundete Kanten
      ng.setCreaseAngle((float) Math.toRadians(30));
      ng.generateNormals(gi);

      System.out.println("Normalen wurden gebaut. Ich mache mit Appearance weiter.");
      System.out.println("");

      //Erschaffe das Aussehen
      Appearance aper = new Appearance();
      //Und das Material
      Material mat = new Material();
      //Leuchten
      //mat.setShininess(1.0f);
      //Helligkeit
      mat.setDiffuseColor(0.8f, 0.8f, 0.8f);
      //Reflektion
      mat.setSpecularColor(0.0f, 0.0f, 0.0f);
      //Eine Fähigkeit wird gesetzt, damit man es während der Laufzeit ändern kann
      mat.setCapability(Material.ALLOW_COMPONENT_WRITE);
      //Setzte das Material in das Aussehen
      aper.setMaterial(mat);

      //Lade das Bild von dem Kartenausschnitt
      BufferedImage bufferedImage = null;
      try {
         //File file = new File("125.tif");
         File file = new File("ortho2004_10.tif");
         bufferedImage = ImageIO.read(file);
      }
      catch (IOException e) {
         System.out.println("Sorry boss I cant get any image loaded.");
      }


      int x = 0, y = 0, width = 0, height = 0;

      /* 0: X-Scale - wie viel meter pro pixel
       * 1: Rotation y
       * 2: Roration x
       * 3: Y-Scale - wie viel meter pro pixel (negativ)
       * 4: X-Reference (Top Left Corner Pixel)
       * 5: Y-Reference (Top Left Corner Pixel)
       * */
      double[] tfw = new double[6];

      //Lade den TFW Angaben Datei
      //Und schreibe es in den vorher definierten Array
      try {
         int i = 0;
         // Open the file that is the first
         // command line parameter
         //FileInputStream fstream = new FileInputStream("125.tfw");
         FileInputStream fstream = new FileInputStream("ortho2004_10.tfw");
         // Get the object of DataInputStream
         DataInputStream in = new DataInputStream(fstream);
         BufferedReader br = new BufferedReader(new InputStreamReader(in));
         String strLine;
         //Read File Line By Line
         while ((strLine = br.readLine()) != null) {
            tfw[i] = Double.valueOf(strLine).doubleValue();
            i++;

           //System.out.println(strLine);
         }
         //Close the input stream
         in.close();
      }
      catch (Exception e) {//Catch exception if any
         System.err.println("Error: " + e.getMessage());
      }

      //x der linken oberen ecke
      int xMap = (int) Math.round(tfw[4]);
      //y der linken oberen ecke
      int yMap = (int) Math.round(tfw[5]);
      //wie viel meter pro pixel auf x achse
      double xScale = tfw[0];
      //wie viel meter pro pixel auf y achse (negativ)
      double yScale = -tfw[3];

      //Angaben zu dem Platz, wo sich das auszuschneidende Bild befindet
      //X
      x = (int) ((xTopLeftCorner - xMap) / xScale);
      //Y
      y = (int) ((yMap - yTopLeftCorner) / yScale);
      //Breite
      width = (int) ((xBotRightCorner - xTopLeftCorner) / xScale);
      //Höhe
      height = (int) ((yTopLeftCorner - yBotRightCorner) / yScale);

      //Erstell ein ImageComponent2D aus dem geschnittenem Bild
      ImageComponent2D textImage = new ImageComponent2D(
            ImageComponent2D.FORMAT_RGB,
            cropImage(bufferedImage,
                      x, y, width, height));

      //Erstelle eine einlagige Textur mit RGB Farben und der Breite und Höhe des angegebenen Bildes
      Texture2D texture = new Texture2D(Texture2D.BASE_LEVEL, Texture.RGB,
                                        textImage.getWidth(),
                                        textImage.getHeight());
      //Setzte das geladene Bild als Textur auf den 0te Ebene
      texture.setImage(0, textImage);

      //Wie soll es aussehen, wenn Texel kleiner als Pixel sind
      texture.setMinFilter(Texture.NICEST);
      //Wie soll es aussehen, wenn Texel grösser als Pixel sind
      texture.setMagFilter(Texture.NICEST);
      //aktiviere die Textur
      texture.setEnable(true);

      //Texturenattribute.
      TextureAttributes texatt = new TextureAttributes(
            //Es vermischt das Licht mit den Farben der Textur
            TextureAttributes.MODULATE,
            //Textur kann gedreht und Skalliert werden
            new Transform3D(),
            //Rot, Grün, Blau, Alpha - Volle Helligkeit und Sichtbar
            new Color4f(1.0f,1.0f,1.0f,1.0f),
            //Es soll schön gemacht werden
            TextureAttributes.NICEST);
      //Setze sie Attribute ins Aussehen
      aper.setTextureAttributes(texatt);
      //Setze die Textur ins Aussehen
      aper.setTexture(texture);
      //Mache so, dass man das Material veraendern kann
      aper.setCapability(Appearance.ALLOW_MATERIAL_WRITE);
      //Setze die Geometrie
      this.setGeometry(gi.getGeometryArray());
      //Setze das Aussehen
      this.setAppearance(aper);
   }// end of Land()

Ich hoffe mir kann jemand helfen und dieser Thread wird nicht ignoriert, weil keiner ne Ahnung hat... so wie in einem anderen Forum...
 

Marco13

Top Contributor
Ich weiß zwar keine Antwort und habe keine Ahnung, aber ich wollte diesen Thread auch nicht ignorieren.

Also: Dein Thread wurde zur Kenntnis genommen :)

:joke:

Mal im Ernst: Ich bin nicht (mehr?) so fit im Java3D, aber ... meine ersten Ansätze wären, die Sache mit dem Stripifier mal rausnehmen, um zu schauen, ob der Mist macht, und mal die Normalen von hand zu generieren (notfalls alle einfach (0,0,1) setzen). Wenn der Fehler dann nicht mehr auftritt, KÖNNTE es sein, dass der NormalGenerator irgendwie ins Stolpern kommt...
 

evilion

Mitglied
woah, du bist gut!

Der Stripifier war das Problem. Ohne den gibts keinen Streifen. Und ohne den gibts einen Tick schlechtere Schatten an den Abhängen. Aber das merkt man nicht, da die es heisst, dass die Schatten nicht realistisch sind.

Ist der Stripifier sehr wichtig? Den einzigen Nutzen, den ich bis jetzt gelesen hab, das die Berechnung schneller erfolgt aber die ist genau so schnell ohne den...

Danke Marco13
 

Marco13

Top Contributor
Wie gesagt, bin ein bißchen raus. Wilde Spekulationen, was genau der Stripifier macht, und wo da welche Indizes durcheinandergewürfelt werden, dass dann die Normalen nicht mehr stimmen, erspare ich uns jetzt mal. Aber wenn er ihnehin keinen Geschwindigkeitsvorteil bringt, kann man ihn auch weglassen. (Naja, eine halb-Spekulation: I.a. gilt es als "schneller", wenn man Dreiecke in OpenGL als GL_TRIANGLE_STIP zeichnet, und nicht als GL_TRIANGLES oder so... vermutlicht macht der Stripifier etwas in der Richtung, aber wie groß heutzutage der Geschwindgkeitsvorteil da wirklich ist, kann ich nicht sagen...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Java3d in Eclipse einbinden Spiele- und Multimedia-Programmierung 4
Neumi5694 Java3D Viewer Beschriftung Spiele- und Multimedia-Programmierung 1
C Java3D Transformieren von obj. Datein Spiele- und Multimedia-Programmierung 0
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
Ruvok Java3D Tutorial gesucht Spiele- und Multimedia-Programmierung 5
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
R Java3d ViewingPlatform erst Verschieben und dann RotationsInterpolator Spiele- und Multimedia-Programmierung 0
D Java3D - Blickfeld Spiele- und Multimedia-Programmierung 1
P Java3D Box Dimensionen und Positionierung Spiele- und Multimedia-Programmierung 1
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
J Java3D - Farben vermischen sich Spiele- und Multimedia-Programmierung 7
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
S Java3D oder JMonkey? Spiele- und Multimedia-Programmierung 17
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] lookAt Mausposition Spiele- und Multimedia-Programmierung 17
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
D Java3D Installation: package javax.media.j3d not found Spiele- und Multimedia-Programmierung 5
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
W Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein Spiele- und Multimedia-Programmierung 9
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
W Java3D: Eckkoordinaten einer Box herausfinden Spiele- und Multimedia-Programmierung 18
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
T Java3D: Nur die Kanten des Würfels rendern? Spiele- und Multimedia-Programmierung 4
W Java3D setBounds(BoundingBox) Spiele- und Multimedia-Programmierung 6
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
Bastie JAVA3D - WRL Transform Spiele- und Multimedia-Programmierung 9
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
T Java3D - Lichtquelle einbauen Spiele- und Multimedia-Programmierung 7
jemandzehage java3d parallel und perspective view Spiele- und Multimedia-Programmierung 5
H Cinema 4D in Java3D importieren Spiele- und Multimedia-Programmierung 2
1 [Java3D] komplexes Projekt? Spiele- und Multimedia-Programmierung 10
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
C Java3D Lichtquelle beim Beobachter Spiele- und Multimedia-Programmierung 2
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
aze Java3D: Flächen teilen Spiele- und Multimedia-Programmierung 15
P Java3D Textur verzerrt Spiele- und Multimedia-Programmierung 3
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
aze Java3D: leere Räume füllen Spiele- und Multimedia-Programmierung 2
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
S Einschätzung zu Java3D-Einstieg Spiele- und Multimedia-Programmierung 3
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
W Waterslide mit Java3D Spiele- und Multimedia-Programmierung 11
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
M [Java3D] Rotieren der Scene NICHT des POV Spiele- und Multimedia-Programmierung 4
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
K Java3D Abfängerfrage Spiele- und Multimedia-Programmierung 3
aze Java3D:Farbige Flächen verschwinden lassen(Transparenz- oder Colorinterpolator?)) Spiele- und Multimedia-Programmierung 5
C Java3D PositionInterpolator Spiele- und Multimedia-Programmierung 3
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
E [JAVA3D] Kamerasteuerung Spiele- und Multimedia-Programmierung 3
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
C Java3D SceneGraohPath Spiele- und Multimedia-Programmierung 2
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
G Java3D plattformunabhängig bundeln Spiele- und Multimedia-Programmierung 3
TheKing Java3D-Shooter View Spiele- und Multimedia-Programmierung 2
A Java3D tutorial? Spiele- und Multimedia-Programmierung 3
R Java3D Kollisionserkennung und Schwerkraft Spiele- und Multimedia-Programmierung 17
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
J Java3d Schnelle Geschosse Spiele- und Multimedia-Programmierung 12
D Kann ich mit Java3D 2D Daten als 3D surfaceplot plotten? Spiele- und Multimedia-Programmierung 5
J Java3d setTextureTransform verändert J3DGraphics2D Spiele- und Multimedia-Programmierung 4
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
K Java3D: LineStripArray Spiele- und Multimedia-Programmierung 2
P Java3D - Zylinder genau wie Vektor ausrichten Spiele- und Multimedia-Programmierung 5
Developer_X Java3D Mensch Ärgere Dich nicht. Spiele- und Multimedia-Programmierung 10
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
Developer_X Java3D-Ungeeignet für 3D Spiele wegen Heap Space=? Spiele- und Multimedia-Programmierung 23
Developer_X Java3D Canvas post Renderer und? Spiele- und Multimedia-Programmierung 5
A Java3D Sichtweite Spiele- und Multimedia-Programmierung 2
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
A Java3D: Behavior scheduling bounds Spiele- und Multimedia-Programmierung 3
Developer_X THE BALL (needs Java3D) Spiele- und Multimedia-Programmierung 34
Developer_X Java3D Game_(die erste) Spiele- und Multimedia-Programmierung 2
Developer_X Java3D und while schleifen Spiele- und Multimedia-Programmierung 4
Developer_X Collisionserkennung in Java3D Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Node -> Obj Data Spiele- und Multimedia-Programmierung 2
Developer_X Figuren werden nicht angezeigt (Java3D) Spiele- und Multimedia-Programmierung 5
S PDFRenderer und Java3D Spiele- und Multimedia-Programmierung 2
Developer_X Java3D- der Mausklick auf Nodes Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Point Sound Spiele- und Multimedia-Programmierung 71
Developer_X Lines in Java3D Spiele- und Multimedia-Programmierung 4
V Java3D: HUD erstellen Spiele- und Multimedia-Programmierung 2
V Java3D: scheinende Sonne Spiele- und Multimedia-Programmierung 4
V Java3D: Ringe für Saturn erstellen Spiele- und Multimedia-Programmierung 8
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
V Java3D: mehrere ViewingPlaforms in Sonnensystem Spiele- und Multimedia-Programmierung 8
Developer_X Thread in Java3D Spiele- und Multimedia-Programmierung 8
B Java3D .obj dateien Spiele- und Multimedia-Programmierung 2
Developer_X Java3D's next TopModel Spiele- und Multimedia-Programmierung 16

Ähnliche Java Themen

Neue Themen


Oben