Ich habe Probleme, meine gerenderten Mesh in meiner GLSurfaceView, und genauer gesagt im Renderer, zu ändern, ich denke, es gibt etwas, was ich nicht im Workflow der Renderer-Klasse.Wie ändere ich die gerenderten Objekte in einem GLSurfaceView.Renderer
Also, lassen Sie uns überlegen, wir haben dies:
public class MyRenderer extends GLSurfaceView.Renderer{
private Mesh aMesh;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config){
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
aMesh = new Mesh("TestMesh1");
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
...Creating viewport...
}
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(gl.GL_COLOR_BUFFER_BIT);
...all Maths to create mvpMatrix...
aMesh.draw(mvpMatrix);
}
}
Also das perfekt funktioniert, aMesh ist die Anzeige auf dem Bildschirm mit allen guten Einstellungen. Nun, ich mag diese Masche ändern, wenn der Benutzer eine Taste drückt, und meine Renderer zu aktualisieren ich eine bestimmte Methode in dem Renderer erstellt, wie folgt:
public class MyRenderer extends GLSurfaceView.Renderer{
private Mesh aMesh;
public void changeMesh(String newMeshName){
GLES20.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
....
aMesh=new Mesh(newMeshName);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config){
....
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
...
}
@Override
public void onDrawFrame(GL10 gl) {
aMesh.draw(mvpMatrix);
}
}
Also in meinem Kopf, rief changeMesh würde onDrawFrame machen Methode, aMesh mit dem neuen Modell neu zu zeichnen, oder? Mein Problem ist, dass das Ergebnis ein leerer Renderer ist. Es stürzt nicht einmal oder so. Wenn ich changeMesh() aufrufen, verschwindet das vorher gut angezeigte Mesh (wie erwartet), aber das neue wird nicht gezeichnet.
Also frage ich mich, ist es erforderlich, einen neuen Renderer zu erstellen (der ein bisschen schwer scheint)? Gibt es eine Möglichkeit, einen Pass in OnSurfaceCreated manuell zu stellen? Ich bin etwas verloren bei diesem Fehler, weil es irgendwie unerwartet ist.
Ihr Code wie beschrieben sollte funktionieren. Ich würde den Draw-Aufruf im Debugger durchlaufen, nachdem Sie Ihr Mesh geändert und überprüft haben, was gezeichnet wird. –