我很難更改我的GLSurfaceView渲染網格,更確切地說是渲染器中,我想有一些我在工作流程中沒有理解的東西渲染器類。如何更改GLSurfaceView.Renderer中的渲染對象
所以,讓我們考慮,我們有這樣的:
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);
}
}
因此,這是完美的工作,AMESH是所有好設置在屏幕上顯示。現在,我想改變,當用戶按下一個按鈕,這個網格,並刷新我的渲染我創建的渲染器的具體方法,如下:
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);
}
}
所以在我的腦海裏,叫changeMesh將使onDrawFrame方法來重新繪製一個新的模型,對吧? 我的問題是,結果是一個空的渲染器。它甚至沒有崩潰或如此。當我打電話給changeMesh()時,先前顯示的網格消失(如預期的那樣),但是新的不是繪製。
所以我想知道,是否需要創建一個新的渲染器(這似乎有點沉重)?有沒有辦法在OnSurfaceCreated中手動請求傳遞?我對這個bug有點遺憾,因爲它有點意外。
你所描述的代碼應該可以工作。在您更改網格並檢查繪製內容後,我將在調試器中逐步完成繪圖調用。 –