自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 PBR - 辐射度量学/光度学

1.辐射通量(radiant power):定义:单位时间内物体表面单位面积上发射的电磁辐射总功率的度量。 符号:P 单位:瓦特(W),量纲为:功/时间,国际单位表达式为:焦耳/秒。 描述:又称辐射功率,实际上辐射源所发出的能量一般情况下由很多波长的单色辐射组成,为了研究各波长的辐射能量,还需要对单一波长的光辐射作相应的规定。2.光通量(luminous flux):定义:人眼所能觉察到的辐射通量或者辐射功率,因为人眼对于不同波长的视见率是不一样的,所以有了光通量。 符号:φ 单位:流明

2020-06-09 09:55:58 983

原创 图形计算中怎么对法线进行正确的矩阵变换

对法向量进行变换应该注意什么?问题提出在图形学中我们难免会遇到要对法线进行空间转换,例如:从Local Space 变换到Word Space,在变换过程中有一点我们需要注意,就是我们在对法向量做非等比变换之后可能会出现法向量不再垂直于几何体切表面的情况,具体情况如下图所示:说明:我们有对应的切线向量u和 对应的发线向量n,如图(a)所示。现在我们对切线u和和对应的法线向量做一个变换...

2019-05-25 14:59:20 458

原创 HLSL Debug In Visual Studio 2017 with Graphics Debugger

1.前序以前用的比较多的Frame Debuger有Render Doc,Graphics Frame Analyzer还有在web端经常会用到的有Spector JS。而以上的工具都有一个共同点,就是调试的时候需要独立于你的代码,对你的可运行程序进行调试,当然也有他的优点,那就是可以实时的修改对应的shader 然后实时的看修改shader后的效果。如果大家有调试需求的可以试试我上边所提到的...

2019-03-25 15:01:09 895

原创 PBRT-01 编译PBRT-V3 并渲染出一个Demo

1.1 网页电子书PBRT的网页版的电子书 :http://www.pbr-book.org/3ed-2018/contents.html,在这里是Physical Based Rendering,Third Edition,学习的话可以参照这里的看书也行。1.2 安装环境我的开发环境是:Win7 VS2017 CMake3.11.1.3 过程1.3.1 首先我们要去...

2019-03-05 11:28:16 3658

原创 将博客搬至CSDN

将博客搬至CSDN 将博客搬家至CSDN。 发表于 2019-02-21 15:31 周某某 阅读(...) 评论(...) 编辑 收藏 markdown_highlight();var allowComments=true,cb_blogId=222372,cb_en...

2019-02-21 15:31:00 131

原创 绕坐标轴旋转矩阵推倒

小记:今天小伙伴们在调试插件接口的时候,发现,将一个物体旋转一定的角度之后,有一部分模型不对,初步的猜测是旋转之后导致了部分Geometry数据异常, 最后查出来就是因为openfl 里边的这个旋转矩阵算的不对导致了,下边仅仅用来记录下一个推到过程。需要了解的一个小知识点:我们在绕着坐标轴在旋转一定的角度的时候,坐标点的位置总是不断改变的,但是只会变换其中两个坐标点,还有一个点是固定...

2018-11-19 09:34:02 5752 5

原创 OpenGL 4.0 Shading Language Cookbook-Chapter 1

闲暇之余在找资料的时候发现了这本Cookbook,然后我就大概的找了下这本书,最后我发现好像也没有哪个中文出版社出版了对应的中文版本(也许是自己寻找的方式不太准确),于是我找到了对应的非扫描版本的英文版,这里我留下了对应的链接(https://pan.baidu.com/s/167VTo4QMGdi0jhjDGry3xQ),供有需要的小伙伴去down下来。原本有想法把这本书自己在博客连载给...

2018-11-05 10:52:35 745

原创 立体角(Solid Angle)

问题来源今天在学习BRDF的时候遇到立体角这个概念,然后自己学习了一遍, 在这里和大家分享一下。立体角定义: 以观测点为球心构造一个单位球(r = 1),任意物体投影到该球面上的投影面积(s),即为该物体对于该观测点的立体角。因此,立体角是单位球面上的一块面积。 二维平面上过渡理解:在二维平面上我们先来理解圆心角这一概念,在这里我们知道 圆心角= s / r,(...

2018-10-25 16:20:41 32690 1

原创 Happy Number

Happy Number Write an algorithm to determine if a number is "happy".A happy number is a number defined by the following process: Starting with any positive integer, replace the number...

2015-10-29 14:41:00 115

原创 leetcode

leetcode Add Digits:Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.For example:Given num = 38, the process is like: 3 + 8 = 11, ...

2015-09-22 10:54:00 152

原创 C++风格的强制性类型转换

C++风格的强制性类型转换 显示类型转换被称为强制类型转换(cast)C风格:(type_id)C++风格:static_cast, dynamic_cast, reinterpret_cast, const_cast在《C++的设计和演化》中告诉我们,解决强制性类型转换的最好的解决方法是使用标准的C++的类型转换,也就是上面提到的四个类型转化。下面我们来看...

2015-07-16 14:15:00 145

原创 VS2010/12多核编译

VS2010/12多核编译 在工作中,我们的一个完整的项目肯定是由多个个解决方案组成的,我们在调试的时候就会不断的去编译修改过的解决方案,如果当修改的解决方案多了以后我们编译的速度就在很大的程度上决定了我们的工作效率。这时候我们就可以利用多核编译。在VS2010和VS2012中我们需要修改一下两个参数:项目 -> 配置属性 -> C/C++ -&gt...

2015-07-15 20:42:00 431

原创 绝不要在构造函数和析构过程中调用virtual函数

绝不要在构造函数和析构过程中调用virtual函数 下面是一个用来塑模股市交易的类: derived的类的构造函数被调用,但是首先得调用基类Transaction的构造函数,但是在后面还得调用virrual函数,这个时候子类的对象的构造还没有完成,那么虚函数也就没有意思,也就可以说虚函数现在还不是虚函数,在derived class对象构造期间,对象的类型还是b...

2015-05-22 11:10:00 152

原创 别让异常逃离析构函数

别让异常逃离析构函数 c++中并不禁止析构函数吐出异常,但是并鼓励这样做,看下面代码: 当vector v被销毁时,它有责任将其中所有的widgets销毁并且回收内存,而在析构第一个元素时候,析构函数会抛出异常,但是第二个vector的时候也会抛出异常,这对于c++来说太多了。这会导致程序不明确的行为。c++不喜欢析构函数吐出异常。 那么如果你的析构函数必须...

2015-05-21 14:46:00 175

原创 void指针

void指针 1.void指针是一种特别的指针 它没有类型或者说这个类型不能判断出指向对象的长度 2.任何指针都可以赋值给void指针 不需转换,只获得变量/对象地址而不获得大小 3.void指针赋值给其他类型的指针时都要进行转换(type *p=(type*)vp) 转换类型也就是获得指向变量/对象大小 4.void指针不能复引用( *vp:这样是错...

2015-05-07 14:45:00 110

原创 c++对象模型和对象内存布局

c++对象模型和对象内存布局 简单对象模型:如下图所示:每一个object是一系列的slots,每一个data member或者function member都有自己的一个slot。这种模型的空间和执行效率都很低。在这个模型中,members本身并不放在object之中。只有指向member的指针才放在object内。表格驱动模型:对象成员...

2015-05-06 14:11:00 129

原创 纯虚函数和抽象类

纯虚函数和抽象类 纯虚函数: 在许多情况下,在基类中没有必要给出有意义的虚函数定义,这时可以把它说明成纯虚函数,把它的定义的工作留给派生类来做。定义纯虚函数的一般形式为: class 类名 { virtual 返回值类型 函数名(参数表)= 0; // 后面的"= 0"是必须的,否则,就成虚函数了 } 纯虚函数是一个在基类中说明的虚函数,但是...

2015-05-05 14:08:00 255

原创 多重继承下的virtual functions

多重继承下的virtual functions 有如下图所示的继承关系: 有如下代码示例: 在早期的未符合c++标准的的编译器上是会报错的,因为对于clone()函数来说,编译器不知道怎么处理处理。但是时至今日c++做了修改,那么这是怎么实现的呢? 这个问题有以下两种解决方案: 一种是在虚函数表中不光存放真正调用函...

2015-05-04 17:04:00 300

原创 virtual member functions(单一继承情况)

virtual member functions(单一继承情况) virtual member functions的实现(就单一继承而言): 1.实现:首先会给有多态的class object身上增加两个members:一个字符串或数字便是class的类型,一个是指针,指向某表格,表格中带有程序的virtual functions的执行期的地址(具体一点是一个o...

2015-05-04 13:29:00 442

原创 主机字节序和网络字节序(大端序,小端序,网络序)

主机字节序和网络字节序(大端序,小端序,网络序) 根据cpu的不同我们可以把主机字节序在内存中存储的顺序叫做主机序,也就是我们常说的,大端机和小端机。我们经常看到的有两种: 1.小端机(内存中以小端序存储的机器);将低字节序存储在开始的地址(及内存较小的内存) 2.大端机(内存中以大端序存储的机器):将高字节序存储在开始的的地址 举个例子:我们将内存从左到右排...

2015-04-28 15:52:00 299 1

原创 C++中结构和类的区别

C++中结构和类的区别 首先从从语言角度来看,c语言是一种结构化的语言,便于按照模块化的方式来组织程序,易于程序员的调试和维护,而对于c++来说,我么可以认为它是标准c的超集。实际上所有的c程序也是c++程序。但两者之间还是有少量的区别。 区别: 结构是C语言中的一种数据的组合的形式,c++从c中继承了结构。在语法上,类与结构类似。在关系上,两者也是很接近的。在...

2015-04-24 12:51:00 291

原创 计时器与信号

计时器与信号 1.1. 睡眠函数 Linux下有两个睡眠函数,原型为: #include <unistd.h> unsigned int sleep(unsigned int seconds); void usleep(unsigned long usec); 函数sleep让进程睡眠seconds秒,函数usleep让进程睡眠usec微秒。 ...

2015-04-23 01:29:00 172

原创 程序处理信号

程序处理信号 1. 用程序发送信号 1.1. kill信号发送函数 原型为: #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); 参数pid为将要接受信号的进程的pid,可以通过getpid()函数获得来给自身发送信号,还可以发送信号给指...

2015-04-23 01:28:00 166

原创 信号处理(二)

信号处理(二) 1.1. sigprocmask信号阻塞 函数sigaction中设置的被阻塞信号集合只是针对于要处理的信号,例如 struct sigaction act; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask,SIGQUIT); sigaction(SIGINT,&a...

2015-04-23 01:27:00 123

原创 信号处理(一)

信号处理(一) 1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件)。信号是硬件中断的软件模拟(软中断)。每个信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD、SIGINT等,它们在系统头文件<signal.h>中定义,也可以通过在shell下键入kill –l查看信号列表,或者键入man 7 signal查看更...

2015-04-23 01:26:00 184

原创 fill函数和fill_n函数

fill函数和fill_n函数 fill_n函数的作用是:给你一个起始点,然后再给你一个数值count和val。把从起始点开始依次赋予count个元素val的值。 注意: 不能在没有元素的空容器上调用fill_n函数 列子: fill函数的作用是:将一个区间的元素都赋予val值。函数参数:fill(first,last,val);//first...

2015-04-21 21:57:00 553

原创 cin,和几个get函数的用法

cin,和几个get函数的用法 1.cin.get(字符变量名):用来接收字符 ch = cin.get(); cin.get(ch); 以上两者均可以 2.cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格 cin.get(a,20);a为字符数组名 3.cin.get(),用来了过滤你输入字符串中的不需要的字符。 4....

2015-04-19 15:59:00 440

原创 程序运行中(BSS段、数据段、代码段、堆栈)

程序运行中(BSS段、数据段、代码段、堆栈) 程序运行中(BSS段、数据段、代码段、堆栈) BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局...

2015-04-18 17:40:00 386

原创 Centos 6.5LAMP服务器(Apache+PHP+MySQL)的搭建

Centos 6.5LAMP服务器(Apache+PHP+MySQL)的搭建 1.首先看下你的防火墙是否处于开启状态,如果是开启状态,按照如下方法来配置你的防火墙(如果你在安装虚拟机时就没有开启过防火墙,那么这一步就省略了): 1、配置防火墙,开启80端口、3306端口 vi /etc/sysconfig/iptables -A INPUT -m sta...

2015-04-14 17:19:00 113

原创 指针和引用

指针和引用 1.引用是已经定义变量的别名。必须在申明引用的时候进行初始化。引用更接近于const指针,一旦和某个变脸关联起来就一直效忠于它,不能改变(可以通过初始化来设置引用,但是不能通过赋值来设置)。 2.传引用传递引用和值不同的一点就是,在函数中,传值得话,在函数内部还会创建一个临时的变量,但是传应用的话就不会,因为引用和需要传进来值就是同一份值。 3.和传...

2015-04-13 13:21:00 101

原创 内联函数

内联函数 1.c++中的内联函数和常规函数一样,它们都是函数。也是按值传递的,如果参数是4+7,函数就会被传递为表达式的值,但是宏就不一样了,它就是进行单纯的替换而已,那么在面对定义宏的时候,如果没有处理好的话就会生成我们意想不到的值,这不是我们想要的(在一定的程度上,使用宏没有使用内联函数安全。如果定义的宏能用内联函数实现就尽量用内联函数来实现)。 2.和普通函...

2015-04-13 10:58:00 115

原创 内存分配(c/c++)

内存分配(c/c++) C++中内存分配 内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1,栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 2,堆,就是那些由new分配的内存块,他们的释放编译器不去管,由...

2015-04-12 17:38:00 108

原创 Linux多线程(三)(同步互斥)

Linux多线程(三)(同步互斥) 1. 线程的同步与互斥 1.1. 线程的互斥 在Posix Thread中定义了一套专门用于线程互斥的mutex函数。mutex是一种简单的加锁的方法来控制对共享资源的存取,这个互斥锁只有两种状态(上锁和解锁),可以把互斥锁看作某种意义上的全局变量。为什么需要加锁,就是因为多个线程共用进程的资源,要访问的是公共区间时(全局变量...

2015-04-11 16:18:00 176

原创 Linux多线程(二)(线程等待,退出)

Linux多线程(二)(线程等待,退出) 1. 线程的等待退出 1.1. 等待线程退出 线程从入口点函数自然返回,或者主动调用pthread_exit()函数,都可以让线程正常终止 线程从入口点函数自然返回时,函数返回值可以被其它线程用pthread_join函数获取 pthread_join原型为: #include <pthread.h> ...

2015-04-11 16:16:00 400

原创 LINUX多线程(一)(创建和退出)

LINUX多线程(一)(创建和退出) 1. Linux多线程概述 1.1. 概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。这就造成进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理器的空转时间支持多处理器和减少上下文切换开销,也就出现了线程。 线程通常叫做轻量级进程。线程是在共享内存空间中并发...

2015-04-11 16:14:00 117

原创 虚析构函数

虚析构函数 虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。 如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。 所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很...

2015-04-10 11:14:00 86

原创 static小结

static小结 static是c/c++中的关键字,主要有三种用法:(1)局部静态变量2)外部静态变量/函数(3)静态数据成员/成员函数一、局部静态变量c/c++局部变量的三种存储形式:auto, static,register1.auto类型分配在栈上, 属于动态存储类别,占动态存储区空间, 函数调用结束后自动释放2.而static分配在静态存储...

2015-04-10 10:42:00 95

原创 Linux进程控制(三)

Linux进程控制(三) 1. 进程间打开文件的继承 1.1. 用fork继承打开的文件 fork以后的子进程自动继承了父进程的打开的文件,继承以后,父进程关闭打开的文件不会对子进程造成影响。 示例: #include <stdio.h> #include <fcntl.h> #include <unistd.h> ...

2015-04-09 22:31:00 109

原创 Linux进程控制(二)

Linux进程控制(二) 1. 进程的创建 Linux下有四类创建子进程的函数:system(),fork(),exec*(),popen() 1.1. system函数 原型: #include <stdlib.h> int system(const char *string); system函数通过调用shell程序/bin/sh –c来...

2015-04-09 22:29:00 145

原创 Linux进程控制(一)

Linux进程控制(一) 1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别。程序是静态的,它是一些保存在磁盘上的指令的有序集合;而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建、调度和消亡的过程,是Linux的基本调度单位。那么从系统的角度看如何描述并表示它的变化呢?在这里,是通过进程控制块(PCB)来描述的。进程控制块...

2015-04-09 22:25:00 173

程序员的SQL金典

实用的书籍,能让你快速的查阅弄懂SQL语句的语法,快速入门SQL语句查询语句的编写

2015-03-25

空空如也

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

TA关注的人

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