拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程

完成了最簡單的着色器sample後,咱們學一下shader基於片元的光照。
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
代碼也都加過註釋,這裏也不作過多累述。效果以下圖所示:
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
那麼怎麼在工程裏調用shader呢?我這裏給你們提供了一個文教叫作「glslprogram.cpp」,包含了C++的類用來處理shader相關操做。文件在github上。主要調用方法以下:git

拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
這是加載,編譯和鏈接shader的,若是報錯,也會打出相應的錯誤信息日誌,以供debug。github

下面是調用方法,在OpenGL的Display()函數(或實現相同功能的函數)中,這樣使用這個C++類:算法

拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
全部和shader相關的參數設置放在Use()和Use(0)之間。ide

若是要使用紋理映射的話,其實和以前區別也並不大,首先寫好shader內容:
完成了最簡單的着色器sample後,咱們學一下shader基於片元的光照。
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
而後回到你的C++文件中,在Use()和Use(0)之間,以下設置參數以及綁定紋理:
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
注意你爲shader設置的參數要和你當前紋理號相對應,如上圖紅色區域。函數

這樣就又能夠獲得地球啦,只是此次是基於shader來作的:
拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
關於shader目前就先講這麼多,具體demo能夠到公司Github官網下載。Shader其實仍是很複雜的內容,我曾今一個學期學習了shader相關內容,被虐得很慘,今天這一講內容只是很是淺顯的內容,還涉及不到一些複雜的算法等。可是應用仍是很是普遍的,不單單是OpenGL Shader,在一些引擎好比Unity中,不是採用GLSL,而是CG/HLSL進行編寫,流程上也會有些改變。學習

拓幻圖形學工程師教學手冊(第九講)|一字一字敲出OpenGL學習教程
可是不能看出,其實大同小異,Pass就是至關於今天講的in/out的概念,從第一個stage的shader到下一個stage的shader。由於咱們仍是主要關注OpenGL相關內容,因此我在這裏只介紹GLSL。在南藝我可能會去講述如何在Unity中實現FaceU,B612,Snapchat中3D道具效果,以及如何使用shader實現大眼瘦臉,網紅臉美顏效果,這裏先作個預告,具體安排還得聽Unity官方消息通知。debug

相關文章
相關標籤/搜索