OpenGL學習筆記5 著色器練習

2021-10-02 03:00:30 字數 1770 閱讀 7740

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還...