1、OpenGL有多個標準,如Open ES是為了移動設備,目前通常使用OpenTK.Graphics.OpenGL4對應OpenGL4.x版本,2010年是OpenGL分割領,之前是3版本,之後都是4版本,目前最新4.6,更新頻率不高 2、OpenGL的著色語言GLSL,對應的文件擴展名.vert ...
1、OpenGL有多個標準,如Open ES是為了移動設備,目前通常使用OpenTK.Graphics.OpenGL4對應OpenGL4.x版本,2010年是OpenGL分割領,之前是3版本,之後都是4版本,目前最新4.6,更新頻率不高
2、OpenGL的著色語言GLSL,對應的文件擴展名.vert,類C體系,
GLSL教程參考:
https://www.cnblogs.com/zhxmdefj/p/11241537.html
https://github.com/wshxbqq/GLSL-Card
https://www.jianshu.com/p/66b10062bd67
https://www.cnblogs.com/brainworld/p/7445290.html
3、VBO對象理解:包含頂點數據的存儲緩衝區,通過不同類型的Buffer進行綁定(BufferTarget.ArrayBuffer,GL_ARRAY_BUFFER)
4、VAO對象理解:包含Pointer,這些Pointer是VBO的指向,並且存儲VBO的數據結構和讀取方式
5、VertexAttribPointer和EnableVertexAttribArray函數是輔助VAO的,指向(Pointer)和著色器內的位置是一致的,他們是聯繫在一起的
6、著色器必須是vertexShader(shader.vert)和fragmentShader(shader.frag)組合,一個是頂點的著色器,一個片段的著色器
7、著色器的結構是要聲明版本,接著是輸入和輸出變數、uniform和main函數
8、uniform是全局的,所以uniform 被存儲在硬體被稱為常量存儲,這是一種分配在硬體上的存儲常量值的空間,因為這種存儲需要的空間是固定的,在程式中這種uniform 的數量是受限的
9、GetShader和GetProgram可以用來檢查對應的狀態
資料站點參考:
https://learnopengl-cn.github.io/ (雖然都是C++的案例,但是基本的東西都是一樣的,而且也都能看得懂)
補充(看代碼,看不出VBO和VAO的調用聯繫,其實是VertexAttribPointer和GL_ARRAY_BUFFER有關聯):
在調用VertexAttribPointer時綁定到GL_ARRAY_BUFFER的VBO會和VAO聯繫在一起,由於在調用VertexAttribPointer之前綁定的是先前定義的VBO對象,頂點屬性0
現在會鏈接到它的頂點數據。