我畫一個三角形在OpenGL,如:在OpenGL在繪圖時轉換像素座標到標準化的座標3.0
MyGLRenderer()
{
fSampleVertices = ByteBuffer.allocateDirect(fSampleVerticesData.length * 4)
.order (ByteOrder.nativeOrder()).asFloatBuffer();
fSampleVertices.put(fSampleVerticesData).position (0);
Log.d(TAG, "MyGLRender()");
}
private FloatBuffer fSampleVertices;
private final float[] fSampleVerticesData =
{ .8f, .8f, 0.0f, -.8f, .8f, 0.0f, -.8f, -.8f, 0.0f };
public void onDrawFrame(GL10 unused)
{
GLES30.glViewport (0, 0, mWidth, mHeight);
GLES30.glClear (GLES30.GL_COLOR_BUFFER_BIT);
GLES30.glUseProgram (dProgramObject1);
GLES30.glVertexAttribPointer (0, 3, GLES30.GL_FLOAT, false, 0, fSampleVertices);
GLES30.glEnableVertexAttribArray (0);
GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 3);
//Log.d(TAG, "onDrawFrame()");
}
所以,因爲我已經與座標不採取試驗很長時間才發現屏幕 的可見區域介於-1,1之間。那麼三角形佔據了屏幕的80%。以及我已經確定,我的 GLSurfaceView的像素尺寸寬度爲2560,高度爲1600。
因此再給予這些基於像素座標(fBoardOuter)三角形:
1112.0f
800.0f
0.0f
-1280.0f
800.0f
0.0f
-1280.0f
-800.0f
0.0f
我不得不要麼轉換的像素座標的東西-1,1之間或找到一種方法來gl在繪製時將這些座標變換爲 ?由於我對OpenGL很新,所以我正在尋找一些指導來做到這一點?
我的頂點着色器是這樣的:
String sVertexShader1 =
"#version 300 es \n"
+ "in vec4 vPosition; \n"
+ "void main() \n"
+ "{ \n"
+ " gl_Position = vPosition; \n"
+ "} \n";
我會正確的,那麼在說,基於系統的像素將被稱爲世界座標?我現在想要做的只是棋盤遊戲的2D繪圖。
我發現Android有這樣的功能:
orthoM(float[] m, int mOffset, float left, float right, float bottom, float top, float near, float far)
但是沒有什麼到目前爲止我讀過的文檔中解釋的矩陣的使用如何浮動[]可以將像素座標轉換爲GLES30中的矩陣的歸一化座標。
我還發現這裏的文檔:
http://developer.android.com/guide/topics/graphics/opengl.html
基於關我試圖創建一個實例文檔:
在引擎收錄例子fSampleVertices我想會更小,並且在屏幕的中心,但它不是它仍然幾乎是整個屏幕,如果我嘗試將它放入gl,fBoardOuter只會向我顯示一個黑屏DrawArray。