2013-04-29 63 views
0

我跟着發現的OpenGL教程here。我現在正在閱讀第2章,它講述了使用glArrayElement來渲染對象的好處。目前,我的代碼如下:使用glArrayElement和LWJGL

glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

    double vertices[] = {100, 200, 0, 200, 100, 0, 100, 100, 0}; 
    double colors[] = {1, .5, .8, .3, .5, .8, .3, .5, .8}; 


    DoubleBuffer vertexBuffer = BufferUtils.createDoubleBuffer(9).put(vertices); 
    DoubleBuffer colorBuffer = BufferUtils.createDoubleBuffer(9).put(colors); 

    glVertexPointer(3, 0, vertexBuffer); 
    glColorPointer(3, 0, colorBuffer); 

    while(!Display.isCloseRequested()) { 

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glBegin(GL_TRIANGLES); 
     glArrayElement(0); 
     glArrayElement(1); 
     glArrayElement(2); 
     glVertex3d(300, 200, 0); 
     glVertex3d(400, 100, 0); 
     glVertex3d(300, 100, 0); 
     glEnd(); 

     //Display.sync(60); 
     Display.update(); 
    } 

第二個三角形,通過調用明確定義爲glVertex3d呈現罰款。第一個三角形根本不渲染。我是否犯了一個簡單的錯誤?

+0

你有沒有考慮過使用花車而不是雙打? – 2013-04-29 03:12:33

+0

有什麼優勢? – williamg 2013-04-29 03:14:41

回答

1

在搜索更多示例代碼時,我遇到了一個片段,說你必須「翻轉每個緩衝區」。添加

vertexBuffer.flip(); 
colorBuffer.flip(); 

就在while循環解決了我的問題!