2010-09-19 63 views

回答

28

我不知道有什麼好的指導,但我可以讓你快速摘要

我會假設你如果不這樣做已經很熟悉着色器,頂點緩衝區等的基本知識,我建議你讀了有關着色器第一導而是因爲所有的OpenGL 3是基於着色器

在初始化的用法:

  • 創建和使用glGenBuffersglBindBuffer(GL_ARRAY_BUFFER, bufferID)和填充頂點緩衝區

  • 同爲索引緩衝區,除非你使用GL_ELEMENT_ARRAY_BUFFER,而不是GL_ARRAY_BUFFER

  • 就像你在OpenGL的早期版本中確實做到了創建紋理(glGenTexturesglBindTextureglTexImage2D

  • 使用創建着色器glCreateShader,使用glShaderSource設置他們的GLSL源代碼,並用glCompileShader編譯它們;您可以檢查它是否與glGetShaderiv(shader, GL_COMPILE_STATUS, &out)成功,並使用glGetShaderInfoLog

  • 創建程序檢索錯誤信息(即一組着色器結合在一起,通常是一個頂點着色器和一個片段着色器)與glCreateProgram,然後綁定要使用着色器glAttachShader,然後鏈接該程序使用glLinkProgram;就像着色器可以檢查與glGetProgramglGetProgramInfoLog

連接成功,當你想畫:

  • 綁定使用glBindBuffer帶參數GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFER分別

  • 頂點和索引緩衝區

    綁定程序與glUseProgram

  • 現在,對於着色器中的每個變量變量,必須調用glVertexAttribPointer,其語法與傳統的glVertexPointer,glColorPointer等相似函數,除了它的第一個參數,它是變化的標識符;此標識符可通過在鏈接的程序上調用glGetAttribLocation來檢索

  • 對於着色器中的每個統一變量,必須致電glUniform;它的第一個參數是統一變量的位置(也是一種標識符),您可以通過調用glGetUniformLocation(警告:如果您有一個名爲「a」的數組,您必須使用「a [0] 「)

  • 對於要綁定每個紋理,你必須調用glActiveTextureGL_TEXTUREi(i是對每個紋理不同),然後glBindTexture然後均勻的值設置爲我

  • 呼叫glDrawElements

Thi s是你必須做的基本事情。當然,還有其他的東西,比如頂點數組對象,統一的緩衝區等等,但它們僅僅用於優化目的。

其他域像剔除,混合,視口等仍然大部分與舊版本的OpenGL相同

我也建議你研究this demo program(它使用頂點數組對象)。最有趣的文件是main.cpp中

希望這可以幫助

+0

一個更好的現代的OpenGL(核心3.2+)「的簡短總結:」我在一段時間看到的。從1.x/2.x開始,嘗試通過更新的教程獲得最新信息可能會更有意義。作爲思維導圖很好。 – Aktau 2013-08-28 14:51:39

+2

絆倒我的一件事是,你必須使用VAO和VBO來繪製。否則,在調用glVertexAttribPointer時會得到GL_INVALID_OPERATION。至少在Mac OS X上就是這種情況。 – YRH 2013-10-25 12:40:35

相關問題