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)