Main Menu

Einfaches Beispiel?

Started by Max, March 02, 2005, 02:17:39 PM

Previous topic - Next topic

Max

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.

EgonOlsen

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:

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.

Max

Vielen Dank, werd's mir morgen anschauen, wenn ich wieder Zeit hab;-)

Empire

Ich hab das Bsp getestet und bei mir kam das raus:
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

EgonOlsen

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.

Empire

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?

EgonOlsen

Nee, wackelt nicht. Liegt vielleicht an den Texturen, die sind nicht fest drauf gepappt, sondern werden als Envirionment Map gerendert.

Empire

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

EgonOlsen

Du kannst einfach eine einfarbige Textur erzeugen. Dazu gibt entsprechende Konstruktoren für Texture.

Empire

#9
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^^

EgonOlsen


Empire

Sorry völlig verpeilt. Ich hab Konstruckte als
Programme gelesen und war etwas verwirrt.
:-[

Empire

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

EgonOlsen

Stacktrace? Fehlermeldung?

Empire

Manchmal frag ich mich warum ich mir die mühe mache mein hirn
mit mir rumzuschleppen :(

Fehlermeldung zu 1.
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)
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.
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)
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