自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 ALinux3 与CentOS系统

1.由于买阿里服务器的时候,买的是ALinux,而且ALinux完全兼容Cento7.6所以在命令使用上并无差别。但vim配置时,适配于Cento操作系统的一键配置版无法在ALinux系统完成安装。对于用于时间练习的学生来说,基本功能的操作系统就可满足需求,所以对于各服务器的性能体验不做要求,所以选择CentOS7.6是比较好的方案。Linux通常指内核版本,而Cento,Alinux,RedHat指的是基于Linux内核版本开发的多款操作系统。即使功能上可兼容,但是在配置上还是有明显的界限。

2022-09-26 18:56:06 1926 1

原创 红黑树 图文详解与代码实现

红黑树被应用于数据结构map/set的封装的底层,也应用于Linux的数据内核,在进程调度CFS,虚拟内存管理,共享内存slab等场景都有广泛应用。数据结构的角度看,(1)用于存储。无论数据是否平衡都可以在O(logN)的复杂度下完成 搜索、插入、删除操作。(2)用于排序。找到最小值和最大值红黑树黑色和红色 也可看成两种状态,红黑区分的状态中,可以根据实际需求添加业务逻辑。......

2022-09-01 13:46:57 992

原创 OpenGL 光源分类 行为理论及实现

上篇博客中,实现的镜面反射光,漫反射光探讨的都是简单点光源(不包括衰减),但是并没有考虑到点光源的衰减,接下来将光分为三类,并根据物理抽象出数学模型进行较为真实的光照计算。共性对于每一种光源都有漫射光和平行光的两种成分,漫射光是指在光源中能够被漫反射的光的颜色成分(白色则包括所有颜色),一般分为两种,平行光和点光源。环境光不是光线,但是需要存储,最简单的方法,就是为每个光源设置一个环境等级,然后把它们都放到一个单一项中。平行光是指光源中所有能够被镜面反射的光的颜色成分。设计光照系统其中。..........

2022-08-06 20:57:44 288

原创 C++ 搜索二叉树(BST)模拟实现与应用

比如我们要找到2,我们就可以从根(5)开始,向左移动,意味着我们立刻消除了4个可能的节点。然后在1的右面我们找到了节点,只通过了3步实现了的节点。这个例子就很极端,当树不是最优或不平衡时候,BST的搜索性变差,O(n)可能成为最坏的情况。key-value模型,要求设置唯一键,对其余属性数据进行查找,增删,排序等操作。谈起二分查找,在排序中算是很优秀的搜索算法,但是二分查找的条件要求存储数据必须是。带来的代价也就大了起来,随之程序的效率就会大大下降。选取合适的根节点,调整存储顺序是很重要的因素。......

2022-07-26 22:22:35 409

原创 Debug No5基础光照

所以这里存在的问题一定是,我设置的读取了过多的属性信息,而在rend()环节没有解析着色器中对应变量。或者是我读取的着色器中缺少了属性信息,却解析了一些着色器中不存在的变量。但是无论那种,我都没有看到有报错,除非关于着色器的错误是打开着色器文件的错误或着色器及其明显的语法错误。经再检验发现,因为包装的组件名,与类的成员函数同名,而是此处调用的不是用于编译两个立方体shader的组件方法,而是只调用了一个编译立方体shader的成员方法。解决删除了着色器中的纹理等多余变量,在rend()环节没有绑定纹理。..

2022-07-23 00:21:16 91

原创 Debug No4 利用RenderDoc排查bug

错误原因,多个纹理单元,每次需要重新绑定。要写让Shader理解的程序,如果你前文不交代谁是_texture,还是_texture2,那么shader无法解析。也就是说,循环内每个都是独立程序,所以都需要重新绑定纹理。(而教程中,没有指定纹理单元,是因为是单张纹理单元默认是0.不需额外指定)一种是Shader打错了,另一种是。RenderDoc和VS相比多了报错。可以帮你定位问题所在的地方,大大节省了时间。1.没有绘制出任何轮廓,说明顶点数据传输有问题,Shader无法解读数据。VS2019运行结果。...

2022-07-18 16:26:30 192

原创 OpenGL 摄像机 及阶段性复习

本文将从OpenGL生产流程角度,整理learnOpenGL的应用纹理程序和摄像机的步骤。也对OpenGL近期所学做了一下整理。OpenGL加工流程可分为三部分Asset区。组件生产线。组件装配。Asset组件封装组件装配组件生成模型轮廓。............

2022-07-18 13:54:51 316

原创 Debug No3 多张纹理叠加

解决查dos.gl查文档,研究了下函数的参数。分析图片读入问题,打断点调试,读取成功。解决两张图片不能连续读取,需要在绑定第一张后再读取第二张。原因因为两张图片用的是一个指针,存在调用顺序问题。3.bug状态两张纹理在片段着色器和在主函数调用时,名字不统一,另外一个二元坐标和一个思源坐标输出也不匹配。(1)将获取ID的方法,封装成Shader类的成员方法(2)通过Shader类,获得成员变量ID。在实现了单项纹理应用后,想实践,多项纹理叠加组合。4.bug状态只显示一张纹理,非叠加效果。.........

2022-07-17 10:41:48 155

原创 Debug No2 按流程检查错误

这些方法封装了各个渲染需要的组件的的调用,而具体方法的复杂实现在其对应的类中(如shader类中的编译shader方法,ffImage类中的读取纹理图片等等)。这个过程可以假想成PS内的绘图功能,选定图层,选择画笔样式,设置绘制轮廓(指定数据),设置绘制方式。(1)Asset区,主要包含全局变量的声明,shaderProgram,VAO,VBO等,以及一些外部导入的资源_texture.推测黑色部分信息缺失。3.Bug状态,显示出一张采样信息错误的图片,没有纹理信息。,而不是RGBA,导致没有深度信息。..

2022-07-15 14:54:29 102

原创 Debug No1 总结出现bug的常见解决方案

2022年7月14日 早(debug1.5h+博客0.5h)1.在学习利用VBO和VAO绘制一个三角形时,出现了Bug,提示是:“std::ios_base::failure”报错位置在于Shader文件读入失败。解决:检查了读入代码,无误。又检查了Shader文件的存放位置。应在工程文件夹下的,与主函数文件统一文件夹下。在VS里,存放在资源文件目录下。语法应用场景要明确。2.之后Shader文件中发现"一处拼写错误"。打代码时要专注仔细。3.然后运行之后又出现"返回值异常:-1073741510"解决:刚

2022-07-14 09:16:57 316

原创 VAO详解

(一)VAO详解顶点数组对象是一种OpenGL对象,它存储提供顶点数据所需的所有状态。VAO仅引用缓冲区。作为OpenGL对象,VAO具有通常的创建,销毁和绑定功能:glVertexArrays,glDeleteVertexArrays和glBindVertexArray(VAO只有一个目标)。...

2022-07-08 15:38:06 2633

原创 OpenGL处理错误的方式

这一节主要讲 glGetError,它几乎在每一个 OpenGL 的版本中都有,所以在OpenGL的错误处理上比较常用。

2022-07-07 23:24:27 1883

原创 (T-1) C++知识点补充 ifstream + enum

参考博客: ifstream 的使用方法介绍 一_龙贝尔莱利的博客-CSDN博客_ifstreamofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;代码框架:源码ENUM 参考博客:函数返回值类型为枚举类型 - 管言 - 博客园C++ enum枚举类型_一叶执念的博客-CSDN博客_c++ emun 枚举是个好东西,它和结构体一样,都可以定义一种数据类型,但是枚举有一个更优点,就是它可以默认指定定义的初始值。  有一个项目,涉及到CPU

2022-07-02 23:19:12 100

原创 顶点缓冲区与着色器 (The Cherno + LeranOpenGL)笔记

1.图形渲染管线主要被划分成两个主要部分,第一部分是把物体的3D坐标转换成为2D坐标,第二部分是把2D坐标转变为有实际颜色的像素。一般步骤为:顶点着色器->图元装配->几何着色器->光栅化->片段着色器->Alpha测试与混合。2.图形渲染管线高度专门化,所以大多数显卡可以并行执行,而在GPU上为每一个渲染管线阶段运行各自的小程序,这些小程序的名字就叫做着色器。而且着色器还可以用自己写的着色器(GLSL)代替默认的。 1.顶点缓冲区的概念与辨析 :基本就是去掉vertex,它只是一个内存缓冲区,一个内存字节

2022-07-02 22:50:08 1041

原创 OpenGL新建一个窗口

新建窗口 判断:glfw是否初始化初始化提示(对openGL使用进行说明)初始化窗口 判断:是否生成了窗口渲染循环 主要完成 清除当前缓冲,渲染绘制,交换前后缓冲区,处理回调事件...

2022-06-29 22:48:38 129

原创 A2-1 利用stb_image.h来进行图片的绘制与显示

目录(一)读取图片(二)绘制图片TIP1:Debug:(三)stb_image.h库下载与使用使用教程:TIP2:gittee源代码 如有问题请就指出,谢谢!stb_image 是一个简单易用的图像解码库。这里我们采用图形库stb_image.h来读取图片。思路:(1)从计算机通过stb_image库函数读入一张图片,并将信息封装在Image类中。(2)将读入的图片绘制在画布...

2022-04-23 12:00:52 1618 2

原创 A-2 绘制直线Brensenham算法证明与实现

简介:Bresenhan算法将坐标系分割成棋盘形状,每个像素占有一个棋格,当我们进行采样时(直线斜率小于1),如下图所示,假设给定绘图的起始点为(10,11),那么绘制下一个采样点的坐标必然是从(11,11)和(11,12)中选择一个。如果把这种情况一般化,对于绘制直线的起始点是(Xk,Yk),那么其下一个采样点必然是(Xk+1,Yk)或者(Xk+1,Yk+1)中的一个。作用:消灭浮点数。因为浮点数是不准确的。不多解释,算法并不复杂。证明:(1)思路几个关键点:这是一些定..

2022-04-12 00:44:00 335

原创 C++ 多态原理剖析A-6

多态的两个条件:虚函数重写,基类用引用或者指针来调用虚函数虚函数 定义 格式 类型重写的定义:基类 重写子类重写调用函数 处理虚表虚表的定义虚函数

2022-04-10 19:50:15 487

原创 GAMES104 B1+B2 引擎的结构与开发分层

前言: 不能对一无所知的事物抱有恐惧或幻想,而是要不断了解,去神秘化!本节课的收获还是比较大的,主要让我从对“如何做一个引擎的未知”深感恐惧,到对做引擎的东西有了一个较为相对具体些的认知,到认为做出个引擎是有路可循的。引擎的介绍:1.误区:曾经认为引擎开发就是图形学。然而,完成一个引擎开发,在图形学知识仅有的5%,外其余的广泛都是95%的计算机知识。对于学习来讲,在搭建一个引擎时,要学会设计架构,广泛接触知识,但图形学知识仍是唯一的主线。但是对于工作来讲,是要有一专的!所以还是要在图形学

2022-04-10 19:45:59 3159

原创 计算机图形学L1--1光栅化及其实现---实现点的绘制及雪花

(一)Windows窗体创建及分析1.创建一个窗体的框架。主要流程为1.注册一个窗体 2.生成一个窗体并显示 3.捕捉消息,分发到端口 4.在wndProc里处理信息。描述:窗体程序的运行像一个函数不断的接收信息,然后并不断的处理捕捉信息,然后把信息分发到WndProc中处理和修改!2.了解界面,读懂框架:1)MyRegisterClass:注册一个窗体的类型,包括窗体的大小风格MyRegisterClass是一个窗体类型,ATOM:MyRegisterClass通过函数..

2022-04-01 20:04:59 532

原创 动态规划A-1

动态规划是对暴力“递归算法”的优化,主要是通过数组记录的方法,优化掉一些重复计算的过程。动态规划强调自然智慧 的应用。递归分析问题是抽象的,所以再分析问题时不要过于细节。动态规划的过程:(1)尝试。抽象出一种"尝试的办法",递归解决问题的办法很重要。(2)找到试法中的可变参数,规划成数组表,可变参数一般是0维的,有几个可变参数就是几维的表。(3)找到基础解法,问题最基础的解填入数组表中。(4)根据试法中的递归过程,和基础解法已经填到数组表的值,继续填表。(5)根据问题给定的参数,

2022-02-26 21:00:13 193

原创 #每日一题 设计循环队列

力扣https://leetcode-cn.com/problems/design-circular-queue/审题:1.先进先出:模拟队列2.通过头尾循环利用空间 :双向(头尾连接),题意已经暗示你用数组去模拟。3.操作:功能函数4.示例,便于我们写对返回值和传参伪代码:1.创建一个结构体,里面有指针a,有下标rear和front,(相当于头尾指针)还有k(存装有效数据的个数)2.伪代码:MyCircularQueue*myCircularQueueC...

2022-02-10 18:08:59 621 3

原创 用队列模拟栈(C语言实现)

1.用队列模拟栈注意此处的格式要求要详细阅读/** * Your MyStack struct will be instantiated and called as such: * MyStack* obj = myStackCreate(); * myStackPush(obj, x); * int param_2 = myStackPop(obj); * int param_3 = myStackTop(obj); * bool param_4 = myStackEm

2022-02-09 23:47:19 848

原创 链表3 分析最优链表结构:带头双向循环链表

(一)用途与优点库中,list链表的实现设计。(二)思想具有通性:化特殊为一般的思想方法和节点两个角度(三)处理技巧1.结构:2.复用:3.野指针问题:(四)应用C++STL中 list 的模拟实现1.结构首先了解一下双向带头循环链表(下文中简称DHClist,只用于叙述简便)的结构单元:如图A-1:节点的前指针和后指针都指向自己,有三个属性(data+prev+next)如图A-2:这是一个一般的DHClist,我们在接口传参传入的pli

2022-02-07 14:42:35 933 2

原创 链表2 链表oj题解与专题总结

链表刷题与总结

2022-02-05 21:39:57 503

原创 搭建阿里云+typora+Picgo图床错误分析

昨天尝试安装阿里云图床大致流程是:购买阿里云oos对象存储--->下载Picgo--->下载Typora并配置,上传一张图片保存。操作是按照博客的步骤走的,但是在配置Typora时一直提示上传失败。于是画了近4个小时分析,才上传成功。找错误:大概采用了这几种方式:1.比对着博客,走读了一遍流程。都是按照步骤操作的。2.从阿里云开始,重新创建了一个BL,依然上传失败3.上CSDN比对多篇博客,仔细检查了几个容易出现错误的地方,然而并没有排出错误。4.猜测版本问题,路径问

2022-01-29 18:45:12 993

原创 C++继承 A5

(一)继承的概念及定义1.1继承的概念继承(inheritance)机制是面向对象程序设计使代码可复用的最重要手段。类层次上的复用。相比于面向对象的封装,继体现类与类之间的相互联系。继承中,我们将学习如何处理类与类的关系和数据冲突与复用。1.2继承的定义1.2.1定义:class A : public B , public C派生类(子类) 继承方式 基类 基类(父类)1.格式说明:派生类A,在基类的基础上选择性继

2022-01-23 17:30:44 443 1

原创 C++类与对象A-2

OX与OO的差异及思想传递:对类的理解和分析。类这类型的特殊处理方式和设计:有四个构造函数类。新用法。编译器背景简介1.调用函数方面:2.初始化方面:模拟运行:程序员视角:创建一个类大概如下:编译器视角:如何初始化,变量,如何调用的知识。由于视角差异:启发性的思考几个问题:为什么重载函数要写在外面,学习实现一个重载函数及细节分析?如何设计一个类及思考步骤?怎么重载一个函数及注意事项?结合之前所学如何分析初始化函数的最优方案?对于封装的再理解和代码

2022-01-22 20:21:20 310

原创 每日一题(02):倒置字符串

整理一些入门的数据结构题和算法题。旨在反思与启示。

2022-01-21 22:47:51 507

原创 内存管理A4

首先,写博客要一气呵成,不要托两三天当天的问题当天解决吸收好。然后要有耐心,学习是得有一份耐心的。本文一些内容参考该链接:C++内存管理(超长,例子很详细,排版很好)_caogenwangbaoqiang的博客-CSDN博客_c++ 内存管理(一):C++内存包括内核空间,栈,内存映射段,堆,数据段,代码段。1.首先这里的内存是一个虚拟映射的空间。而物理上的内存则取决于硬件设备的性能。程序跑在操作系统上,也会受内存影响。内存的大小与执行程序的系统有关。在32位程序下,绝大多数内存存在于堆上,栈一

2022-01-15 03:04:31 213

原创 关于C++学习的思考

最近在思考一个问题,怎么能写出一个可以运行的完美的错误程序?1.首先要对常见的语法掌握熟练,因为明显的错误会被编译器检查出来而报错。2.种种巧合,也是一种缘分。让变量处于一种不良的状态。3.企图扩展用法的灵活性而细节忽视。4.不借助于其他调试方式跟踪调试。(比如内存,和反编译角度)看来这并不容易,写出一个正确且规范的C++程序也是很困难的。但花力气学习如何写出一个质量高的程序长远来看是十分有必要的。程序开发中,尤其是投入使用后,改是有代价的。关于学习与错误矫正阶段1.了解语法应用

2022-01-07 11:02:00 493 2

原创 C++入门 过渡知识 A-1

C++语言兼容C语言,与传统的C语言相比,同时C++语言较C语言在语法上有一定的完善,本篇博客主要从一些零散的语法细节上,展示与分析以及还有一些思维的启示。之后还将继续写系列文章。(一)关键字C++关键字常有的有63个左右,其中包含常用的32个关键字。由此可以看出,我们的学习中很多延伸出的关键字,来自许多C++的语法新特性。当然也提示着我们,要充分结合C与C++语言的特性取长补短,是要在框架思维上有一定的改观。”C++沉思录中有提到C++语言编出的程序,在语法细节扎实的前提下,要学会发挥C++的实用

2022-01-05 15:07:04 503

原创 数据结构---顺序表

线性表:顺序表,链表,栈,队列,字符串线性表在逻辑上是线性结构,也就是说连续的一条直线,但是在物理结构上并不一定是连续的。线性表在物理上存储时,通常以数组和链式结构的形式存储。2.我们所指的顺序表一般指数组。数组有静态和动态之分。首先我们理解下顺序表的实质上 数据管理。联系实际我们可想到...

2022-01-01 16:43:26 264

原创 C语言案例:密码设置及登录> 明解getchar与scanf

getchar和putchar用于字符串的获取,用于对字符型的输入输出。而且每次只处理一个字符。输入的字符将返回ASII值。48-57为位数字。2.语法:int char=getchar();获取字符串数组getchar();3.原理介绍:scanf和getchar在等待时输入字符时都有缓冲区,并从缓冲区中拿走输入的字符。区别是,scanf可以拿多个,getchar只能拿一个且限制获取类型限制为字符型。下面说几种用到的情形:(1)输入完成,ctrl+z;(2)我们在做登录系统时往

2021-11-27 20:44:54 1670

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除