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);
}
}
だから、これは完全に働いている、アメッシュは、すべての良い設定で、画面上の表示です。 changeMeshはonDrawFrameになるだろう呼び出し、私の心の中でそう
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()を呼び出すと、以前によく表示されていたメッシュが(期待通りに)消えますが、新しいメッシュは描画されません。
私は、新しいレンダラー(少し重いようです)を作成する必要があるのでしょうか?手動でOnSurfaceCreatedでパスを尋ねる方法はありますか?私はこのバグで少し失われている。
あなたのコードはうまくいくはずです。私はあなたのメッシュを変更し、何が描画されているかを確認した後、デバッガの描画呼び出しを実行します。 –