LearnOpenGL筆記(3)着色器

GLSL向量的一些操做c++

vec2 someVec;

vec4 differentVec = someVec.xyxx;

vec3 anotherVec = differentVec.zyw;

vec4 otherVec = someVec.xxxx + anotherVec.yxzy;

定義着色器類函數

  (這部分是c++的知識欠缺工具

class Shader
{
public:
	unsigned int ID;

	Shader(const GLchar* vertexPath,const GLchar* fragmentPath);

	void use();
	//uniform工具函數
	void setBool(const std::string &name, bool value) const;
	void setInt(const std::string& name, int value) const;
	void setFloat(const std::string& name, float value) const;
};

const關鍵字:spa

表示這是一個常量函數,在該函數中,不能改變類的成員變量。3d

//1//從文件讀取
	std::string vertexCode;
	std::string fragmentCode;
	std::ifstream vShaderFile;
	std::ifstream fShaderFile;
	//保證ifstream對象能夠拋出異常
	vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
	fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
	try {
		//打開文件
		vShaderFile.open(vertexPath);
		fShaderFile.open(fragmentPath);
		std::stringstream vShaderStream, fShaderStream;
		//讀取文件的緩衝內容到數據流中
		vShaderStream << vShaderFile.rdbuf();
		fShaderStream << fShaderFile.rdbuf();
		//關閉文件處理器
		vertexCode = vShaderStream.str();
		fragmentCode = fShaderStream.str();
	}
	catch (std::ifstream::failure e) {
		std::cout << "ERROR:SHADER::文件讀取失敗" << std::endl;
	}
	const char* vShaderCode = vertexCode.c_str();
	const char* fShaderCode = fragmentCode.c_str();

try &catch(throw)異常處理code

//拋出異常,表達式的值的類型能夠是基本類型,亦能夠是類
throw 表達式;
//try…catch
	try{
		語句組
	}
	catch(異常類型) {
		異常處理代碼
	}
	...
	catch(異常類型) {
		異常處理代碼
	}

執行 try 塊中的語句,若是執行的過程當中沒有異常拋出,那麼執行完後就執行最後一個 catch 塊後面的語句,全部 catch 塊中的語句都不會被執行;orm

若是 try 塊執行的過程當中拋出了異常,那麼拋出異常後當即跳轉到第一個「異常類型」和拋出的異常類型匹配的 catch 塊中執行(稱做異常被該 catch 塊「捕獲」),執行完後再跳轉到最後一個 catch 塊後面繼續執行。對象

讀取文件時的目錄設置blog

 

兩種路徑參數:字符串

相對路徑,由根目錄開始:」 Resource/pos_color_outpos.fs」

絕對路徑:「F:\\c++\\MyOpenGL\\MyOpenGL\\Resource\\pos_color_outpos.vs 「

 

絕對路徑就是電腦地址欄的路徑:

 

另外由於\在字符串裏是轉義字符,改用\\表示\

 練習題

使用out關鍵字把頂點位置輸出到片斷着色器,並將片斷的顏色設置爲與頂點位置相等(來看看連頂點位置值都在三角形中被插值的結果)。作完這些後,嘗試回答下面的問題:爲何在三角形的左下角是黑的

 

渲染結果

 

 

 

由於全部點的z=0,因此顏色上rgb藍色一直爲0(沒有藍色

能夠明顯看出左下角的座標是(0,0,0),因此是黑色

而後從顏色上看,→是紅色的正方向,及x軸正方向。

↑是綠色、y軸正方向,z軸還看不出來。

(由於opengl是右手座標系,實際上向前是z軸的正方向)

 

  (拇指食指貼xy軸_彎曲中指的方向就是z軸_抓.jpg)

相關文章
相關標籤/搜索