Wie kriege ich das mit den Texturen nur hin?

Status
Nicht offen für weitere Antworten.

magma

Mitglied
Ich versuche verzweifelt eine Texture auf ein Objekt zu bekommen.
Ich habe mir das Tutorial von http://www.jogl.info/ durchgelesen und die Programme auch laufen lassen was auch bis zur Lektion 4 funktioniert.
Ich musste allerdings einiges am Quellcode ändern damit das Programm läuft.

Was ich geändert habe bei Lektion 4.

In der Klasse Beispielszene

Ich nehme import net.java.games.jogl.*; raus dafür import javax.media.opengl.*; rein.

Ich bekomme bei
GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(glcaps);
die Fehlermeldung createGLCanvas is undifiend for the type GLDrawableFactory

deshalb ersetze ich es durch
GLCanvas canvas = canvas = new GLCanvas();

In der Klasse BeispielszeneView

Ich ersetze wieder
import net.java.games.jogl.*;
und füge noch
import javax.media.opengl.glu.*;
ein.

Ich bekomme die Fehlermeödung
The type BeispielszeneView must implement the inherited abstract method
GLEventListener.init(GLAutoDrawable)
Ich ersetze also
GLDrawable durch GLAutoDrawable

Als nächstes ersetze ich
GLU glu = arg0.getGLU(); durch GLU glu = new GLU();


Bei
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_pos);
bekomme ich die Fehlermeldung
The method glLightfv(int, int, float[], int)in the type GL is not applicable for
arguments (int, int, float)

Ich füge einen int wert hinzu
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, light_color_am, 0);

Bei
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient);
das selbe.

Ich ersetze durch
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient, 0);

Dann erst laeuft das Programm.


Bei Lektion 5 ist es das selbe.

Ich füge erst einmal
import javax.media.opengl.*;
import javax.media.opengl.glu.*;
ein.

Dann bekomme ich bei
dest = ByteBuffer.allocateDirect(data.length * BufferUtils.SIZEOF_INT);
die Fehlermeldung
BufferUtils canot be resolved
Ich ändere in
BufferUtil
und füge
import com.sun.opengl.util.BufferUtil;
ein.

Die nächste Fehlermeldung bei
gl.glGenTextures(1, tmp);
lautet
The method glGenTextures(int, in[], int) in the type GL is not applicable for the arguments (int, int[])

Ich ersetze also durch
gl.glGenTextures(1, tmp, 1);

Damit sind dann alle Fehlermeldungen verschwunden und ich starte das Programm.
Das Fenster erscheint bleibt aber leer und ich bekomme folgende Fehlermeldung.

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Required 786432 remaining bytes in buffer, only had 0
at com.sun.gluegen.runtime.BufferFactory.rangeCheckBytes(BufferFactory.java:274)
at com.sun.opengl.impl.GLImpl.glTexImage2D(GLImpl.java:21147)
at TextureGenerator.makeRGBTexture(TextureGenerator.java:90)
at BeispielszeneView.defineTexture(BeispielszeneView.java:235)
at BeispielszeneView.init(BeispielszeneView.java:27)
at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:72)
at javax.media.opengl.GLCanvas$InitAction.run(GLCanvas.java:271)
at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:189)
at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:265)
at javax.media.opengl.GLCanvas.display(GLCanvas.java:130)
at javax.media.opengl.GLCanvas.paint(GLCanvas.java:142)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


Ich benutze Windows Xp Professional SP2
Java: JRE 1.6.0_01
Jogl: jogl-1.1.0-rc3


Was mache ich denn falsch.

magma
 
Hallo doctus,
ich habe Mittlerweilen auch eine Lösung gefunden.

Ich musste ein ByteBuffer rewind in den Quelltext einfügen dann geht es auch.

Deine Lösung interessiert mich aber auch. In welcher der Demos hast Du das denn gefunden?

magma
 
Hallo doctus,
danke für den Link.
Das funktioniert.
Was mir an der Demo nicht gefällt ist das wenn man kleine Texturen lädt, die gezoomt werden damit sie die Zeichenfläche ganz füllen. Bei sehr kleinen Texturen werden die dann sehr unschön.
Wisst Du wie man erreicht das eine kleine Textur wiederholt wird anstatt gezoomt um die Zeichenfläche ganz zu füllen?

magma
 
versuchs mal, indem du beim zeichnen des objectes, wo die texture draufkommt, die texturkoordinaten anders setzt.

lg doctus
 
Hallo Herr Gast.
Ja das war es.
Ich musste nur diese Texturkoordinaten anders wählen und schon ging es.
Vielen Dank für die Anregung.

magma
 
nix herr gast^^

guck mal auf die letzte zeile im beitrag. hatte nur vergessen mich einzuloggen^^

lg doctus
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben