2012-01-08 80 views
0

我試圖讓一個基本的形狀(Hexigon)在Android平臺上啓動並學習一些關於OpenGL的基礎知識,並且我遇到了一些問題。OpenGL繪製帶頂點的Hexig

我已經成功地做出了一個尖尖的六角形,但是當我將它轉換成平面Hexygon時,它不能正確渲染。下面是一些代碼,爲你們找出問題(可能是一個容易解決。)

頂點/索引

//flat hexagon 
private float verticesFlat[] = {  
    0.0f, 0.0f, 0.0f, //center 
    -0.5f, 1.0f, 0.0f, // left top 
    0.5f, 1.0f, 0.0f, // right top 
    1.0f, 0.0f, 0.0f, // right 
    0.5f, 1.0f, 0.0f, // right bottom 
    -0.5f, -1.0f, 0.0f, // left bottom 
    -1.0f, 0.0f, 0.0f,  // left 
}; 

private short[] indices = { 0, 1, 2, 3, 4, 5, 6, 1 }; 

標準頂點/索引緩衝..

// a float is 4 bytes, therefore we multiply the number if 
// vertices with 4. 
ByteBuffer vbb = ByteBuffer.allocateDirect(verticesFlat.length * 4); 
vbb.order(ByteOrder.nativeOrder()); 
vertexBuffer = vbb.asFloatBuffer(); 
vertexBuffer.put(verticesFlat); 
vertexBuffer.position(0); 

// short is 2 bytes, therefore we multiply the number if 
// vertices with 2. 
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2); 
ibb.order(ByteOrder.nativeOrder()); 
indexBuffer = ibb.asShortBuffer(); 
indexBuffer.put(indices); 
indexBuffer.position(0); 

的onDraw(GL10 gl):

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

gl.glMatrixMode(GL10.GL_MODELVIEW); 
gl.glLoadIdentity(); 

GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);  

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer); 

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 

我得到的結果如下圖所示:

Wrong rendering of hexagon

回答

2

應該

private float verticesFlat[] = {  
    0.0f, 0.0f, 0.0f, //center 
    -0.5f, 1.0f, 0.0f, // left top 
    0.5f, 1.0f, 0.0f, // right top 
    1.0f, 0.0f, 0.0f, // right 
    0.5f, -1.0f, 0.0f, // right bottom (notice sign) 
    -0.5f, -1.0f, 0.0f, // left bottom 
    -1.0f, 0.0f, 0.0f,  // left 
}; 
+0

你能告訴我該指數陣列,我將不得不作出來實現這一目標?我相當新手,當涉及到OpenGL :-) – 2012-01-08 17:35:26

+0

你的頂點實際上看起來好像一個三角形的粉絲,但我現在檢查索引。 – 2012-01-08 17:41:17

+1

您在「右下角」組件上缺少負號。 – 2012-01-08 17:52:00