2014-10-04 2 views
0

화면에 간단한 삼각형을 그립니다. 내가 얼굴을 건너 뛰고 화면에 정점을 표시 할 OpenGL을 이해하기 :android opengl skip faces

public class GLObj 
{ 
private FloatBuffer  vertBuff; 
private ShortBuffer  pBuff; 

private float   vertices[] = 
{ 
    0f, 1f, 0, // point 0 
    1f, -1f, 0, // point 1 
    -1f, -1f, 0 // point 3 
}; 

private short[]   pIndex = { 0, 1, 2 }; 

public GLObj() 
{ 
    ByteBuffer bBuff = ByteBuffer.allocateDirect(vertices.length * 4); // each point uses 4 bytes 
    bBuff.order(ByteOrder.nativeOrder()); 
    vertBuff = bBuff.asFloatBuffer(); 
    vertBuff.put(vertices); 
    vertBuff.position(0); 

    // #### WHY IS THIS NEEDED?! I JUST WANT TO DRAW VERTEXES/DOTS #### 
    ByteBuffer pbBuff = ByteBuffer.allocateDirect(pIndex.length * 2); // 2 bytes per short 
    pbBuff.order(ByteOrder.nativeOrder()); 
    pBuff = pbBuff.asShortBuffer(); 
    pBuff.put(pIndex); 
    pBuff.position(0); 
    // ################################################################ 
} 

public void Draw(GL10 gl) 
{ 
    gl.glFrontFace(GL10.GL_CW); 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff); 

    // ### HOW TO PASS VERTEXT ARRAY DIRECTLY WITHOUT FACES?? ### 
    gl.glDrawElements(GL10.GL_POINTS, pIndex.length, GL10.GL_UNSIGNED_SHORT, pBuff); 

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
} 

}

내 문제는 이것이다 : 이것은 내 객체 클래스입니다. 문제는 glDrawElements 함수에만 정점을 전달하는 방법을 이해하지 못한다는 것입니다.

꼭지점을 점으로 표시하려면 '면'을 정의해야합니다 (pIndex 변수).

답변

0

아니요, 아니요, 점을 그릴 때 인덱스 배열이 필요하지 않습니다. glDrawElements() 대신 glDrawArrays()을 사용하십시오. glDrawElements()은 인덱싱 된 지오메트리 용이며 glDrawArrays()은 단순히 일련의 정점을 그립니다. 마지막 인수가 정점 수 있음을

gl.glDrawArrays(GL10.GL_POINTS, 0, vertices.length/3); 

주 : 예에서

은으로 glDrawElements() 전화를 교체합니다. vertices 배열에는 각 꼭지점에 대해 3 개의 좌표가 포함되어 있으므로 꼭지점 수를 얻기 위해 배열의 길이를 3으로 나눌 필요가 있습니다.

+0

대단히 감사합니다! 내가 필요한 것! :) – user3578847