Hi, kann mir einer erklären, mit Code, wie man Texturing mit JOGL macht?
Danke erstmal, Developer_X
Danke erstmal, Developer_X
// Prepare light parameters.
float SHINE_ALL_DIRECTIONS = 1;
float[] lightPos = {-30, 0, 0, SHINE_ALL_DIRECTIONS};
float[] lightColorAmbient = {0.2f, 0.2f, 0.2f, 1f};
float[] lightColorSpecular = {0.8f, 0.8f, 0.8f, 1f};
// Set light parameters.
gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, lightPos, 0);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, lightColorAmbient, 0);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, lightColorSpecular, 0);
// Enable lighting in GL.
gl.glEnable(GL.GL_LIGHT1);
gl.glEnable(GL.GL_LIGHTING);
// Set material properties.
float[] rgba = {0.3f, 0.5f, 1f};
gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, rgba, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, rgba, 0);
gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, 0.5f);
Google spuckt dazu einiges aus, z.B. Jogl.info - Alles rund um die Java Bindings für OpenGL
GL_AMBIENT liegt jetzt z.B. in GL2.GL_AMBIENT (genau genommen in GLLightingFunc, aber das ist nicht so dramatisch).
Mit den anderen verhält es sich analog.
@Marco: Danke, ich glaube Durchhaltevermögen werde ich auch brauchen, aber en Shooter werd ich Ihm nicht bauen
Gruß,
Fancy
// Load earth texture.
try
{
InputStream stream = getClass().getResourceAsStream("earth.jpg");
TextureData data = TextureIO.newTextureData(stream, false, "jpg");
earthTexture = TextureIO.newTexture(data);
}
catch (Exception exc)
{
exc.printStackTrace();
}
java.io.IOException: Stream was null
at com.sun.opengl.util.texture.TextureIO.newTextureDataImpl(TextureIO.java:784)
at com.sun.opengl.util.texture.TextureIO.newTextureData(TextureIO.java:205)
at Samples.Sample0.init(Sample0.java:32)
at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:88)
at javax.media.opengl.awt.GLCanvas$InitAction.run(GLCanvas.java:603)
at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:149)
at javax.media.opengl.awt.GLCanvas$DisplayOnEventDispatchThreadAction.run(GLCanvas.java:637)
at java.awt.event.InvocationEvent.dispatch(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)
Was mache ich falsch, die datei gibt es ja, earth.jpg
InputStream stream = getClass().getResourceAsStream("earth.jpg");
System.out.println(stream);
private static final String imagePath = "late/resources/jogl2/gl2/image.png";
[..]
getClass().getClassLoader().getResourceAsStream(imagePath)
Das mag sein, aber wohl nicht da wo die JVM danach sucht.
Mach mal ein
Code:InputStream stream = getClass().getResourceAsStream("earth.jpg"); System.out.println(stream);
Und das ausgegebene null wird Dir sagen das die Datei nicht an der richtigen Stelle ist.
Siehe noch mal in das gl2sample1:
Code:private static final String imagePath = "late/resources/jogl2/gl2/image.png"; [..] getClass().getClassLoader().getResourceAsStream(imagePath)
und sieh Dir an wo das image.png im Project liegt. Ist alles nur eine Frage der richtigen Pfade.
Gruß,
Fancy
GLUquadric earth = glu.gluNewQuadric();
glu.gluQuadricTexture(earth, true);
glu.gluQuadricDrawStyle(earth, GLU.GLU_FILL);
glu.gluQuadricTexture(earth, true);
glu.gluQuadricNormals(earth, GLU.GLU_FLAT);
glu.gluQuadricOrientation(earth, GLU.GLU_OUTSIDE);
final float radius = 1f;
final int slices = 20;
final int stacks = 20;
glu.gluSphere(earth, radius, slices, stacks);
glu.gluDeleteQuadric(earth);
Warum?
gl.glEnable(GL.GL_DEPTH_TEST);
Warum wird außerdem die normale textur so umgeändert?
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB, imageWidth, imageHeight, 0, GL2.GL_BGR, GL.GL_UNSIGNED_BYTE, imagePixels);
Welche Objekte kann man eig. zeichnen mit jogl?
Wie kann man eig. das HUD Zeichnen? (Foreground&&Background)
.. vielleicht sollte man noch tiefer anfangen...bei "Wie nutze ich meine Eclipse IDE!?" oder "Wie lese und verstehe ich eine Readme Datei?!" ...OK, gut, den Thread "Hilfe, er unterstreicht glBegin, obwohl das doch genau so im Buch steht" beantwortest DU :bae:![]()
Immerhin...ich hab mir das mal ein bisschen angeschaut.
Ja, mit LWJGL, das effektiv das selbe wie JOGL ist. Ein OpenGL Binding! Die Portierung dürfte sich bis auf die Buffer-Elemente 1:1 übernehmen lassen.Das ist aber auch mit einer Library geschrieben,
die ich nicht habe. Ich habe doch nur das ganz normale JOGL.
Nein, es sei denn du nutzt eine fertige Engine. Wenn du Systemnah programmieren willst, dann stehen dir lediglich ein paar Werkzeuge zur Verfügung und die Tools die du benötigst musst du dir selbst bauen.Geht das nciht einfacher`?
Wie schon gesagt wurde, ImageIO und dann entsprechend übergeben, aber ob das nun wirklich einfacher ist wage ich zu bezweifeln. Für LWJGL gäbe es SLICK als Textureloader, aber ob es sowas auch von der JOGL Community gibt...kA.Dass man einfach die daten aus einem bild ladet, und sie der textur zuweist.
Es gibt doch bestmmt einen ganz einfachen weg.
Selbstinitiative, Nachdenken, viel lesen und ausprobieren.Wie lautet der noch gleich`?
Gibt's da 'ne Petition, die man unterschreiben könnte?Ohne das jetzt wieder in einen Flamewar oder Developer_X-bashing ausarten lassen zu wollen: DOCH, das wirst du. Zumindest werden auch noch so viele Codesamples dich nicht davon abhalten. Es gibt im Netz eine unerschöpfliche Menge an Beispielprogrammen zu JOGL. Dass sich jemand die Mühe gemacht hat, (vermutlich) speziell für dich ein paar Beispiele zu erstellen, bei denen "Entpacken, Compilieren und Starten" ein hübsches Bildchen auf den Bildschirm zaubert hilft nicht weiter oder ist nur eine Art "Symptopbekämpfung". Vorher war deine Frage "Wie mache ich Texturing?" - Wenn du jetzt ein Beispiel hast, wo eine Textur angezeigt wird, ist deine nächste Frage "Und wie kann ich die Textur jetzt animieren?" - und wenn dort jemand ein glsample0X postet, wirst du das "aufsaugen" wie ein Schwamm, und die nächste Frage stellen: "Wie kann man eine Filmdatei als Textur verwenden" (oder sonstwas) ... und so wird es immer weiter gehen, solange die Fortschritte, die du machst, daraus bestehen, Leute in einem Forum dazu zu bewegen, Lösungen für deine Probleme zu posten, und du nicht (endlich) lernst, Eigeninitiative zu zeigen, im Hinblick auf den Versuch, dir die Fähigkeit anzueignen, dir für solche Probleme selbst Lösungen zu erarbeiten.
Aber vielleicht habe ich ja auch einen vööööllig falschen Eindruck bekommen....
@ Marco:
Jap, ich bin Student.![]()