Hi,
um nicht es nicht so schwer zu haben mit JOGL habe ich mir selbst ein paar "Basis klassen" geschrieben,
mit denen ich ganz einfach einen text, eine box, einen cube, usw.. ganz einfach, mit net methode zaubern kann.
Nun aber zu meinem Problem:
Die Textur zu laden, das ganze try und catch, das wollte ich auf eine außenstehende Klasse verlangern.
Ich erstellte mir also die Klasse Textur:
Dann habe ich noch eine Klasse namens GeoOD (Geometric.Objects.Drawer) geschrieben,
in ihr gibt es unter anderem auch die methode, drawBox();
(Ausschnitt)
Nach diesem ganzen hier, hatte ich mir gedacht, die klasse die von GLEventListener added, da mache ich das hier:
Doch ich habe keine Ahnung warum keine Textur angezeigt wird, wenn ich das ganze starte.
Er meldet mir auch nicht die Fehler-Ausgaben, die ich in der Klasse Textur geschrieben habe.
Ich denke das ganze funktioniert, nur das mit der Textur coordinate funktioniert vielleicht nicht.
Liegt es daran, ?
Danke für eure Hilfen (besonders Fancy ^^),
Developer_X.
um nicht es nicht so schwer zu haben mit JOGL habe ich mir selbst ein paar "Basis klassen" geschrieben,
mit denen ich ganz einfach einen text, eine box, einen cube, usw.. ganz einfach, mit net methode zaubern kann.
Nun aber zu meinem Problem:
Die Textur zu laden, das ganze try und catch, das wollte ich auf eine außenstehende Klasse verlangern.
Ich erstellte mir also die Klasse Textur:
Java:
package Geometric;
import com.sun.opengl.util.texture.*;
public class Textur
{
boolean loaded = false;
Texture texture;
public void load(String texture_file)
{
try
{
texture = TextureIO.newTexture(getClass().getClassLoader().getResourceAsStream(texture_file), false, TextureIO.JPG);
loaded = true;
}
catch(Exception e)
{
System.out.println(texture_file+" does not exist or may cannot be found.");
}
}
public void bind()
{
if(loaded)
texture.bind();
else
System.out.println("Texture has to be loaded (correctly).");
}
}
Dann habe ich noch eine Klasse namens GeoOD (Geometric.Objects.Drawer) geschrieben,
in ihr gibt es unter anderem auch die methode, drawBox();
(Ausschnitt)
Java:
public void drawBox(GL2 gl, Color color, float width, float height, float wide)
{
boolean lightingState;
gl.glPushMatrix();
lightingState = gl.glIsEnabled(GL2.GL_LIGHTING);
gl.glDisable(GL2.GL_LIGHTING);
gl.glColor3d(color.getRed() / 255.0, color.getGreen() / 255.0, color.getBlue() / 255.0);
gl.glTranslatef(0,0,+wide/2);
gl.glRectf(-width/2,-height/2,width/2,height/2);
gl.glTranslatef(0,0,-wide/2);
gl.glTranslatef(0,0,-wide/2);
gl.glRectf(-width/2,-height/2,width/2,height/2);
gl.glTranslatef(0,0,+wide/2);
gl.glTranslatef(0,height/2,0);
gl.glRotatef(90,1,0,0);
gl.glRectf(-width/2,-wide/2,width/2,wide/2);
gl.glRotatef(-90,1,0,0);
gl.glTranslatef(0,-height/2,0);
gl.glTranslatef(0,-height/2,0);
gl.glRotatef(90,1,0,0);
gl.glRectf(-width/2,-wide/2,width/2,wide/2);
gl.glRotatef(-90,1,0,0);
gl.glTranslatef(0,height/2,0);
gl.glTranslatef(width/2,0,0);
gl.glRotatef(90,0,1,0);
gl.glRectf(-wide/2,-height/2,wide/2,height/2);
gl.glRotatef(-90,0,1,0);
gl.glTranslatef(-width/2,0,0);
gl.glTranslatef(-width/2,0,0);
gl.glRotatef(90,0,1,0);
gl.glRectf(-wide/2,-height/2,wide/2,height/2);
gl.glRotatef(-90,0,1,0);
gl.glTranslatef(width/2,0,0);
if(lightingState)
{
gl.glEnable(GL2.GL_LIGHTING);
}
}
Nach diesem ganzen hier, hatte ich mir gedacht, die klasse die von GLEventListener added, da mache ich das hier:
Java:
Textur t = new Textur();
@Override
public void init(final GLAutoDrawable drawable)
{
GL2 gl = drawable.getGL().getGL2();
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glActiveTexture(GL.GL_TEXTURE0);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
t.load("Pic.jpg");
}
GeoOD g = new GeoOD();
@Override
public void display(final GLAutoDrawable drawable)
{
gl = drawable.getGL().getGL2();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
glu.gluLookAt(0, 0, 6, 0, 0, 0, 0, 1, 0);
// 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(GL2.GL_LIGHT1, GL2.GL_POSITION, lightPos, 0);
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_AMBIENT, lightColorAmbient, 0);
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_SPECULAR, lightColorSpecular, 0);
// Enable lighting in GL.
gl.glEnable(GL2.GL_LIGHT1);
gl.glEnable(GL2.GL_LIGHTING);
gl.glTranslatef(X,Y,Z);
t.bind();
g.drawBox(gl, Color.green,1,2,3);
}
Er meldet mir auch nicht die Fehler-Ausgaben, die ich in der Klasse Textur geschrieben habe.
Ich denke das ganze funktioniert, nur das mit der Textur coordinate funktioniert vielleicht nicht.
Liegt es daran, ?
Danke für eure Hilfen (besonders Fancy ^^),
Developer_X.