學習OpenTk,筆記六

學習OpenGL、OpenTK

1、接上篇投影矩陣的源碼分析

glm::ortho和Matrix4.CreateOrthographicOffCenter源碼一致,根據示例裏面的進行代碼翻譯改造

 改造如下:

        public Matrix4 GLMOrthographic(float left , float right, float bottom, float top)//glm::ortho
        {
            var result = Matrix4.Identity;
            result.Row0.X = 2 / (right - left);
            result.Row1.Y = 2 / (top - bottom);
            result.Row2.Z = 1;
            result.Row3.X = -(right + left) / (right - left);
            result.Row3.Y = -(top + bottom) / (top - bottom);
            return result;
        }
unsigned int transformLoc = glGetUniformLocation(ourShader.ID, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));
/*
第一個參數你現在應該很熟悉了,它是uniform的位置值。
第二個參數告訴OpenGL我們將要發送多少個矩陣,這裏是1。
第三個參數詢問我們是否希望對我們的矩陣進行轉置(Transpose),也就是說交換我們矩陣的行和列。
OpenGL開發者通常使用一種內部矩陣佈局,叫做列主序(Column-major Ordering)佈局。
GLM的默認佈局就是列主序,所以並不需要轉置矩陣,我們填GL_FALSE
最後一個參數是真正的矩陣數據,但是GLM並不是把它們的矩陣儲存爲OpenGL所希望接受的那種,因此我們要先用GLM的自帶的函數value_ptr來變換這些數據。
*/
GL.UniformMatrix4(_uniformLocations[name], false, ref data);

 然後就可以渲染文本了,原先給的例子裏面沒有渲染文本的一塊,其中的LearnOpenTK中調用UniformMatrix4函數transpose參數使用true和C++示例中使用false有點誤導,需要明白參數的左右是行列轉換,目前就是默認的列主序,GLM也是使用列主序,不需要額外轉換。本身給的學習示例還是太少,擴展學C++的示例。參考:https://github.com/opentk/LearnOpenTK/blob/master/Common/Shader.cs 和 https://learnopengl.com/code_viewer.php?code=in-practice/text_rendering 

2、OpenTK內的函數基本都是OpenGL轉換過來,在源碼https://github.com/opentk/opentk/tree/master/src/Generator.Bind/Specifications/Docs 中可以看到,函數名基本一致,去除了一些後綴,C++的代碼很容易移植後使用

3、音頻庫可以使用NAudio https://github.com/naudio/NAudio 用得非常廣泛,園子裏有很多文章

4、https://github.com/liuww111/LearnOpenTK4 這是本人學習的例子,可以參考

5、多素材加載的時候要注意釋放資源,養成良好習慣,避免衝突,比如VAO和VBO,使用完要記得釋放資源,避免其他地方綁定資源的時候衝突,特別是自己封裝對象的時候

GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
GL.BindVertexArray(0);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章