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)