自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Estelle

三维图形渲染学习者

  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

转载 相机基础知识

原文链接:深入理解Android相机体系结构之九_u012596975的博客-CSDN博客本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、简介二、基本硬件结构三、手机相机简介一、简介相机的硬件层,作为整个框架的最底层,通过硬件模块接收来自客观世界的真实光影效果,将其转换为计算机所熟知的数字信号,并按照一定的数据格式向上源源不断提供成稳定并成像效果优秀的图像数据,整个部分复杂且高效,可以说是,一个优秀的硬件基础,就好比为整个相机框架的地基,..

2021-09-29 18:27:04 1970 1

转载 解决 “fatal: Could not read from remote repository.“和ssl_read: connection was reset errno 10054

记录一下在参考廖雪峰的网站学习git添加远程库和从远程库克隆时遇到fatal: Could not read from remote repository解决方法参考https://blog.csdn.net/weixin_40922744/article/details/107576748问题描述:在使用Git将本地仓库推送到远程仓库的时候,发生了如下错误:“fatal: Could not read from remote repository.”问题原因:出现这错误一般是以下两种原因

2021-04-12 11:18:44 414

转载 centos中执行apt-get提示apt-get command not found

先说结论: 在centos下用yuminstallxxxyum和apt-get的区别:一般来说著名的linux系统基本上分两大类:RedHat系列:Redhat、Centos、Fedora等 Debian系列:Debian、Ubuntu等RedHat系列常见的安装包格式rpm包,安装rpm包的命令是“rpm-参数” 包管理工具yum 支持tar包Debian系列常见的安装包格式deb包,安装deb包的命令是“dpkg-参数” 包管理工具apt-...

2021-04-09 20:34:12 1276

原创 《C++编程规范》

第一章 命名原则1.1 关于类型名类型名找那个每个英文单词的第一个字母大写,其他小写,最后以_T结尾。类型名包括class、struct、uinon、typedef、enum以及namespace的名字。注意:缩写字当作普通字处理,即只有首字母大写1.2 关于变量和函数名变量和函数名中首字母小写,其后每个英文单词的第一个字母大写,其他小写。注意:所写字当作普通字处理,即只有首字母大写1.3 关于全大写的函数名有一类函数,它们调用普通函数,只是对普通函数的错误返回做一般化处理。这些函数的名字要

2020-12-30 20:16:19 817

原创 《深度探索C++对象模型》读书笔记-第七章

第七章 站在对象模型的类端Template模板是c++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。因此可以说,模板是一种对类型进行参数化的工具。template<class T> 和template<typename T>都可以用来定义函数模板和类模板,在使用上,他们俩没有本质的区别。函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。Note...

2020-12-16 14:59:13 194

原创 《深度探索C++对象模型》读书笔记-第六章

第六章 执行期语意学一、对象的构造与解构1.全局对象Matrix identity;main(){ //identity必须在此处被初始化 Matrix m1=identity; ... return 0;}C++保证,一定会在main()函数中第一次用到identity之前,把identity构造出来,而在main()函数结束之前把identity摧毁掉。像identity这样的所谓全局对象,如果有构造函数和析构函数的话,就说它需要静态的...

2020-12-15 12:06:09 169

转载 《深度探索C++对象模型》读书笔记-第五章

原文链接:第5章 构造, 析构, 拷贝语意学第5章 结构、拷贝语意学纯虚函数和抽象类抽象类(abstract class): 含有(类内声明的或继承来的)纯虚函数的类即为抽象类. 纯虚函数的声明方法如下:class point { /**/ };class Shape // abstract class{ point center;public: point where() { return center; } void move(point p) { cen

2020-12-14 14:08:45 144

转载 《深度探索C++对象模型》读书笔记-第四章

原文链接:第4章 Function语意学第四章 Function语意学本文从编译器的角度讨论如何解析类成员函数调用.成员函数的调用普通非静态成员函数C++的设计准则之一就是: nonstatic member function 至少必须和一般的 nonmember funciton 有相同的效率.为了保证类成员函数的效率, 编译器将对普通非静态成员函数的调用转换为对普通函数的调用. 步骤如下:修改函数签名, 添加一个额外的参数(作为第一个参数), 称为this指针. 由此将函

2020-12-14 11:08:50 179 1

转载 《深度探索C++对象模型》读书笔记-第三章

这一章主要进一步讨论C++对象的内存布局, 特别是在引入继承, 虚函数, 多继承, 虚继承后对内存布局的影响, 还包含编译器对相关特性的实现方式和优化.下面的代码运行于 Archlinux 4.18 x86_64, 编译器是gcc 8, 使用gdb 8调试.不含数据成员的类对象对于不存在继承和虚函数的类, 没有数据成员时, 其大小至少是1 byte, 以保证变量有唯一的地址. 当加上虚函数后, 由于有虚函数指针, 对象大小等于一个指针的大小, 32位系统中是4 bytes, 64位系统中是8 b

2020-12-14 10:46:00 230

转载 《深度探索C++对象模型》读书笔记-第二章

第二章 构造函数语义学一个参数的构造函数可以被编译器作为转换函数构造函数(当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数成为转换构造函数), 这会带来意料之外的结果. C++增加了关键字explicit来阻止对函数的隐式调用.“只有一个参数的构造函数可以被编译器作为类型转换函数"从C++11起被废止, 新标准规定具有多个参数的构造函数也可以作为转换构造函数, 新的标准是"没有被声明为explicit的构造函数就可以作为转换构造函数(converting construc

2020-12-12 21:24:06 179

原创 《深度探索C++对象模型》读书笔记-第一章

第一章 关于对象一.C++对象模型(The C++ Object Model)在C++中,有两种class data members(数据成员):static(静态数据)和nonstatic(普通非静态数据),以及三种class member function(成员函数):static(静态成员函数),nonstatic(非静态成员函数)和virtual(虚函数)。如下例子:class Point{public:Point(float xval);virtual ~Point(); /

2020-12-12 20:18:11 209

转载 UML介绍及怎么看UML图

最近做毕业设计,用到了libcitygml开源库,获取到一张citygml的UML图,就顺便简单了解一下它!一、简介UML(Unified Modeling Language),直接翻译就是统一建模语言。二、UML的作用UML可以帮助我们做软件需求分析和软件设计的工作三、UML分类UML有很多种图,大体可以分为两类:结构型的图和行为型的图。(1)结构型的图(描述的是某种行为,这种结构在某段时间内应该是稳定的、“静态”的)类图对象图构件图部署图包图(2)行为型的图(涉及大量的流程、过

2020-12-04 20:18:23 2282

原创 Xshell连接到虚拟机Linux系统及中间遇到的问题

没想到在这个问题上耗了一个早上,记录一下,避免大家也踩坑首先是Xshell的下载与安装,可以按照这个教程:https://www.zhangshengrong.com/p/yOXDZemeaB/我们在xshell连接linux系统之前,先看一下我们的虚拟机有没有连上网(ping www.baidu.com试一下),如果连不上网,可以参考这篇博客来解决https://blog.csdn.net/qq_36408196/article/details/103390303?utm_medium=distr

2020-10-16 15:18:42 139

原创 力扣459-重复的子字符串

重复的子字符串给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False示例 3:输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)class Solution {public:

2020-09-15 15:14:27 165

原创 力扣 翻转字符串字的单词【C++】

翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。解析:我们可以分两步进行(1)首先翻转整个字符串(2)遍历翻转后的字符串,去掉字符串中多余的空格,翻转每个单词,最后去掉字符串结尾的多余空格cla...

2020-09-15 14:34:34 186

原创 力扣 存在重复元素 【C++】

存在重复元素给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。示例1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false分析:可以用一个哈希表来存放每个元素的下标,遍...

2020-09-12 16:13:50 172

原创 力扣N数相加总结【C++】

1. 两数之和给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]分析:首先,我们可以想到暴力法,用两层for循环来找;我们也可以用哈希表来存放第一个数组中的元素和对应的下标,然...

2020-09-12 15:30:30 397 1

原创 力扣 二叉树的层平均值

二叉树的层平均值给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。解析:这个题类似于二叉树的层次遍历,并且把每层的元素分别存储,返回一个二维数组代码如下:/** * Definition for a binary tree...

2020-09-12 11:13:24 123

原创 力扣数组经典题 【C++】

class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int minLen=INT_MAX; if(nums.size()==0) return 0; for(int i=0;i<nums.size();i++) { int sum=0; for(int j=i;j<.

2020-09-06 21:08:30 597

原创 力扣283 移动零【C++】

移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。分析:这个题有两个要求:(1)把零元素移动到数组末尾 (2)保持非零元素的相对顺序我们可以遍历一遍数组,用j来记录当前不为0的元素的下标位置,当遇到下标为零的元素,就把它的值赋给j位置的元素,最后j位置之前的元素全部为非零元素,将j后面的元素全部置为0即可。

2020-09-03 11:14:38 193

原创 【动态规划】-剪绳子,整数拆分

剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4,.

2020-08-28 20:58:08 137

原创 力扣21 合并两个有序链表【C++】

合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4方法一:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo.

2020-08-26 17:19:13 370

原创 力扣 阶乘尾数【C++】

阶乘尾数设计一个算法,算出 n 阶乘有多少个尾随零。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.分析:要在末尾产生0,那么肯定是5*2,就算是原数中包含0也可以分解,所以我们把题目简化为寻找阶乘中5的个数,即n/5,但是要考虑到这只找到了n中是5倍数的所有数,例如25,即在25!中找到了5个是5的倍数的数分别为5,10,15,20,25,要注意这之中的25依然可以分解为5的倍数...

2020-08-26 11:39:56 230

原创 力扣27 移除元素【C++】

移除元素给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,1...

2020-08-25 16:39:18 811

原创 力扣35 搜索插入位置【C++】

题目来源:https://leetcode-cn.com/problems/search-insert-position/给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输.

2020-08-24 21:54:15 270

原创 力扣1544 -整理字符串

给你一个由大小写英文字母组成的字符串 s 。一个整理好的字符串中,两个相邻字符 s[i] 和 s[i + 1] 不会同时满足下述条件:0 <= i <= s.length - 2s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。注意:空字符串也属于整理好的字符串,尽管

2020-08-23 23:39:19 427

原创 栈实现队列,栈的最小值

剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","de.

2020-08-23 11:07:08 331

原创 剑指Offer-重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。考查的知识点:树、dfs、数组首先,我们要知道树的遍历有以下三种:前序遍历:根->左->右中序遍历:左->根->右后序遍历:左->右->根已知前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1

2020-08-19 22:07:43 76

原创 剑指Offer-从尾到头打印链表

题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。本题知识点:链表看到这道题:第一个想到的就是首先存到vector里,然后reverse代码如下:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/vector<

2020-08-19 21:21:46 63

原创 剑指Offer-替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。本题考点:字符串这里我们看一下char*和char[]的区别:char[]定义的是一个字符数组,数组中的元素是字符强调的是数组 char str[10]; 定义了一个有十个元素的数组,元素类型为字符。 C语言中定义一个变量时可以初始化。 char str[10] = {"hello worl

2020-08-19 19:48:29 124

原创 剑指offer-二维数组中的查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。本题考查的知识点是:数组、查找首先回顾下常用的查找算法:顺序查找和二分查找顺序查找:逐个的查找,找到返回true或该元素下标,找不到则返回false或-1;二分查找:前提是有序数组中查找,从中间元素开始,若找到则返回true或该元素下标,如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素

2020-08-19 18:36:22 116

原创 网格模型简化思想之聚类思想和二次误差测度

一、模型聚类将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其它簇中的对象相异,数学描述如下:给定一个数据样本集合X={X1,X2,,,,Xn},可以根据数据样本点之间的相似程度将它们划分成K个簇:C={C1,C2,,,,Cn},其中Xi={Xi1,Xi2,Xi3,,,,Xim}和Xj={X...

2019-09-18 16:38:27 893

原创 视相关细节层次网格简化方法(VDPM-LOD)

基于视相关技术的 LOD 允许使用复杂度可变的三角形网格面来渲染同一个对象, 可以根据对象和视点的相关位置来动态调整网格的复杂性 。当对象接近视点时细化三角形网格 , 当对象远离视点时粗化三角形网格 。在没有视觉损失的情况下, 以此保证稳定的交互帧速率。可见性预处理可见性预处理是依据视锥准则、背面剔除准则和屏幕投影误差准则,从原始网格模型中快速搜索出当前的视相关网格和点集,从而大幅度减少后...

2019-09-01 20:38:46 660

转载 渐进网格

我们今天看一下网格的应用,当然也是看一下,D3DX库提供的与网格相关的接口,结构和函数。例如,我们从磁盘上面加载一个复杂的3D模型并将该模型绘制出来,或者利用渐进网格接口来控制网格的细节层次。ID3DXBuffer接口是一种泛型数据结构,该接口为D3DX可所使用,并将数据存储在一个连续的内存块中。该接口有两个方法:...

2019-09-01 15:20:00 803

原创 操作系统之输入输出系统

I/O系统通常把I/O设备及其接口线路、控制部件、通道和管理软件称为I/O系统,把计算机的主存和外围设备的介质之间的信息传送操作称为输入输出操作。按照输入输出特性,I/O设备可以划分为输入性外围设备、输出型外围设备和存储型外围设备。按照输入输出信息交换的单位,I/O设备可以划分为字符设备和块设备。输入型外围设备和输出型外围设备一般为字符设备,它与内存进行信息交换的单位是字节,即一次...

2019-08-14 21:20:39 1241

原创 操作系统之存储器的层次

存储器的层次计算机系统的存储器可以分为寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质等7个层次。如上图所示,越往上,存储介质的访问速度越快,价格也越高。其中寄存器、高速缓存、主存储器和磁盘缓存均属于存储管理的管辖范畴,掉电后它们存储的信息不再存在。固定磁盘和可移动存储介质属于设备管理的管辖范畴,它们存储的信息将被长期保存。而磁盘缓存本身并不是一种实际存在的存储介质,它...

2019-08-14 20:46:39 842

原创 GLSL中Uniform块

Uniform块当着色器程序变复杂时,用到的uniform变量数量也会上升。通常会在多个着色器程序中用到同一个uniform变量。由于uniform变量的位置是着色器链接的时候产生的(也就是glLinkProgram()的时候),因此它在应用程序中获得的索引可能会有变化,即使我们给uniform变量设置的值可能是完全相同的。而uniform缓存对象就是一种优化uniform变量访问,以及在不同...

2019-08-11 21:17:17 1174

原创 三维场景渲染之天空体生成

天空模型仿真方法静态天空体主要是用天空纹理进行贴图,为了渲染能用较好的效果,静态天空体渲染对纹理的要求较高,金泰天空体的优点是在三维产经渲染时不会对程序造成负担,因为它的纹理是一开始载入的,之后无需动态更新,缺点是渲染出来的天空不够逼真。动态天空体动态天空体的生成一般有两种方法,第一种是动态的生成天空纹理。一般使用柏林噪声算法生成该种纹理。柏林噪声算法生成的云彩真实感强,但却有个很...

2019-08-11 19:48:34 1069

原创 三维渲染之地形渲染

地形渲染是三维场景的重点,地形渲染的质量和效率直接影响整个场景渲染的质量和效率。一般来说,为了渲染出更加真实的地形,则地形的单个网格要尽量小,这样才能保证地形各个部分更加的精细。但如果网格变小,则对系统的开销也就大了,从而会影响渲染的效率。因此地形算法的设计实际上就是围绕着渲染质量和渲染效率这两方面的取舍,针对不同的硬件平台和设计目的,以求达到最合适的选取。地形渲染算法目前,有两种主要的地...

2019-08-11 17:02:38 2506

原创 三维渲染引擎

概念三维渲染引擎,即将现实中各种物质以各类曲线或多边形的形式抽象出来,再通过计算机输出最终图像的算法实现的集合。分类三维渲染引擎主要分为:实时三维渲染引擎和离线三维渲染引擎。实时三维渲染引擎主要用于游戏中三维画面的生成,而离线三维渲染引擎用于视频中三维画面的生成。对物质的抽象方式三维渲染引擎对物质的抽象主要有多边形和NURBS曲线(非均匀有理B样条)两种。实时引擎用多边...

2019-08-11 15:47:16 7110

c++求职知识点总结.docx

这是本人在求职过程中总结的一套C++开发岗面试常考知识点,其中包含了C++基础知识,数据结构,算法,设计模式,计算机网络,数据库的常考内容,有需要的可以下载

2021-04-09

空空如也

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

TA关注的人

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