- 博客(34)
- 收藏
- 关注
原创 被忽略的C++(一)
文章目录被忽略的C++(一)C++ Primer(第六版)第一章 预备知识1.2 C++简史1.2.4 C++和泛型编程1.2.5 C++的起源1.3 可移植性和标准1.4 程序创建的技巧1.4.2 编译和链接被忽略的C++(一)C++ Primer(第六版)第一章 预备知识1.2 C++简史C++的作者Bjarne Stroustrup1.2.4 C++和泛型编程泛型编程是C++支持的另一种编程模式。它与OOP的目标相同,即使重用代码和抽象通用概念的技术更简单OOP强调的是编程的数据方
2020-06-21 20:35:04 195
原创 《OpenGL编程指南》 笔记十 几何着色器
文章目录第十章 几何着色器10.1 创建几何着色器10.2 几何着色器的输入和输出10.2.1 几何着色器的输入10.2.2 特殊的几何着色器图元10.2.3 几何着色器的输出10.3 产生图元10.3.1 几何体的裁剪10.3.2 几何体的扩充10.4 transform feedback高级篇10.4.1 多重输出流10.4.2 图元查询10.4.3 使用transform feedback的...
2020-04-08 23:30:02 543
原创 《OpenGL编程指南》 笔记九 细分着色器
文章目录第九章 细分着色器9.1 细分着色器9.2 细分面片9.3 细分控制着色器9.3.1 生成输出面片的顶点9.3.2 细分控制着色器的变量9.3.3 细分的控制四边形细分等值线细分三角形细分忽略细分控制着色器9.4 细分计算着色器9.4.1 设置图元生成域9.4.2 设置生成图元的面朝向9.4.3 设置细分坐标的间隔9.4.4 更多的细分计算着色器layout选项9.4.5 设置顶点的位置9...
2020-04-05 21:13:51 871
原创 《OpenGL编程指南》 笔记八 程序式纹理
文章目录第八章 程序式纹理8.1 程序式纹理8.1.1 规则的花纹条纹砖块8.1.2 玩具球8.1.3 晶格8.1.4 程序式着色方法的总结8.2凹凸贴图映射8.2.1 应用程序设置8.2.2 顶点着色器8.2.3 片元着色器8.2.4 法线贴图8.3 程序式纹理的反走样8.3.1 走样的来源8.3.2 避免走样问题8.3.3 提高分辨率8.3.4 高频率的反走样生成条纹预先解析滤波自适应的解析滤...
2020-03-29 14:07:36 1030
原创 《OpenGL编程指南》 笔记七 光照与阴影
文章目录第七章 光照与阴影7.1 光照介绍7.2 经典光照模型7.2.1 不同光源类型的片元着色器没有光照环境光方向光点光源聚光灯7.2.2 将计算移到顶点着色器7.2.3 多个光源和材质多个光源材质属性双面光照7.2.4 光照坐标系7.2.5 经典光照模型的局限7.3 光照模型进阶7.3.1 半球光照7.3.2 基于图像的光照7.3.3 球面光照7.4 阴影映射7.4.1 创建一张阴影贴图7.4...
2020-03-11 22:11:12 636
原创 《OpenGL编程指南》 笔记六 纹理(二)
文章目录第六章 纹理6.9 纹理视图6.10 压缩纹理6.11 滤波6.11.1 线性滤波6.11.2 使用和生成mipmap6.11.3 计算mipmap级别6.11.4 mipmap细节层次控制6.12 高级纹理查询函数6.12.1 显示细节层次6.12.2 显示梯度设置6.12.3 偏移后的纹理获取6.12.4 投影纹理6.12.5 着色器中的纹理查询6.12.6 收集纹素6.12.7 合并...
2020-03-05 22:02:21 1250
原创 《OpenGL编程指南》 笔记六 纹理(一)
文章目录第六章 纹理6.1 纹理映射6.2 基本纹理类型6.3 创建和初始化纹理6.3.1 纹理格式内部格式外部格式6.4 代理纹理6.5 设置纹理数据6.5.1 显示设置纹理数据6.5.2 使用Pixel Unpack缓存6.5.3 从帧缓存拷贝数据6.5.4 从文件加载图像6.5.5 查询纹理数据6.5.6 纹理数据布局6.6 采样器对象6.6.1 采样器参数6.7 使用纹理6.7.1 纹理坐...
2020-02-25 20:51:26 1386
原创 《OpenGL编程指南》 笔记五 视口变换、剪切与反馈
文章目录第五章 视口变换、剪切与反馈5.1 观察视图5.1.1 视图模型5.1.2 相机模型视锥体视锥体的剪切5.1.3 正交视图模型5.2 用户变换5.2.1 矩阵乘法的回顾5.2.2 齐次坐标进阶:什么是齐次坐标5.2.3 线性变换与矩阵平移缩放旋转透视投影正交投影5.2.4 法线变换5.2.5 OpenGL矩阵OpenGL中的矩阵行与列第五章 视口变换、剪切与反馈5.1 观察视图将三...
2020-02-21 18:32:16 900
原创 《OpenGL编程指南》 笔记四 颜色、像素和帧缓存(二)
文章目录颜色、像素和帧缓存4.6 逐图元的反走样4.6.1 线段的反走样4.6.2 多边形的反走样4.7 帧缓存对象4.7.1 渲染缓存4.7.2 创建渲染缓存的存储空间4.7.3 帧缓存附件4.7.4 帧缓存的完整性4.7.5 帧缓存的无效化4.8 多重渲染缓存的同步写入4.8.1 选择颜色缓存来进行读写操作4.8.2 双源混合4.9 像素数据的读取和拷贝返回值的截断处理4.10 拷贝像素矩形...
2020-02-19 18:11:59 1283
原创 《OpenGL编程指南》 笔记四 颜色、像素和帧缓存(一)
文章目录颜色、像素和帧缓存4.1 基本颜色理论4.2 缓存及其用途颜色缓存深度缓存模板缓存4.2.1 缓存的清除4.2.2 缓存的掩码4.3 颜色与OpenGL4.3.1 颜色的表达与OpenGL4.3.2 顶点颜色4.3.3 光栅化4.4 多重采样4.4.1 采样着色4.5 片元的测试与操作4.5.1 剪切测试4.5.2 多重采样的片元操作4.5.3 模板测试模板查询4.5.4 模板的例子4.5...
2020-02-19 18:06:38 1527
原创 《OpenGL编程指南》 笔记三 OpenGL绘制方式
文章目录OpenGL绘制方式3.1 OpenGL图元3.1.1 点点精灵3.1.2 线、条带与循环线3.1.3 三角形、条带与扇面将多边形渲染为点集、轮廓线或者实体多边形面的反转和裁剪高级技巧3.2 OpenGL缓存数据3.2.1 创建与分配缓存3.2.2 向缓存输入和输出数据缓存的部分初始化读取缓存的内容3.2.3 访问缓存的内容异步和显示的映射3.2.4 丢弃缓存数据3.3 顶点规范3.3.1...
2020-02-13 23:00:26 513
原创 《OpenGL编程指南》 笔记二 着色器基础
文章目录第二章 着色器基础2.1 着色器与OpenGL2.2 OpenGL的可编程管线2.3 OpenGL着色语言概述2.3.1 使用GLSL构建着色器从这里出发变量的声明变量的作用域变量的初始化构造函数聚合类型访问向量和矩阵中的元素结构体数组2.3.2 存储限制符uniform存储限制符buffer存储限制符shared存储限制符2.3.3 语句算术操作符操作符重载控制流循环语句流控制语句函数参...
2020-02-12 00:01:09 585 1
原创 《OpenGL编程指南》 笔记一 OpenGL概述
文章目录第一章 OpenGL概述1.1 什么是OpenGL1.2 初始OpenGL程序1.3 OpenGL语法1.4 OpenGL渲染管线1.4.1 准备向OpenGL传输数据1.4.2 将数据传输到OpenGL1.4.3 顶点着色1.4.4 细分着色1.4.5 几何着色1.4.6 图元装配1.4.7 剪切1.4.8 光栅化1.4.9 片元着色1.4.10 逐片元的操作1.5 第一个程序的深入分析...
2020-02-10 00:26:11 531
原创 《最长的一帧》笔记
第一日: eventTraversal 处理鼠标、键盘事件,以及摄像机与场景图形的事件回调 updateTraversal 负责遍历所有的更新回调,以及更新DatabasePager与ImagePager两个重要的分页数据处理租组件 randeringTraversals 使用复杂的线程处理方法,完成场景的筛选(cull)和绘制(draw)工作 _eventQu...
2020-02-07 23:06:53 942
原创 工厂模式(Factory Pattern)
工厂模式(Factory Pattern)简单工厂模式:UML类图:代码实现:class Pizza{ void prepare(); void bake(); void cut(); void box(); std::string m_Name;}class CheesePizza : public Pizza{}...
2020-01-30 11:45:33 140
原创 装饰模式(Decorate Pattern)
装饰模式(Decorate Pattern)描述:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的代替方案注意:装饰者和被装饰者必须是一样的类型缺点:利用装饰着模式,常常造成设计中有大量的小类,可能会造成使用此API程序员的困扰代码举例:class Beverage{public: virtual std::string getDescriptio...
2020-01-30 11:41:44 221
原创 观察者模式(Observer Pattern)
观察者模式(Observer Pattern)出版者 + 订阅者 = 观察者模式在该模式中,将出版者改名为“主题”,将订阅者改名为“观察者”描述:定义了对象之间一对多的依赖关系,这样一来,当一个对象改变状态时,其他的所有依赖者都会收到通知,并自动更新代码举例:class Subject{public: Subject() { m_bState = false; ...
2020-01-30 11:37:21 119
原创 策略模式(Strategy Pattern)
策略模式(Strategy Pattern)描述:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的用户UML 类图:代码举例:class FlyBehavior{ virtual void fly();}class FBA : public FlyBehavior{ virtual void fly() { st...
2020-01-30 11:33:24 143
原创 UML 类图
UML 类图六种关系继承(Generalization)实现(Realization)关联(Association)聚合(Aggregation)组合(Composition)依赖(Dependency)继承(Generalization)描述:类与类的继承关系,子类带有父类的特性和操作图形表示:空心三角形+实线,由子类指向父类代码表现:继承class Anima...
2020-01-30 11:25:06 349
原创 实现纹理贴图
实现纹理贴图在vertex shader中添加纹理坐标的变量:attribute vec2 texcoord,因为需要纹理坐标才能实现纹理贴图;还要添加一个varying变量,因为这个texcoord是从vertex shader中传进来,到fragment shader中使用的,而fragment shader中没有attribute这种类型的变量,所以把texcoord在vertex sh...
2019-09-04 18:07:22 406
原创 生成纹理对象
生成纹理对象声明一个纹理对象 GLuint texture;创建这个纹理对象 glGenTextures(1, &texture);把刚新建的纹理对象设置为当前操作的纹理对象 glBindTexture(GL_TEXTURE_2D, texture);下面开始操作这个纹理对象设置纹理像素相关的参数//第一个参数:表示操作一个2d纹理;//第二个参...
2019-09-04 13:28:09 357
原创 ElementButterObject的使用
ElementButterObjectElementButter是指导如何组织vbo里的数据绘制图元的。如果没有ebo,在绘制图元的时候,是顺序调用vbo里的数据的。有了ebo之后就可以指定顺序调用了。使用ebo的步骤:声明ebo定义ebo索引数据设置当前的GL_ELEMENT_ARRAY_BUFFER为ebo将ebo的索引数据从cpu的内存块发送到gpu的内存上去设置当前的GL...
2019-08-20 15:42:46 128
原创 如何获取shader中的变量并赋值(二)
设置shader中的attribute变量将vbo中的顶点数据设置到attribute变量里设置当前的数据集:把vbo设置为当前要绘制图形的数据集,就是程序或者叫shader在绘制的时候去vbo取数据glBindBuffer(GL_ARRAY_BUFFER, vbo);启用attribute变量的插槽,这里是positionLocationglEnableVertexAttr...
2019-08-19 23:29:31 1082
原创 如何获取shader中的变量并赋值(一)
如何获取shader中的变量并赋值(一)如何将数据设置到shader中去?比如mvp三大矩阵,比如顶点数据在shader中有一个槽的概念。槽的编号是从0开始的。OpenGL会把槽和attribute、uniform等类型的变量对应上,就像下面这样:attribute的变量对应到attribute的插槽上uniform的变量对应到uniform的插槽上我们给shader中变量设置值...
2019-08-19 22:15:14 2839
原创 把shader放到GPU上执行
把shader放到GPU上执行加载shader代码编译shader删除shader代码创建程序1. 创建程序2. 把编译好的shader绑定到程序上3. 链接程序4. 把shader从程序上解绑删除shader int fileSize = 0; unsigned char* shaderCode = LoadFileContent("Res/test.vs", file...
2019-08-19 19:37:12 566
原创 将编译好的shader链接成程序
将编译好的shader链接成程序shader编译好后需要链接成程序才能在gpu上执行链接步骤创建一个程序将编译好的shader绑定到上一步创建的程序上链接程序链接后将shader从程序上解绑检查错误GLuint CreateProgram(GLuint vsShader, GLuint fsShader){ GLuint program = glCreateProgr...
2019-08-19 18:38:38 162
原创 编译shader
编译shader编译shader根据shader的种类,来创建一个shader的对象获取shader对应的代码用显卡驱动编译shader编译错误的处理GLuint CompileShader(GLenum shaderType, const char* shaderCode){ GLuint shader = glCreateShader(shaderType);//根据...
2019-08-19 18:21:15 603
原创 shader处理的数据是什么
vbo 代表显卡中个一块空间shader是在显卡上执行的程序,最终是在gpu的core上跑的当shader在显卡上执行时,就是我们用指令来绘图的时候。在绘图的时候,gpu...
2019-08-19 17:52:47 126
原创 将数据从cpu发送的gpu
将数据从cpu发送的gpucup端的数据用c/c++获取的数据都是在cpu端把数据发送到gpu需要通过vertexbufferobject,将数据从cpu发送到gpu声明vbo变量GLuint vbo;调用OpenGL的驱动,申请一个vbo对象,并将vbo的地址修改为gpu内存中的某个地址,也就是显存中的某个地址 glGenBuffers(1, &...
2019-08-19 16:57:05 1772
原创 在Win32程序中创建OpenGL渲染环境
在Win32程序中创建OpenGL渲染环境创建opengl渲染环境步骤:选定像素格式 //WinMain() HDC dc = GetDC(hwnd); PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); pfd.nVersion = 1; pfd.nSize = si...
2019-08-19 16:35:49 512
原创 创建Win32窗口程序
创建Win32窗口程序创建Win32窗口程序的步骤创建窗口程序构造窗口注册窗口创建窗口显示窗口用户操作创建Win32窗口程序创建win32项目包含win32窗口程序头文件WinMain()函数INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowC...
2019-08-18 12:51:26 546
原创 Git命令
Git命令安装Git Bash安装完成后还需要两步设置$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"创建版本库$ git init把文件添加到仓库$ git add readme.txt把文件提交到仓库$ git ...
2019-08-16 19:31:10 136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人