- 博客(34)
- 资源 (1)
- 收藏
- 关注
原创 OpenGL 学习笔记--Assimp模型加载(10)
Assimp模型加载NotesAssimp include,Lib,因为是64位,所以编译器修改为64位,之前的工程都是32位Model.hMesh.h
2020-09-29 23:13:12
619
原创 OpenGL 学习笔记--冯氏光照模型(09)
冯氏光照模型Notes冯氏光照模型主要由三部分构成:环境光照:世界上通常有的一些光亮漫反射光照:模拟光源对物体的方向性影响镜面光照:模拟有光泽物体上面的亮点人眼看到物体的颜色为:光颜色*物体颜色冯氏光照模型表达式Ip=kaia+∑m∈lights(kd(Lm→⋅N→)im,d+ks(Rm→⋅V→)αim,s){{I}_{p}}={{k}_{a}}{{i}_{a}}+\sum\limits_{m\in lights}{({{k}_{d}}(\overrightarrow{{{L}
2020-09-26 21:17:03
592
原创 OpenGL 学习笔记--Camera类(08)
Camera类Notes欧拉角相机 物体世界坐标->观察空间坐标相机的参数包括:相机位置Position,目标位置指向相机Direction,以及Up方向glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);注册键盘回调函数 glfwSetCursorPosCallback(window,
2020-09-25 22:12:54
598
原创 OpenGL 学习笔记--矩阵变换(07)
矩阵变换Notesglm矩阵变换矩阵相乘顺序 trans->scale->translate->rotate模型作用顺序 rotate->translate->scaleglm::mat4 trans;trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5));trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));trans = glm::rotate
2020-09-24 07:37:08
383
原创 OpenGL 学习笔记--纹理&纹理混合(06)
纹理与纹理混合Notes生成纹理对象texture[0],texture[1],通过stbi_load加载图片,设置纹理的环绕和过滤方式,生成具体纹理,根据当前绑定的纹理自动生成所需要的多级渐远纹理GL_TEXTURE0纹理单元激活并绑定到texture[0]纹理上,GL_TEXTURE1纹理单元激活并绑定到texture[1]纹理上,片段着色器采样器ourTexture1使用GL_TEXTURE0纹理单元,ourTexture2使用GL_TEXTURE1纹理单元顶点着色器通过VBO输入纹理坐标,
2020-09-21 07:44:51
561
原创 OpenGL 学习笔记--纹理&颜色混合(05)
纹理设置Notes通过stbi_load加载图片,生成纹理对象,设置纹理的环绕和过滤方式,生成具体纹理texture0,根据当前绑定的纹理自动生成所需要的多级渐远纹理默认GL_TEXTURE0纹理单元激活并绑定到texture0纹理上,片段着色器采样器使用GL_TEXTURE0纹理单元顶点着色器通过VBO输入纹理坐标,输出纹理坐标到片段着色器片段着色器采样器通过Uniform绑定纹理单元,默认激活&绑定texture0,与颜色进行混合代码示例https://gitee.com/Ni
2020-09-21 07:15:16
624
原创 OpenGL 学习笔记--彩色长方形(04)
彩色正方形NotesVBO多个属性 ,对写入VBO的数据进行解释,包括与顶点着色器关联位置,顶点大小,数据类型,是否需要标准化,步长,数据在CPU内存中的偏移,最后启用顶点属性const char* vertexShaderSource = "#version 400 core\n""layout (location = 0) in vec3 aPos;\n""layout (location = 3) in vec3 aCol;\n""out vec4 vertexColor;\n""v
2020-09-20 20:11:20
140
原创 OpenGL 学习笔记--绘制长方形(03)
绘制正方形Notes顶点索引EBO,生成EBO对象,绑定EBO,将EBO数据写入GPU,使用Elements绘制glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);glDrawElements(GL_TRIANGLES, sizeof(indices
2020-09-20 19:39:03
648
原创 OpenGL 学习笔记--绘制三角形(02)
绘制三角形OpenGL绘制流程Notes代码示例https://gitee.com/NiMiKiss/opengl-notes.git#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>const unsigned int SCR_WIDTH = 800;const unsigned int SCR_HEIGHT = 600;const float vertices[
2020-09-20 17:43:48
178
原创 OpenGL 学习笔记--环境搭建(01)
OpenGL环境搭建OpenGL简介CMake工具CMake工具下载https://cmake.org/download/CMake工具安装完成安装GLFW搭建GLAD搭建GLAD在线服务选择定义的OpenGL版本,GLAD根据这个版本加载所有OpenGL函数点击生成,下载glad.zip...
2020-09-20 09:13:53
399
原创 c++ 设计模式--访问者模式(25)
案例:男人和女人对成功,失败,恋爱的表现不同访问者模式访问者模式简介(VisitorPattern)通常具有访问者和被访问元素两个主要角色,被访问的元素常常具有固定种类不同的类型,不同的访问者可以对他们提供不同的访问方式。访问者模式结构Visitor(抽象访问者): 声明具体元素的不同访问方法ConcreteVisitor(具体访问者): 实现对具体元素不同的访问方法Element(抽象元素): 声明accept()方法,以具体访问者作为参数传入ConcreteElement(具体元素):
2020-09-15 23:08:35
142
原创 c++ 设计模式--解释器模式(24)
案例:音乐解释器解释器模式解释器模式简介(InterpreterPattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式结构AbstractExpression(抽象表达式): 声明了抽象解释操作TerminalExpression(终结符表达式): 实现与文法中的终结符相关的解释操作,不能再分级NonterminalExpression(非终结符表达式): 实现与文法中非终结符解释操作,需要终结符继续完成解释Context
2020-09-15 07:50:20
114
原创 c++ 设计模式--享元模式(23)
案例:创建固定种类类型的网站,区别在于使用的用户不同享元模式享元模式简介(FlyweightPattern)运用共享技术有效地支持大量细粒度的对象,提供一个享元池存储好已经创建好的对象,通过享元工厂类提供给客户端,实现相同或相似细粒度对象的复用。享元模式结构Flyweight(抽象享元类): 声明了享元类抽象公共方法ConcreteFlyweight(具体享元类):实现抽象公共方法,通常享元类结合单例模式实现,保证每个享元对象只被创建一次UnsharedConcreteFlyweight(非
2020-09-15 07:26:43
169
原创 c++ 设计模式--中介者模式(22)
案例:American和Iraq通过联合国会话中介者模式中介者模式简介(MediatorPattern)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互中介者模式结构Mediator(抽象中介者): 声明用于一系列对象之间交互的接口ConcreteMediator(具体中介者): 聚合了一系列交互对象,实现交互Colleague(抽象交互对象): 声明交互的公共接口,维护了一个抽象中介者引用ConcreteColl
2020-09-14 21:34:22
3046
原创 c++ 设计模式--职责链模式(21)
案例:小菜有加薪和请假的请求职责链模式职责链模式简介构造一系列分别承担不同的职责的类的对象来共同完成一个任务,对象由每一个对象和下一个职责对象的引用连接想成职责链条。避免将一个请求的发送者和接受者耦合在一起,让多个对象都有机会处理请求,将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。职责链模式和状态模式职责链模式中各个对象不指定其下一个处理的对象到底是谁,由客户端设定职责链条,相当于switch…case,把各个业务逻辑状态封装到不同的职责类中,每个职责类携带下一个
2020-09-14 07:29:50
86
原创 c++ 设计模式--命令模式(20)
案例:小菜和大鸟去吃烧烤,向服务员点了烤羊肉串和烤鸡翅命令模式命令模式简介(CommandPattern)将请求命令的发送者和命令的执行者完全解耦,每一个请求封装为一个对象,从而可以使用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作命令模式结构Command(抽象具体类): 声明用于执行命令的接口ExecuteCommandConcreteCommand(具体命令类): 实现执行命令的接口,由具体的接收者完成操作(将具体的请求封装为对象)Invoker(调用者):
2020-09-13 22:13:45
71
原创 c++ 设计模式--桥接模式(19)
案例:不同的手机品牌,运行不同的通讯录和游戏桥接模式桥接模式简介(BridgePattern)桥接模式将两个独立变化的维度设计成两个独立的继承等级结构,在抽象层建立起两者的关联关系,将抽象部分与它的实现部分分离,使它们可以独立地变化桥接模式结构Abstract(抽象类): 抽象类定义抽象业务方法接口,聚合了一个Implementor对象Implementor(实现类): 实现类定义抽象基本操作接口RefindeAbstraction(扩充抽象类): 实现抽象类接口,调用Implemento中
2020-09-13 21:47:46
107
原创 c++ 设计模式--迭代器模式(18)
案例:坐公交车,售票员给每个人都要买票迭代器模式迭代器模式定义(IteratorPattern)提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示迭代器模式结构Iterator(抽象迭代器): 声明访问和遍历聚合对象接口ConcreteIterator(具体迭代器): 实现抽象迭代器声明的方法,通常有一个聚合对象,一个游标记录迭代器在聚合对象中所处的位置,Aggregate(抽象聚合类): 用以存储和管理元素对象,声明一个创建迭代器接口,可以看作是一个抽象迭代器工厂Co
2020-09-13 10:24:21
80
原创 c++ 设计模式--组合模式(17)
案例:公司管理分级结构组合模式组合模式简介(CompositePattern)组合模式将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性组合模式和装饰模式组合模式和装饰模式都可以用来透明的把对象包装在具有同样接口的另一个对象中。组合模式和装饰模式都是结构型模式。组合模式着眼于把众多子对象组织为一个整体;装饰模式着眼于在不修改现有对象或从其派生子类的前提下为其增添职责,其子对象只有一个组合模式结构Component(抽象构件): 定义了叶
2020-09-13 08:38:59
191
原创 c++ 设计模式--备忘录模式(16)
案例:打游戏存档功能备忘录模式备忘录模式简介(MementoPattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式结构Originator(发起人):通过创建一个备忘录用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。根据需要决定备忘录存储哪些状态Memento(备忘录): 存储发起人对象的内部状态,并可防止发起人以外的其他对象访问备忘录Caretaker(负责人): 负责保存好多个备忘录对象,
2020-09-12 22:05:34
127
原创 c++ 设计模式--适配器模式(15)
案例:打篮球请外援需要翻译适配器模式适配器模式简介(AdapterPattern)将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作适配器模式结构适配器类(Adapter): 适配器与适配者之间是继承或实现关系适配者类(Adaptee): 适配器与适配者之间是关联关系目标抽象类(Target): 定义客户所需要的接口适配器模式代码示例https://gitee.com/NiMiKiss/design-pattern.git
2020-09-12 21:23:51
107
原创 c++ 设计模式--状态模式(14)
案例: 小菜加班没完没了状态模式(State Pattern)状态模式简介状态模式将一个对象的状态从对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式结构Context(上下文类): 拥有多种状态的对象。维护了一个抽象状态类的实例,由具体的状态类来决定实例化哪一种状态State(抽象状态类): 封装与在上下文类中的一个特定状态相关的行为ConcreteState(具体状态类):实现在各种不同状态对应
2020-09-05 21:04:19
121
原创 c++ 设计模式--观察者模式(13)
案例: 电脑插入U盘/DVD,界面模块/媒体管理模块/系统模块都要进行更新观察者模式观察者模式简介(ObservePattern)观察者模式建立了一(目标)对多(观察者)的依赖关系,目标改变将自动通知其他观察者。观察者模式结构Subject(目标):被观察的对象,目标中定义了一个观察者的集合,即一个目标有多个观察者,通过Attach( )和Detach( )方法来增删观察者对象。目标中定义了通知方法Notify(),用于自身状态发生改变时通知观察者ConcreteSubject(具体目标):实
2020-09-05 08:29:57
138
原创 c++ 设计模式--外观模式&建造者模式(11,12)
案例:睡觉前可以一次性关闭电视,电脑,灯外观模式(FasadePattern)外观模式简介外观模式为子系统的一组接口提供统一的入口,定义了一个高层接口,使得子系统更加容易使用。简化客户端和子系统之间的交互,方便客户端使用。外观模式结构Fasade(外观角色):外观角色知道多个相关子系统的功能,将所有从客户端发来的请求委派给相应的子系统作相应处理SubSystem(子系统角色):子系统是一个类,或者由多个类组成的类的集合,实现外观角色要求的具体实现外观模式示例#ifndef _FASAD
2020-09-01 23:46:11
264
原创 c++ 设计模式--模板方法模式(10)
案例:打开PPT,World,Excel文件都要经历搜索文件->选择文件->检查文件名称->读取文件。除了具体读取文件方式不同,其余步骤基本相同模板方法模式模板方法模式简介(Template Method Patter)模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤模板方法模式结构AbstractClass(基类) 基类中定义或声明了一系列基本操作method, 这些操作是具体或者抽象的,
2020-08-31 23:33:27
121
原创 c++ 设计模式--单例模式(09)
单例模式单例模式简介(Singleton Pattern)单例模式指确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。单例模式必须满足:1. 这个类只能有一个实例;2. 必须自己创建这个实例;3. 必须自己向整个系统提供这个实例单例模式结构单例模式示例注:单例模式结合多线程,有多种实现方式,这里用一种比较常用的方式拷贝构造和赋值构造函数被删除,默认构造函数为私有#ifndef _SINGLETON_PATTERN_#define _SINGLETON_PATTERN_
2020-08-31 23:15:41
148
原创 c++ 设计模式--原型模式(08)
案例:小韩和小梅去民政局领结婚证(结婚照片),民政局需要出示小韩和小梅分别出示身份证(身份照片)和户口簿(户口照片)原型模式(Prototype)原型模式定义原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式结构抽象原型类(AbstractPrototype):声明克隆Clone自身的接口具体原型类(ConcretePrototype):实现Clone接口客户端(Client):客户端通过抽象原型类中静态方法Clone具体原型类对象实例注: 静态成员和静态
2020-08-30 23:29:22
142
原创 c++ 设计模式--简单工厂模式&工厂方法模式&抽象工厂模式(02,06,07)
案例 计算器工厂方法简单工厂模式(Sample Factory Pattern)简单工厂模式定义定义一个简单工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类简单工厂模式结构工厂(Factory):根据客户提供的具体产品类的参数,创建具体产品实例抽象产品(Abstract Product):具体产品类的基类,包含创建产品的公共方法具体产品(Concrete Product):抽象产品的派生类,包含具体产品特有的实现方法,是简单工厂模式的创建目标#ifnde
2020-08-29 22:15:19
189
原创 c++ 设计模式--代理模式(05)
案例: B帮助A追求C代理模式代理模式定义代理模式是一种对象结构型模式,在该模式中引入了一个代理对象,在客户端和目标访问对象之间起到中介的作用。代理对象可以屏蔽或删除客户不想访问的内容和服务,也可以根据客户需求增加新的内容和服务代理模式结构Subject(抽象主题角色): 声明了代理主题角色和真实主题角色共同接口;Proxy(代理主题角色): 代理主题角色通过关联关系引用真实主题角色,可以控制和操纵真实主题对象,同时还可以在调用真实主题对象操作之前或之后增加新的服务和功能;RealSubje
2020-08-27 07:59:13
102
原创 c++ 设计模式--装饰模式(04)
案例:手机->贴膜->戴保护套->贴卡通贴纸->系手机挂绳装饰模式(Decorator_Pattern)装饰模式定义装饰模式是一种用于替代继承的技术。通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。装饰模式中引入了装饰类,在装饰类中既可以调用带装饰的原有对象方法,还可增加新的方法,以扩充原有类的对象。装饰模式结构装饰模式示例#ifndef _DECORATOR_PATTERN_#define _DECORATOR_PATTER
2020-08-27 07:15:53
131
原创 c++ 设计模式--简单工厂模式&策略模式(01,03)
案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费正常原价收费八折收费满300反100简单工厂模式(Sample Factory Pattern)简单工厂模式定义定义一个简单工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类简单工厂模式结构工厂(Factory):根据客户提供的具体产品类的参数,创建具体产品实例抽象产品(Abstract Product):具体产品类的基类,包含创建产品的公共方法具体产品(Concrete Product)
2020-08-25 22:06:58
316
原创 c++ 学习笔记--内存new & delete(03)
C语言&C++语言C语言Data(global)+Functions=>create_variables全局变量+全局方法构建全局变量实现功能,没有对象概念,功能复杂情况下变量和方法区分不开C++语言class,struct(Data_Members+Functions_Member)=>create_objects变量和方法封装在class/struct构建对象,对象使用自己的变量和方法来实现功能Stack&Heapstackstack是存在于某作用域(sco
2020-08-22 08:27:08
179
原创 c++ 学习笔记--class String(02)
class String#ifndef __STRING__#define __STRING__#define _CRT_SECURE_NO_WARNINGS#include <cstring>class String{public://构造函数,传入字符串指针 String(const char* cstr=0); String(const String&am
2020-08-22 07:06:11
226
原创 c++ 学习笔记--class Complex(01)
C语言和C++语言C语言Data(global)+Functions=>create_variables全局变量+全局方法构建全局变量实现功能,没有对象概念,功能复杂情况下变量和方法区分不开C++语言class,struct(Data_Members+Functions_Member)=>create_objects变量和方法封装在class/struct构建对象,对象使用自己的变量和方法来实现功能class complex //防止头文件重复包含#ifndef __COM
2020-08-21 20:46:37
462
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人