3
我一直在嘗試使用Android的OpenGL的點雲
gl.glDrawElements(GL10.GL_POINTS, 4, GL10.GL_UNSIGNED_BYTE, vertexBuffer);
我的屏幕採用了頂點緩衝區上繪製得4分,但我不能得到它的工作。我想畫的是點,因爲最終我想做點雲顯示。如果我有大量的點(最終),是頂點緩衝區的路要走嗎?他們不會改變,但我會想改變他們的觀點和角度。
vertexBuffer設置:
private float vertices[] = {
-3.0f, 1.0f, -2.0f, // 0, Top Left
-3.0f, -1.0f, 0.0f, // 1, Bottom Left
-2.0f, -1.0f, -2.0f, // 2, Bottom Right
-2.0f, 1.0f, 0.0f, // 3, Top Right
};
// Our vertex buffer.
private FloatBuffer vertexBuffer;
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
這是我的電流消耗呼籲我的觀點(我不想因爲指數的形狀繪製順序並不重要,我):
public void draw(GL10 gl) {
// Enabled the vertices buffer for writing and to be used during
// rendering.
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glPointSize(3);
// Specifies the location and data format of an array of vertex
// coordinates to use when rendering.
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_POINTS, 4,
GL10.GL_UNSIGNED_BYTE, vertexBuffer);
// Disable the vertices buffer.
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
// Disable face culling.
gl.glDisable(GL10.GL_CULL_FACE);
}
的當我調用draw()時,程序當前崩潰;
謝謝!
謝謝基督徒,你說的話確實有道理。 但是,它仍然崩潰。經過很多研究,我找不出原因。我在這裏拋出了一個小的java文件,如果你可以爲我掃描它:http://www.qfpost.com/download.do?get=02700a1c0975664801e60c1cccfd6d02 – RedLeader 2011-06-16 17:35:29
@RedLeader你不必繪製'vertices.length'( 12)個頂點,但只有4個,因爲每個頂點都由3個浮點數組成(如在你的'glVertexPointer'調用中指定的那樣)。因此,無論是使用'vertices.length/3'還是隻使用'4'作爲'glDrawArrays'的第三個參數。 – 2011-06-16 17:40:53
瞭解。儘管兩種方式都導致空指針異常。我直接調用draw(gl)函數,並在調用的某個時刻失敗。 – RedLeader 2011-06-16 17:42:48