Author Topic: Einfaches Beispiel?  (Read 11366 times)

Max

  • Guest
Einfaches Beispiel?
« on: March 02, 2005, 02:17:39 pm »
Ich will ein Objekt dynamisch erzeugen (eine art band), ohne textur, shading etc. einfach nur blaues objekt auf weissem hintergund... wenn ich mir jetzt die beispiele anschaue, die ja weitaus komplizierteres machen versth ich jetzt nicht soo viel... gibt's keine simpleren beispiele...?

vor allem fuer applets... ich hab bis jetzt noch kein beispiel dafuer gesehen.

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Einfaches Beispiel?
« Reply #1 on: March 02, 2005, 11:19:41 pm »
Für Applets ist es nicht anders, als für Applikationen, wenn man von den naturgegebenen Unterschieden einmal absieht. Es gab mal ein Applet-Beispiel, aber in 0.97 ist es rausgeflogen. Die Version 0.96 mit dem Beispiel gibt es noch hier drin: http://www.jpct.net/download/
Aber nimm davon nur das Beispiel, nicht die API selber..0.96 ist uralt. Ob das Beispiel noch mit 1.05 compiliert weiß ich nicht genau, aber wenn nicht, dann sollte nicht viel zu ändern sein.
Um ein einfaches Object zu erzeugen, musst du einfach ein Object3D mit der gewünschten Polygonanzahl erzeugen und mit addTriangle(...) deine Dreiecke hinzufügen. Hier ein Beispiel für einen Ring:

Code: [Select]
private static Object3D buildRing(float maxSize, float minSize, float texSize) {
      final float rot=2*0.19634954084936207740391521145497f;

      Object3D obj=new Object3D(16*2);
      float div=Math.abs(maxSize)*2;

      SimpleVector s1=new SimpleVector(-maxSize, 0, 0);
      SimpleVector s2=new SimpleVector(-minSize, 0, 0);
      SimpleVector st=new SimpleVector(-texSize, 0, 0);
      SimpleVector e1=null;
      SimpleVector e2=null;
      SimpleVector et=null;

      int i=0;
      while (i<16) {
         i++;
         e1=new SimpleVector(s1);
         e2=new SimpleVector(s2);
         et=new SimpleVector(st);

         e1.rotateY(rot);
         e2.rotateY(rot);
         et.rotateY(rot);

         if (i==16) {
            e1=new SimpleVector(-maxSize, 0, 0);
            e2=new SimpleVector(-minSize, 0, 0);
            et=new SimpleVector(-texSize, 0, 0);
         }

         float us1=s1.x/div+0.5f;
         float vs1=s1.z/div+0.5f;
         float us2=st.x/div+0.5f;
         float vs2=st.z/div+0.5f;

         float ue1=e1.x/div+0.5f;
         float ve1=e1.z/div+0.5f;
         float ue2=et.x/div+0.5f;
         float ve2=et.z/div+0.5f;

         obj.addTriangle(s1, us1, vs1, e1, ue1, ve1, s2, us2, vs2);
         obj.addTriangle(e1, ue1, ve1, e2, ue2, ve2, s2, us2, vs2);

         s1=e1;
         s2=e2;
         st=et;
      }
      return obj;
   }


Für ein Band ist es noch eine ganze Ecke einfacher.

Offline Max

  • byte
  • *
  • Posts: 1
    • View Profile
Einfaches Beispiel?
« Reply #2 on: March 03, 2005, 10:41:04 pm »
Vielen Dank, werd's mir morgen anschauen, wenn ich wieder Zeit hab;-)

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #3 on: March 12, 2011, 11:47:42 am »
Ich hab das Bsp getestet und bei mir kam das raus:
Code: [Select]
Loading Texture...box.jpg
[ Sat Mar 12 11:44:24 CET 2011 ] - ERROR: File 'box.jpg' not found - replacement texture used instead!
Java version is: 1.6.0_24
-> support for BufferedImage
Version helper for 1.5+ initialized!
-> using BufferedImage
Software renderer (OpenGL mode) initialized
Using LWJGL's AWTGLCanvas
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/opengl/AWTGLCanvas
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.threed.jpct.AWTGLRenderer.init(Unknown Source)
at com.threed.jpct.FrameBuffer.enableRenderer(Unknown Source)
at com.threed.jpct.FrameBuffer.enableGLCanvasRenderer(Unknown Source)
at klassen.HelloWorldAWTGL.loop(HelloWorldAWTGL.java:47)
at klassen.HelloWorldAWTGL.main(HelloWorldAWTGL.java:20)
Caused by: java.lang.ClassNotFoundException: org.lwjgl.opengl.AWTGLCanvas
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more

Was hab ich jetzt schon wieder verbockt?

mfg
Empire

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Einfaches Beispiel?
« Reply #4 on: March 12, 2011, 08:43:33 pm »
Du hast vergessen, die jars von lwjgl einzubinden. Zusätzlich musst du auch noch die nativen Teile davon, also dlls für Windows, sos für Linux...einbinden. Wie das geht, steht so grob auch im Wiki. Sollte sich hier im Forum aber auch irgendwo finden lassen.

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #5 on: March 12, 2011, 09:12:18 pm »
DANKE DU BIST GENIAL!!!!
(Am einbinden bin ich bei C/C++ gescheitert^^)

mfg
Empire

PS: Sag mal wackelt das Teil leicht hin und her, oder
warum werd ich Seekrank?

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Einfaches Beispiel?
« Reply #6 on: March 12, 2011, 10:09:38 pm »
Nee, wackelt nicht. Liegt vielleicht an den Texturen, die sind nicht fest drauf gepappt, sondern werden als Envirionment Map gerendert.

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #7 on: March 12, 2011, 10:12:54 pm »
Kann ich eigendlich auch einfach eine farbe staat einem Image
als Textur angeben? zb für ein Dreieck.

mfg
Empire

EDIT:
Ich glaub ich hab da schaon was gelesen ich find es blos nicht mehr

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Einfaches Beispiel?
« Reply #8 on: March 12, 2011, 10:25:33 pm »
Du kannst einfach eine einfarbige Textur erzeugen. Dazu gibt entsprechende Konstruktoren für Texture.

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #9 on: March 12, 2011, 10:38:27 pm »
Muss ich mir in Paint ein rotes Image erstelen oder gibt es eine
Funktion der ich sagen kann zB: 125 125 255 bzw 7D7DFF?

EDIT: Das ist ja ne hässlich Farbe^^
« Last Edit: March 12, 2011, 10:40:42 pm by Empire »

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Einfaches Beispiel?
« Reply #10 on: March 12, 2011, 11:03:37 pm »

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #11 on: March 13, 2011, 09:32:57 am »
Sorry völlig verpeilt. Ich hab Konstruckte als
Programme gelesen und war etwas verwirrt.
 :-[

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #12 on: March 13, 2011, 01:38:34 pm »
Ich hab jetzt etwas mit dem Bsp rumgespielt und bin auf ein paar
Probleme gestosen:
1. Wenn ich versuch dem 3DObjekt ein Dreieck zu zufügen bevor
   der Würfel erstellt wird stürzt das Prog ab.
2. Wenn ich mehr wie ein Dreieck zu einem 3DObjekt dazufüge
   stürzt das prog ab.

Kann mir das jemand erklären?

mfg
Empire

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Einfaches Beispiel?
« Reply #13 on: March 13, 2011, 05:52:21 pm »
Stacktrace? Fehlermeldung?

Offline Empire

  • byte
  • *
  • Posts: 30
    • View Profile
Re: Einfaches Beispiel?
« Reply #14 on: March 14, 2011, 05:39:46 pm »
Manchmal frag ich mich warum ich mir die mühe mache mein hirn
mit mir rumzuschleppen :(

Fehlermeldung zu 1.
Code: [Select]
Exception in thread "main" java.lang.NullPointerException
at klassen.MainKlasse.createJäger(MainKlasse.java:74)
at klassen.MainKlasse.<init>(MainKlasse.java:36)
at klassen.MainKlasse.main(MainKlasse.java:20)
Der Entsprechende Code(letzte Zeile ist Zeile 74)
Code: [Select]
SimpleVector vec1 = new SimpleVector(-1f, -1f, -7f);
SimpleVector vec2 = new SimpleVector(1f, -1f, -7f);
SimpleVector vec3 = new SimpleVector(-1f, 1f, -7f);
box.addTriangle(vec1, 0,0, vec2, 0,0, vec3, 0,0);

Fehlermeldung zu 2.
Code: [Select]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 17
at com.threed.jpct.Object3D.addTriangle(Unknown Source)
at com.threed.jpct.Object3D.addTriangle(Unknown Source)
at com.threed.jpct.Object3D.addTriangle(Unknown Source)
at com.threed.jpct.Object3D.addTriangle(Unknown Source)
at com.threed.jpct.Object3D.addTriangle(Unknown Source)
at klassen.MainKlasse.createJäger(MainKlasse.java:79)
at klassen.MainKlasse.<init>(MainKlasse.java:36)
at klassen.MainKlasse.main(MainKlasse.java:20)
und der Code(unterste Zeile ist die Zeile 79)
Code: [Select]
vec1 = new SimpleVector(-1f, -3f, -5f);
vec2 = new SimpleVector(-1f, -1f, -5f);
vec3 = new SimpleVector(-3f, -1f, -5f);
box.addTriangle(vec1, 0,0, vec2, 0,0, vec3, 0,0);

mfg
Empire