R
Rene
Gast
Hallo,
kann man Vertex Arrays nachtäglich noch ändern? Ich lese überall, dass dies der größte Vorteil von Vertex Arrays und Vertex Buffer Objekten im Gegensatz zu Displaylisten ist. Leider bekomme ich das nicht hin.
Im einen Fall habe ich einen einfachen Würfel mit 6 Seiten das macht 72 Vertexe. Wenn ich dann die Vertexdaten austausche während er rotiert passt gar nichts oder ganz sporadisch ändert er sich so wie er soll. Aber nur einmal und nicht wieder zurück beim nächsten Vertex update. Also nicht zuverlässig.
Im zweiten Fall, habe ich ein matematisches Objekt mit Teilweise über 1.000.000 Vertexen. Wenn ich da ein Update versuche stürzt die ganze Applikation ab
Hier mal einen Auszug aus dem Code vom Würfel:
Ich hoffe das ist jetzt nicht schon zu viel Code
Wenn mir einfach bzgl. Vertex Arrays helfen könnte wäre ich sehr dankbar. Anbei versuche ich ja noch die 1.000.000 Vertexe zu reduzieren. Einen guten Ansatz habe ich da aber leider auch noch nicht.
Gruß
René
kann man Vertex Arrays nachtäglich noch ändern? Ich lese überall, dass dies der größte Vorteil von Vertex Arrays und Vertex Buffer Objekten im Gegensatz zu Displaylisten ist. Leider bekomme ich das nicht hin.
Im einen Fall habe ich einen einfachen Würfel mit 6 Seiten das macht 72 Vertexe. Wenn ich dann die Vertexdaten austausche während er rotiert passt gar nichts oder ganz sporadisch ändert er sich so wie er soll. Aber nur einmal und nicht wieder zurück beim nächsten Vertex update. Also nicht zuverlässig.
Im zweiten Fall, habe ich ein matematisches Objekt mit Teilweise über 1.000.000 Vertexen. Wenn ich da ein Update versuche stürzt die ganze Applikation ab
Hier mal einen Auszug aus dem Code vom Würfel:
Code:
private void buildVertexArray()
{
float cArray[];
float vArray[];
if(huhu)
{
vArray = new float[] { 1.0f, 1.0f,-1.0f, -1.0f, 1.0f,-1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f, -1.0f,-1.0f, 1.0f, -1.0f,-1.0f,-1.0f, 1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f,-1.0f, 1.0f, 1.0f,-1.0f, 1.0f,
1.0f,-1.0f,-1.0f, -1.0f,-1.0f,-1.0f, -1.0f, 1.0f,-1.0f, 1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f, -1.0f, 1.0f,-1.0f, -1.0f,-1.0f,-1.0f, -1.0f,-1.0f, 1.0f,
1.0f, 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f,-1.0f, 1.0f, 1.0f,-1.0f,-1.0f };
}
else
{
vArray = new float[] { 2.0f, 2.0f,-2.0f, -2.0f, 2.0f,-2.0f, -2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,
2.0f,-2.0f, 2.0f, -2.0f,-2.0f, 2.0f, -2.0f,-2.0f,-2.0f, 2.0f,-2.0f,-2.0f,
2.0f, 2.0f, 2.0f, -2.0f, 2.0f, 2.0f, -2.0f,-2.0f, 2.0f, 2.0f,-2.0f, 2.0f,
2.0f,-2.0f,-2.0f, -2.0f,-2.0f,-2.0f, -2.0f, 2.0f,-2.0f, 2.0f, 2.0f,-2.0f,
-2.0f, 2.0f, 2.0f, -2.0f, 2.0f,-2.0f, -2.0f,-2.0f,-2.0f, -2.0f,-2.0f, 2.0f,
2.0f, 2.0f,-2.0f, 2.0f, 2.0f, 2.0f, 2.0f,-2.0f, 2.0f, 2.0f,-2.0f,-2.0f };
}
cArray = new float[] {0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f,
1.0f,0.5f,0.0f, 1.0f,0.5f,0.0f, 1.0f,0.5f,0.0f, 1.0f,0.5f,0.0f,
1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f,
1.0f,1.0f,0.0f, 1.0f,1.0f,0.0f, 1.0f,1.0f,0.0f, 1.0f,1.0f,0.0f,
0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f,
1.0f,0.0f,1.0f, 1.0f,0.0f,1.0f, 1.0f,0.0f,1.0f, 1.0f,0.0f,1.0f
};
FloatBuffer vertexBufferTemp = BufferUtil.newFloatBuffer(vArray.length);
FloatBuffer colorsBufferTemp = BufferUtil.newFloatBuffer(cArray.length);
for (int i = 0; i < vArray.length; i++)
{
vertexBufferTemp.put(vArray[i]);
}
for (int j = 0; j < cArray.length; j++)
{
colorsBufferTemp.put(cArray[j]);
}
vertexBufferTemp.rewind();
colorsBufferTemp.rewind();
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL.GL_COLOR_ARRAY);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, vertexBufferTemp);
gl.glColorPointer(3, GL.GL_FLOAT, 0, colorsBufferTemp);
System.out.println("!!Neue Daten!!");
}
public void display(GLAutoDrawable gLDrawable)
{
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(1.5f, 0.0f, -6.0f);
gl.glRotatef(rquad, 1.0f, 1.0f, 1.0f);
gl.glDrawArrays(GL.GL_QUADS, 0, 72);
gl.glFlush();
rtri += 0.2f;
rquad += 0.15f;
}
public void init(GLAutoDrawable gLDrawable)
{
gl = gLDrawable.getGL();
gl.glShadeModel(GL.GL_SMOOTH); // Enable Smooth Shading
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
gl.glClearDepth(1.0f); // Depth Buffer Setup
gl.glEnable(GL.GL_DEPTH_TEST); // Enables Depth Testing
gl.glDepthFunc(GL.GL_LEQUAL); // The Type Of Depth Testing To Do
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); // Really Nice Perspective Calculations
gLDrawable.addKeyListener(this);
buildVertexArray();
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
{
animator.stop();
System.exit(0);
}
else
{
huhu = !huhu;
buildVertexArray(); // HIERMIT SOLL SICH DER WÜRFEL VERÄNDERN!!!!!!
System.out.println("HUHU--->" + huhu);
}
Ich hoffe das ist jetzt nicht schon zu viel Code
Wenn mir einfach bzgl. Vertex Arrays helfen könnte wäre ich sehr dankbar. Anbei versuche ich ja noch die 1.000.000 Vertexe zu reduzieren. Einen guten Ansatz habe ich da aber leider auch noch nicht.
Gruß
René