Hi there,
Today i’ve started with writing a little “engine” for drawing simple figures (triangles, quads, etc.).
I use DisplayLists cause of the lower cpu usage, but now here is my problem:
I generate the Objects in an own class, but if i draw them they don’t appear.
Here are the Sources:
IFigure.java
package com.engine.objects;
/**
*
* @author penguin
*/
public interface IFigure {
public int getObjectList();
}
Triangle.java
package com.engine.objects;
/**
*
* @author penguin
*/
import org.lwjgl.opengl.GL11;
public class Triangle implements IFigure {
private Vertex[] Vertices;
private int DisplayList;
public Triangle(Vertex p1, Vertex p2, Vertex p3) {
Vertices = new Vertex[3];
Vertices[0] = p1;
Vertices[1] = p2;
Vertices[2] = p3;
DisplayList = GL11.glGenLists(1);
this.genObject();
}
private void genObject()
{
/*GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();*/
GL11.glNewList(DisplayList, GL11.GL_COMPILE);
GL11.glBegin(GL11.GL_TRIANGLES);
for (int i = 0; i < Vertices.length; i++) {
if(Vertices[i].isTextureAvailable())
Vertices[i].bindTexture();
GL11.glVertex3f(Vertices[i].getX(), Vertices[i].getY(), Vertices[i].getZ());
if(Vertices[i].isColorAvailable())
GL11.glColor3f(Vertices[i].getRed(), Vertices[i].getGreen(), Vertices[i].getBlue());
if(Vertices[i].isMappingAvailable() && Vertices[i].isTextureAvailable())
GL11.glTexCoord2f(Vertices[i].getU(), Vertices[i].getV());
GL11.glEnd();
GL11.glEndList();
}
}
public int getObjectList()
{
return DisplayList;
}
}
Vertex.java
package com.engine.objects;
/**
*
* @author penguin
*/
import org.lwjgl.util.vector.Vector3f;
import org.lwjgl.util.vector.Vector2f;
import org.newdawn.slick.opengl.Texture;
public class Vertex {
private Vector3f Coordinates;
private Vector3f Color;
private Vector2f MappingCoordinates;
private Texture theTexture;
public Vertex(Vector3f coordinates, Vector3f color, Vector2f mappingcoordinates, Texture thetexture)
{
Coordinates = coordinates;
Color = color;
MappingCoordinates = mappingcoordinates;
theTexture = thetexture;
}
public boolean isColorAvailable() {
if(Color != null)
return true;
else
return false;
}
public boolean isMappingAvailable()
{
if(MappingCoordinates != null)
return true;
else
return false;
}
public boolean isTextureAvailable()
{
if(theTexture != null)
return true;
else
return false;
}
public void bindTexture()
{
theTexture.bind();
}
public float getX()
{
return Coordinates.x;
}
public float getY()
{
return Coordinates.y;
}
public float getZ()
{
return Coordinates.z;
}
public float getU()
{
return MappingCoordinates.x;
}
public float getV()
{
return MappingCoordinates.y;
}
public float getRed()
{
return Color.x;
}
public float getGreen()
{
return Color.y;
}
public float getBlue()
{
return Color.z;
}
}
EngineTest.java (MainClass)
package com;
/**
*
* @author penguin
*/
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import java.nio.FloatBuffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.lwjgl.util.glu.GLU;
import com.engine.objects.*;
import org.lwjgl.util.vector.Vector3f;
public class EngineTest {
public static void main(String[] args) {
try {
Display.setDisplayMode(new DisplayMode(800,600));
Display.create();
} catch (Exception e) {
}
// Render Simple Triangle
initGL();
//WorldObject myObject = new WorldObject();
Triangle myTriangle = new Triangle(new Vertex(new Vector3f(1.0f,2.0f,1.0f),null,null,null),new Vertex(new Vector3f(1.0f,-1.0f,1.0f),null,null,null),new Vertex(new Vector3f(-1.0f,-1.0f,1.0f),null,null,null));
//myObject.addFigure(myTriangle);
while(!Display.isCloseRequested())
{
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();
GL11.glTranslatef(0.0f,0.0f,-10.0f);
GL11.glCallList(myTriangle.getObjectList());
Display.update();
}
Display.destroy();
}
private static void initGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45.0f,((float)800)/((float)600),0.1f,100.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0f);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
}
}
I’m new to OpenGL and hope someone can help me cause i don’t know where the mistake can be.