GLSL向量的一些操作
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關鍵字:
表示這是一個常量函式,在該函式中,不能改變類的成員變數,
//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)例外處理
//拋出例外,運算式的值的型別可以是基本型別,亦可以是類
throw 運算式;
//try…catch
try{
陳述句組
}
catch(例外型別) {
例外處理代碼
}
...
catch(例外型別) {
例外處理代碼
}
執行 try 塊中的陳述句,如果執行的程序中沒有例外拋出,那么執行完后就執行最后一個 catch 塊后面的陳述句,所有 catch 塊中的陳述句都不會被執行;
如果 try 塊執行的程序中拋出了例外,那么拋出例外后立即跳轉到第一個“例外型別”和拋出的例外型別匹配的 catch 塊中執行(稱作例外被該 catch 塊“捕獲”),執行完后再跳轉到最后一個 catch 塊后面繼續執行,
讀取檔案時的目錄設定

兩種路徑引數:
相對路徑,由根目錄開始:” 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2104.html
標籤:其他
