2011-08-12 9 views
0

glDrawTexfOESを使用して描画されたテクスチャがいくつかあります。私は、ズームインまたはズームアウトの印象を与えるためにカメラのビューを変更することができますが、それは私が問題を抱えている場所です。私は基本的な頂点配列を作ろうとしましたが、これは正しく機能し、ズームできました。しかし、私はglDrawTexfOESを使ってテクスチャをズームしたいと思っています。関連するコードは以下の通りです:glDrawTexfOESを使用したAndroid OpenGL ESズームが可能ですか?

gl.glEnable(GL10.GL_TEXTURE_2D);    
gl.glShadeModel(GL10.GL_SMOOTH);   
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);  
gl.glClearDepthf(1.0f);     
gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 

onSurfaceChanged完全な実装(私は問題がここにある疑いがある)

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    mWidth = width; 
    mHeight = height; 
    gl.glViewport(0, 0, mWidth, mHeight); 
    gl.glMatrixMode(GL10.GL_PROJECTION);  
    gl.glLoadIdentity();  
    gl.glOrthof(0, mWidth, 0, mHeight, -1, 1); 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity();     
} 

そして最後に、onDrawFrame実装:

onSurfaceCreatedがへの呼び出しを含んでいます

public void onDrawFrame(GL10 gl) { 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  
    gl.glLoadIdentity(); 
    // Set crop area (UVarray are uv co-ords for a texture map, the texture renders fine.) 
((GL11) gl).glTexParameterfv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES,UVarray,0); 
// Draw texture 
((GL11Ext) gl).glDrawTexfOES(32.0f,32.0f,0.0f,64.0f,64.0f); 
} 

私は変更を試みました幅が* 2、高さが* 2のglViewportglOrthofのパラメータですが、テクスチャはまだ縮尺されていません。まったく同じです。頂点配列を使用するようにスワップすると、これらの調整が機能します。

ご協力いただければ幸いです。

答えて

0

glDrawTextfOES()の幅と高さのパラメータは、ピクセルです。モデルビューおよび投影行列は、スケーリング自体ではなく、位置にのみ影響します。したがって、幅と高さのパラメータに64ピクセルを使用する代わりに、幅と高さをグローバルにスケーリングする変数を使用し、必要に応じてテクスチャクロッピングを使用してテクスチャの一部を選択する必要があります。

これは役に立ちました。OES_draw_texture

+0

バー、私はそうではないと思っていました。とにかくありがとう。 – Dororo

関連する問題