自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

野生的声威的专栏

不试试怎么知道自己行不行

  • 博客(80)
  • 资源 (4)
  • 收藏
  • 关注

原创 图形相关笔记

Shadow Volumehttps://www.cnblogs.com/chandler00x/p/3958407.html?utm_source=tuicool&utm_medium=referralshadow volume是长啥样的https://blog.csdn.net/jxw167/article/details/65435329这篇理论讲得比较浅显易懂h...

2020-02-14 04:29:28 372

原创 前向渲染(Forward Rendering)和延迟渲染(Deferred Rendering)

前向渲染(Forward Rendering)它的实现最贴合我们的思维逻辑,当我们渲染模型时,只需要关心画模型然后直接处理光照,让它自己去做深度测试,最后深度测试过的都显示在屏幕上。1、对要渲染的物体进行遍历渲染出shadowmap2、再遍历一遍上面要渲染的物体,根据shadowmap对每一个物体的像素进行光照计算优点很明显,就是简单,并且可以针对每个物体指定它的材质,因为每个...

2020-01-28 00:39:20 5039

原创 基本光照模型

组成基本方法是把进入摄像机的光线分成4个部分,每个部分分别有一种分发来计算其贡献度自发光(emissive):物体本身产生的光高光反射(specular):光线从光源照到物体表面反射到眼睛里的光漫反射(diffuse):这个部分是光线从光源照到物体表面时,物体向各个方向产生的光。环境光(ambient):这个部分用来描述其他间接的光。我觉的可以理解成整体的一个基础颜色公式自发光...

2020-01-27 19:41:23 657

原创 广告牌技术(Billboard)

作用在3D空间里创建一个面片,使其始终面向摄像机。不同于UI的一点,是因为它在3D空间里,会有近大远小的特点,而UI大小始终不变。由于需要渲染两个三角面,所以是一种常用的优化手段。普遍用于游戏中的粒子,当然有些骚操作还会用来替代模型(近处是模型,镜头拉远到一定程度就替换成图片)缺点因为细节比较少,并且有始终面向摄像机的特性,所以如果用来替代模型的话,其他镜头角度就会穿帮。原理其...

2020-01-27 17:17:24 973

原创 水波纹

早在没当程序员之前其实就接触过格式工厂了,当时经常把玩它的图片区域,因为水波纹效果实在太酷炫了。然后也一直想做出这种效果,但是一点思路都没有。趁着过节有时间,就想了却这个心愿,就去网上找教程。发现了https://download.csdn.net/download/jilijelon/4506888正好是我想要的效果,虽然没有去比对过是否跟格式工厂的一样,但这种其实就是我想要的效果。我看...

2020-01-25 00:43:07 555

原创 如何制作一个拾色器

之前因为做编辑器需要用到拾色器,刚好这部分知识不太常用,而且很多图形学的入门书籍都没怎么提到过这个知识点。所以我翻查了下资料,并做了下总结这是photoshop的拾色器,我们称它为HSB拾色器。这里不探讨HSB的原理是啥,这个拾色器,所以请自行百度。这里只探讨右侧色相和左侧正方形拾色区域是如何形成的1、首先只需要了解HSB 拾色器是由色相、饱和度、明度三部分组成。色相其实原型是个360...

2020-01-12 17:08:58 943

原创 C++实现反射

前言首先,C++不同于C#或者Java,没有自带反射机制,只能通过C++一些传统艺能变着法地实现。有哪些反射1、类对象反射:简单地说就是程序运行时读进来一个字符串,然后程序就会自动创建出字符串对应名字的类对象2、类属性反射:能够遍历得到类的所有成员,知道它们的数据类型和名字。最实际的例子就是Unreal和Unity中UI的实现,当定义一个类成员变量时,它就能在UI中显示出来。而不需...

2020-01-12 16:41:18 6485 1

原创 投影矩阵

一直以来其实都有点不是特别想去研究投影矩阵,主要原因是现在的游戏引擎这部分基本都不需要你去看和改动,因为它过于底层,也基本不会出错,所以根本没有机会接触。另一个原因是因为它偏数学,推导过程的话容易记不住。所以除非自己手搭一个渲染引擎,否则应该极难有动力。虽然这个稍嫌枯燥,但其实还是有些好奇的,所以今天也是趁着有空,打算彻底搞清楚,记不记得住就看天意了。这里要感谢这篇博客,整个推导过程我觉得写得...

2020-01-02 02:26:42 280 1

原创 阴影渲染

平行光根据当前摄像机位置和平行光方向向后拉开一定距离并创建一个shadowmap摄像机(CameraPos - LightDir * Length),然后渲染出shadowmap,shadowmap无非就是把shadowmap摄像机看到的物件都简单渲染一遍,将物体的深度信息写到shadowmap里然后在光照pass的时候,渲染物件每个像素时,需要比较当前像素的深度值和与贴图里记录的深度值大小...

2019-12-01 16:26:48 315

原创 可变参数模版

基本上用在格式化的地方比较多,因为这个东西用得比较少,所以每次要用都花时间重新找资料复习一遍。于是乎花点时间记录下void ToString(const char* formatString, ...){ int result; int size = 128; char buffer[128]; va_list ap; va_start(ap, formatString); ...

2019-11-17 01:53:58 91

原创 行列主序矩阵

因为之前接触的是虚幻,用的是DX,所以接触的是行矩阵。最近一年接触自研引擎,用的是OpenGL的列矩阵。然而我之前图形基础没打好,以至于很长一段时间没弄清楚涉及到矩阵相关的一些问题。所以乘着自己意识清醒,还是应该梳理一下。1、什么是行矩阵什么是列矩阵2、什么时候向量是前乘什么时候是后乘3、构造旋转位移缩放矩阵时,矩阵乘法应该按照什么样顺序行矩阵r11 r12 r13 0...

2019-11-03 23:03:41 2897 6

原创 UE3中如何使用Instance技术

前言Instance技术其实就是将一个模型实例化成多份的技术,只要向GPU提交一份模型顶点数据和一堆Transform矩阵,就能创建多份相同的模型。因为只需要一个Drawcall,所以如果需要渲染多个相同的模型,用这个方式可以大大提高性能。其原理其实就是向GPU提高两个VertexBuffer,一个是模型的顶点数据,另一个就是Transform矩阵,DX和OpenGL各有各的API来设置第二个...

2019-11-03 00:38:11 1227

原创 导出UE3材质研究

最近在研究如何将UE3的材质(UMaterial)导出,主要是先前在UE3项目中累计了不少材质资源,希望有办法迁移到自研引擎当中。因为自研引擎用的是纯HLSL和GLSL语法,所以理论上是可以直接转化的。因为UE3的材质编辑器自带了材质翻译成shader代码的功能,所以我们想要的所有功能其实在源码里都能找到。有几个事情要做:1、知道材质编辑器表达式的连接关系在代码里是怎么表示的2、知道如...

2019-11-02 22:31:22 355

原创 UI优化相关实现

初始情况我们采取的是树形结构的UI,你可以理解成跟HTML类似的层级结构。做法也很传统,每一帧都从根节点出发遍历所有节点,对有渲染用途的节点会收集顶点数据并判断是否能合并批次。渲染也中规中矩,从后往前不开深度测试和深度写进行渲染瓶颈一:大量无渲染功能的UI节点UI树大部分情况下需要渲染的节点只占整棵树的一小部分,剩下的很大一部分要么隐藏了,要么只是起到布局作用,类似HTML中DIV的功...

2019-10-27 22:33:06 226

原创 伽马矫正

很多文章已经介绍了伽马矫正是怎么一回事了,这里我就只介绍下,我实际工程中怎么用的。顺便安利一下一篇伽马矫正的博客,我觉的这个举的例子就挺通俗易懂的,特别是关于混合那块https://www.jianshu.com/p/e15932c40bea首先常用的姿势就是将采样用的图片都设置成SRGB,这样硬件就能将图片转换到线性空间进行计算,然后在渲染流程的最后一步加一个全屏的伽马矫正,将所有线性空间...

2019-10-27 18:06:49 730

原创 骨骼蒙皮动画

网上更详细的骨骼蒙皮动画相关的知识,可以参考“骨骼蒙皮动画(SkinnedMesh)的原理解析”这个标题的博客,这里也就不多赘述,这里仅对我实际工作中使用的游戏引擎是如何实现这一事情做一个总结,不代表所有引擎的实现方式都是下面这种,毕竟可以有很多种方式实现这个事情,但大致原理不尽相同。顶点格式首先从模型的顶点格式上讲,一般模型顶点数据包括Position(顶点位置)、Normal(顶点法线...

2019-10-27 16:45:51 730

原创 虚幻3粒子编辑器学习过程

前言一开始接触虚幻3粒子相关模块是因为公司希望做一个面向用户的粒子编辑器,所以需要简化虚幻3粒子编辑器的一些功能以及加一些本土汉化,所以就开始着手粒子相关的研究。因为是在虚幻3基础上开发,所以一开始的学习成本其实比较低,不需要知道渲染相关的知识,只要会用它API就够了。当然后面会说粒子渲染相关的知识,我们先来说说粒子编辑器所需要具备的一些知识。基础虚幻3中如果想要粒子功能,就需要用到U...

2019-10-14 00:13:40 558

原创 图形卷积相关

一开始听到这个名词的时候觉得是个特别遥远的数学名词,后来理解发现当我还不知道它的时候我已经在用了,其实说来也简单,在采样某个像素的贴图时,将当前像素与周围像素按照一定比例叠加到一起,最终就得到一个新的像素颜色,最简单的用途就是模糊了。开个坑记录一下,我用到或知道的一些卷积核高斯模糊首先是高斯模糊,它满足正态分布,具体正态分布的公式我也忘了,所以直接给出最后的推导结果。这里σ我们自己定,值越...

2019-10-13 16:28:33 361 1

原创 描边

大半年前学会了描边,但是一直没时间整理,加上描边在手机上性能可以预见不咋滴,所以这块很久都没管了,趁现在有空整理一下学习的过程。当时人比较菜,找了很多资料来看,有些描边效果不是特别满意,有些技术又理解不了。给出的描边方案大体包括以下这几种1、画模型的时候,如果有些像素的法线跟摄像机平行则认为是边界,需换成描边色2、剔除掉正面,沿法线放大,通过画背面的方式来画描边3、用sobel算子...

2019-10-13 04:43:41 359

原创 视野迷雾算法

算法简介算法链接:http://code.google.com/p/libfov/使用场景:2D格子迷雾算法,以一个点为中心,向外遍历每个格子,当遇到视野阻挡时,阻挡后的格子不可见优点:比A*快上百倍,对于没有障碍的直线可以由起点直接跳到终点(高效的原因)复杂度:视野范围内的格子数相关文件:fov.c、fov.h它这个算法中有其他几种形状,因为之前工作中,只用到了圆这一种迷...

2019-10-13 02:21:13 1298

原创 JPSPlusGoalBounding寻路算法整理

算法简介算法链接:https://github.com/SteveRabin/JPSPlusWithGoalBounding使用场景:2D格子寻路优点:比A*快上百倍,对于没有障碍的直线可以由起点直接跳到终点(高效的原因)缺点:需要预处理,不支持动态改地形碰撞(无法通过的格子)潜规则:斜方向可以走的前提是,斜方向两个分量上的格子都要能走(即要走左上角,左边和上边都得是非碰撞)...

2019-10-12 04:03:47 1574 2

转载 值得推荐的C/C++框架和库 (真的很强大)

值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/

2016-09-23 15:42:51 675

转载 最全的常用正则表达式大全分享

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,

2015-11-30 21:19:30 411

原创 Codeforces Round #274 (Div. 2)

A. Expressiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputPetya studies in a school and he adores Maths.

2015-09-06 03:17:24 461

原创 Codeforces Round #201 (Div. 2)

A. Difference Rowtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou want to arrange n integers a1, a2, ..

2015-08-28 21:11:27 931

原创 Codeforces Round #316 (Div. 2)

A. Electionstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe country of Byalechinsk is running elections

2015-08-22 21:11:23 667

原创 hdu5261

蜀道难Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 375    Accepted Submission(s): 118Problem Description度度熊最近去四川游玩了一趟,在西南边,它发现了一

2015-07-14 12:10:15 513

原创 并查集防止爆栈

在并查集的时候经常遇到爆栈的情况,这里给推荐两种方法预防爆栈①开外挂栈#pragma comment(linker, "/STACK:1024000000,1024000000") ②增加一个数组用来保存结点的熵值,使得根节点离子结点平摊下来的距离最小,主要在合并的时候需要用到if(cou[fa]>cou[fb]){ f[fb]=fa; } else {

2015-06-26 10:16:05 881

原创 博弈DP专题

在做这类博弈题的时候,时不时会让人陷入“如何找一个最优的贪心策略”这么一个局面,所以开这么一个专题来收集这类的博弈题以此告诫自己。对待这类题目,经常是动态规划与记忆化搜索结合。Play Game hdu-4597Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/

2015-06-23 22:44:08 886

原创 Codeforces Round #308 (Div. 2)

A. Vanya and Tabletime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputVanya has a table consisting of 100 rows

2015-06-22 12:59:16 625

原创 Codeforces Round #307 (Div. 2)

A. GukiZ and Contesttime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputProfessor GukiZ likes programming cont

2015-06-16 10:18:57 832

转载 STL系列之一 deque双向队列

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存de

2015-06-06 14:39:24 347

转载 Bitset

介绍:有些程序需要处理二进制有序集,标准库提供了bitset 类型,事实上,bitset 是一个二进制容器,容器中每一个元素都是一位二进制码,或为 0,或为 1.使用:#include using std::bitset;1.定义与初始化在定义 bitset 时,要明确 bitset 有多少位,这个位数是整形常量bitset b;                

2015-05-22 15:07:15 311

原创 Codeforces Round #285 (Div. 2) E. Misha and Palindrome Degree 二分+容斥

E. Misha and Palindrome Degreetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputMisha has an array of n integ

2015-02-27 22:19:30 1003

原创 Codeforces Round #286 (Div. 2) D.

D. Mr. Kitayuta's Technologytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputShuseki Kingdom is the world's

2015-02-25 00:10:17 407

转载 找数组中最大或最小值

#include#includeusing namespace std;int main(){int n[]={1,4,22,3,8,5};int len=sizeof(n)/sizeof(int);cout<<*max_element(n,n+len)<<endl;cout<<*min_element(n,n+len)<<endl;return 0;}

2014-11-30 14:26:39 357

原创 hdu3681 状压 bfs 二分

Prison BreakTime Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3156 Accepted Submission(s): 802Problem DescriptionRompire is a robot

2014-08-28 17:22:57 442

原创 poj 2288

Islands and BridgesTime Limit: 4000MS Memory Limit: 65536KTotal Submissions: 8925 Accepted: 2319DescriptionGiven a map of islands and bridges that connect these

2014-08-27 01:51:29 449

原创 hdu 4336 期望 状压dp

Card CollectorTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2478 Accepted Submission(s): 1163Special JudgeProblem DescriptionIn your

2014-08-18 22:00:46 403

转载 lower_bound()和upper_bound()

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置举例如下:一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标则pos = lower_bound( number, num

2014-08-13 01:37:04 456

PropertyReflection.rar

用C++实现类属性反射 用C++实现类属性反射 用C++实现类属性反射 用C++实现类属性反射 用C++实现类属性反射

2020-01-14

Reflection.rar

用C++实现类对象反射,用到工厂模式,并进行简单的封装 用C++实现类对象反射,用到工厂模式,并进行简单的封装 用C++实现类对象反射,用到工厂模式,并进行简单的封装 用C++实现类对象反射,用到工厂模式,并进行简单的封装 用C++实现类对象反射,用到工厂模式,并进行简单的封装

2020-01-12

HSB拾色器实现原理.pdf

描述了拾色器图形部分是如何绘制的,并且包含了HSB转RGB相关公式

2019-10-07

OpenGL ES 2.0编程向导中文版 + OpenGL ES 3.0编程指南中文版

资源包含以下两个pdf OpenGL ES 2.0编程向导中文版 OpenGL ES 3.0编程指南中文版

2019-03-27

空空如也

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

TA关注的人

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