2012-01-27 10 views
0

AndroidでNDESを使用してライブラリGLESv1_CMでシンプルシーンをレンダリングしています。アンドロイド4(とAndroid NDK:OpenGL ESの奇妙な線の座標

screen from Android 2.2 device

さらに、Androidのエミュレータ上:私は、Android 2.2または3.2で、デバイス上でそれを実行したときに

void render(Rect viewport) 
{ 
    glViewport(viewport.left, viewport.top, viewport.Width(), viewport.Height()); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrthof(viewport.left, viewport.right, viewport.top, viewport.bottom, -1, 1); 
    GLfloat points[] = { 5, 50, 1, 1, 1, 1, 
         7, 50, 1, 1, 1, 1, 
         7, 50, 1, 0, 0, 1, 
         7, 52, 1, 0, 0, 1, 
         8, 50, 0, 1, 0, 1, 
         10, 50, 0, 1, 0, 1}; 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 
    glVertexPointer(2,GL_FLOAT,sizeof(GLfloat)*6,&points); 
    glColorPointer(4,GL_FLOAT,sizeof(GLfloat)*6,&points[2]); 
    glDrawArrays(GL_LINES,0,6); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisableClientState(GL_COLOR_ARRAY); 
} 

は、私は私がこれを持って3ラインを交差させたいが、更新:

screen from Android 4 emulator

それがこの絵のように見えるようにすることは可能です:2.3エミュレータ上同じ)私はこれを持っていますOpenGL2を使わずにすべてのAndroidバージョンのすべてのデバイスで?

wanted screen

投影のこのタイプのためthe OpenGL FAQによると、あなたに

答えて

1

ありがとう:

正確なピクセル化が必要な場合は、あなたがModelView行列に小さな 翻訳を置きたいかもしれません、以下に示すように:

glMatrixMode (GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef (0.375, 0.375, 0.); 

これは丸め問題の可能性を減らすと考えています。

+0

残念ながら、この解決法は機能しません。それは、すべてのポイントを右上に移動するだけです。私はそれが3d以上で2dのために書かれていて、それは2番目に、それがopenglのためではなくopenglのために書かれたからだと思います。しかし、興味深いリンクに感謝します。 –

+0

Er、いいえ。世界座標がスクリーンピクセルに正確にマップされている正射投影法を使用している場合、そのコードスニペットはピクセルの0.375で調整されます。それは確かに "すべてのポイントを右上に"移動しません。おそらくあなたは異なるmodelview行列を持っています...あなたの元の質問にはそれが含まれていないので、私はそれが単位行列であると仮定しました。 –

+0

ok、私は少し私のコードを修正し、今は動作します。私が望むほど完璧ではないが、はるかに良い。ありがとうございます –

関連する問題