我想用OpenGL ES 2.0爲教育目的創建一些簡單的俄羅斯方塊克隆。到目前爲止,我設法在屏幕上繪製了一個由兩個三角形組成的簡單矩形。用OpenGL ES 2.0移動基元(三角形/矩形)
我想使用那些原始矩形作爲我的俄羅斯方塊塊。
現在,我的問題是如何移動這些矩形,因爲他們應該像俄羅斯方塊塊一樣掉下來。
這是我如何定義我的矩形:
...
public Rectangle()
{
_vertices = new float[]
{
// x, y, z
// R, G, B, A
-1.0f, 1.0f, 0.0f,
1.0f, 0.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f,
-1.0f, -1.0f, 0.0f,
1.0f, 0.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
InitBuffer();
}
...
這是繪製矩形的代碼:
private void drawRectangle(final FloatBuffer aRectangleBuffer)
{
aRectangleBuffer.position(mPositionOffset);
GLES20.glVertexAttribPointer(mPositionHandle, mPositionDataSize, GLES20.GL_FLOAT, false,
mStrideBytes, aRectangleBuffer);
GLES20.glEnableVertexAttribArray(mPositionHandle);
aRectangleBuffer.position(mColorOffset);
GLES20.glVertexAttribPointer(mColorHandle, mColorDataSize, GLES20.GL_FLOAT, false,
mStrideBytes, aRectangleBuffer);
GLES20.glEnableVertexAttribArray(mColorHandle);
Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);
}
的代碼基本上是從本教程複製:Learn OpenGL ES - Android Lesson One: Getting Started
的只能移動我能想到的矩形的方法是更改我的_vertices
-陣列中的頂點。但是這意味着在每一次抽獎中都會創建一個新的數組,一個新的VertexBuffer等,我不認爲這是要走的路。
也許這是一個轉儲問題,但儘管我已經開始瞭解OpenGL ES是如何工作的,但這個我還沒弄明白。
任何幫助真的很感激。
簡單但完整的示例:https://code.google.com/p/android-breakout/。這裏有一些相關的評論來源:https://code.google.com/p/android-breakout/source/browse/src/com/faddensoft/breakout/BasicAlignedRect.java#31 – fadden
這似乎正是我正在尋找:)。如果你能以某種方式塑造這個答案,我會接受它:)。 – user1567896
完成。答案需要更長時間:-) – fadden