我想用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