4 用位置作為顏色
做一下learnopengl最後的三個練習。
修改頂點著色器讓三角形上下顛倒:參考解答
使用uniform定義乙個水平偏移量,在頂點著色器中使用這個偏移量把三角形移動到螢幕右側。參考解答
使用out關鍵字把頂點位置輸出到片段著色器,並將片段的顏色設定為與頂點位置相等(來看看連頂點位置值都在三角形中被插值的結果)。做完這些後,嘗試回答下面的問題為什麼在三角形的左下角是黑的?:參考解答
直接在之前在檔案中讀取shader的基礎上繼續。
這個相當簡單,直接把y座標乘上乙個負一就行了。
#version 330 core
layout
(location =0)
in vec3 apos;
layout
(location =1)
in vec3 acolor;
out vec3 color;
out vec3 posi;
void main()
結果:
這個也很簡單,但是想搞點花樣。讓這個偏移可以被控制。只要檢測輸入,在輸入的基礎上修改uniform的值就可以了。
先放結果:
建立兩個全域性變數,作為偏移量和修改偏移量的速度。
float offsetxinput =0;
float inputspeed =
0.01
;
然後獲取輸入,通過鍵盤按下a/d修改offsetxinput的值。本來想像平時unity裡面一樣用個time.deltatime來控制一下輸入的,但是好像沒有找到相應的api,連獲取幀率都沒有,然後試了一下直接乘數值也沒有太大問題,就直接乘數值吧。
// 處理輸入
// 這個函式在渲染迴圈中呼叫,用於處理輸入
void
processinput
(glfwwindow* window)
elseif(
glfwgetkey
(window, glfw_key_d)
== glfw_press)
}
在渲染迴圈內如下操作,將偏移量傳入shader。(在上一次我們建立好shader類的基礎上才可以這樣,不然的先獲取位置,再用glfw的函式修改)
/*傳入偏移*/
myshader.
setfloat
("offsetx"
, offsetxinput)
;
之前試過,左下角是黑的,不好看,不做了。
為什麼是黑的就是因為左下角的座標是負的,然而shader中處理rgb就用0~1,低於0就都當成黑色處理了。
OpenGL著色器程式解析 著色器基礎
部分內容 於 現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,...
Opengl(四) 著色器
1.opengl確保至少有16個包含4個元素的頂點屬性可用。2.不同著色器之間的資料傳輸,在傳送方中宣告乙個輸出,在接收方中宣告乙個同名輸入。3.uniform是全域性的,uniform會一直保留他的資料,直到他被重置或更新。4.設定uniform的方式 glint x glgetuniformlo...
著色器與OpenGL
現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,opengl還...