openggl中對物體的變換是通過矩陣物件來實現的,需要掌握一些最基本的矩陣運算相關知識。
#include #include #include
我們需要定義頂點著色器,使能夠接收乙個mat4的uniform矩陣,通過變換矩陣左乘位置向量,就可以實現對圖形的變換。
#version 330 core
layout (location = 0) in vec3 apos;
layout (location = 1) in vec2 atexcoord;
out vec2 texcoord;
uniform mat4 transform;
void main()
然後在渲染迴圈中,我們需要加入如下語句以定義我們的變換矩陣,注意**中的定義順序與實際效果的順序是相反的(線性代數知識)。
//定義乙個四維的單位矩陣
glm::mat4 transform;
//再位移,實際執行順序與程式順序相反
transform = glm::translate(transform, glm::vec3(0.5f, -0.5f, 0.0f));
//先旋轉
transform = glm::rotate(transform, (float)glfwgettime(), glm::vec3(0.0f, 0.0f, 1.0f));
最後設定好uniform:
//設定uniform
ourshader.use();
unsigned int transformloc = glgetuniformlocation(ourshader.id, "transform");
//matrix4fv函式把矩陣資料傳送給著色器。引數依次是uniform的位置值、矩陣個數,是否希望置換以及矩陣資料
gluniformmatrix4fv(transformloc, 1, gl_false, glm::value_ptr(transform));
完成之後就可以渲染我們的容器了。
完整的**見這裡
這裡除了右下角的旋轉圖形,還有乙個在左上角不斷縮放的圖形,大致如下所示:
LearnOpenGL學習筆記(六) 紋理單元
version 330 core out vec4 fragcolor in vec3 ourcolor in vec2 texcoord uniform sampler2d ourtexture void main 在剛才的程式中,關於片段著色器的中我們宣告了乙個取樣器 sampler 一般來講我...
LearnOpenGL筆記6光照
last 鏡面光照 現實生活中看到某一物體的顏色並不是這個物體真正擁有的顏色,而是它所反射的 reflected 顏色。換句話說,那些不能被物體所吸收 absorb 的顏色 被拒絕的顏色 就是我們能夠感知到的物體的顏色。當我們把光源的顏色與物體的顏色值相乘,所得到的就是這個物體所反射的顏色 也就是我...
Learn OpenGL基礎書籍推薦
關於opengl的學習資料 c語言我覺得是最值得任何程式設計師花大量的時間學習的語言.原因是 c語言不在可能隨著時間的變化而產生太大的變動,最多也就是一點修修補補.可以說是一朝學會,終生受用 c語言是簡約的,就32個關鍵字,但是基本上現在任何語言都直接或者間接的構建在c語言之上.linux,wind...