2011-06-21 4 views
0

[EDIT]はこのポストを無視し、それはnoobのの間違いだった[/ EDIT]のOpenGL ES MatrixGrabberとGLU.gluUnproject()騒乱

私は(=私はそれにかなり新しいです:))先週のAndroidを開始しました私は問題に頭を抱えています: 私は、レイキャスティングを実行して、画面のポイントの下にオブジェクトを取得しようとします。 私は私のプロジェクトでMatrixGrabber、MatrixStackとMatrixTrackingGLクラスをコピーした、彼らは罰金に見える障害のまともな量の後、私はsolution

を見つけ、GLU.gluUnproject方法は私が必要なものだったことが分かりました。

私が使用方法は、次のようになります: 世界:

static public Vertex unProject(float x, float y, World world) 
{ 

world.mg = new MatrixGrabber(); 
world.mg.getCurrentState(world.gl); 

float[] pos = new float[4]; 

GLU.gluUnProject( x, y, 0f, 
        world.mg.mModelView, 0, 
        world.mg.mProjection, 0, 
        world.view().get_size(), 0, 
        pos, 0); 

return new Vertex(pos[0], pos[1], pos[2]); 

} 

頂点は、X、YとdataHolderで、zは

世界は、私は、コンストラクタでGLWrapperの交換を行い、GLSurfaceViewを拡張浮かびます。 MGはMatrixGrabber()

public World(Context context) 
{ 
super(context); 
[...] 
//allows matrix manipulation 
setGLWrapper(new GLWrapper() 
{ 
    public GL wrap(GL gl) 
    { 
     return new MatrixTrackingGL(gl); 
    } 
}); 
} 

であると私は私の呼び出しを行うとき、私はすべての変数がインスタンス化されていることを確認し

が、それでも私はこの仕事を得ることができない:アプリは

world.mg.getCurrentState(world.gl); 

コールでひどくクラッシュします。 getCurrentModelView(gl)でもクラッシュします。およびgetCurrentProjection(gl);

私はAndroid 1.5を使用していますが、他のバージョンと同じものを3つ試しました。 私はどのバージョンのOpenGLIを使用しているのか本当に分かりません。 GL10はどこでも使用されていますが、重要かどうかわかりません。私が読んだのはGL10の "Type"です。

誰もが手掛かり、アドバイス、回避策や解決策を持っている場合、私は

と、とにかく幸せ幸せになると思い、読んでくれてありがとう:)

答えて

0

私の世界クラスはGLSurfaceViewを延長して使用していましたMatrixTrackingGLをラッパーとして使用します。

問題はビューポートもGLSurfaceViewを拡張し、MatrixTrackingGLを使用していないことでした...愚かです。

世界は何も拡張しておらず、ビューポート(GLSurfaceViewを拡張)はWrapperの変更を実装しています。

1
private void getMatrix(GL10 gl, int mode, float[] mat) { 
     MatrixTrackingGL gl2 = new MatrixTrackingGL(gl); 
     gl2.glMatrixMode(mode); 
     gl2.getMatrix(mat, 0); 
    } 

MatrixGrabber.java

の最初の行にキャストを置き換えます