自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (11)
  • 收藏
  • 关注

原创 SSAO

思路SSAO每一帧都将场景视图空间的最近可视点的Normal ,Depth渲染到全屏render target上。然后将render target作为输入计算屏幕上每个像素对应的环境光遮蔽。渲染Normal , Depth创建一张纹理贴图,将其作为RenderTarget格式为DXGI_FORAMT_R16G16B16A16_FLOAT RGB用于保存视图空间中的最近可视点的法线坐标。alpha通

2015-10-28 23:19:25 2988 2

原创 SkyBox

Sky天空是位于极远处的,因此我们将天空盒的深度值设置在远截面cbuffer Transform{float4x4 WorldViewProj;};struct VertexIn{float3 PosL : POSITION;};struct VertexOut{float4 PosH : SV_POSITION;float3 PosL : POSITION;};Ve

2015-10-28 15:48:57 1001

原创 ShadowMap

创建阴影分为两步: 一:以光源为视点,正交投影渲染整个场景,得到深度图(shadow map)并保存变换矩阵。深度图中记录了以光源为视点时,所有的可视点的深度。 二:以相机为视点渲染场景,对于场景中的每个顶点,将其变换到以光源为视点的空间,若其深度大于shadow map中对应点的深度值,则说明光源射来的光线被物体遮蔽了。则该点处于阴影中由于光源发出的光是平行光,因此我们需要建立一个正交投影矩阵

2015-10-28 14:40:04 1968

原创 Displacement Map

Normal Map仅仅提升了光照细节,并没有提升图元细节,Normal Map仅仅只是一种光照技巧。 Displacement Map可以用于提升图元的细节。位移贴图配合细分可以极大的提升效果。 Displacement Map通过将顶点沿着法线方向的反方向进行偏移。 p′=p+s(h−1)p^\prime = p + s(h - 1) ss是缩放量,h∈(0,1)h \in (0 , 1

2015-10-27 19:55:57 2257

原创 Normal Map

法线贴图是通过扰动法线来产生视觉上的凹凸感 法线贴图的每个像素保存了切线空间的坐标值 如图所示,T ,B , N构成了切线空间,法线贴图中记录的就是该空间中的坐标 然而我们的光照计算是在世界空间进行的,所以我们需要知道该点在世界空间中的法线坐标。 如图所示:假设三角形的三个点为V0V_0 , V1V_1 , V2V_2.对应的纹理坐标为(u0,v0u_0 , v_0) , (u1,v1u

2015-10-27 17:31:22 1219

原创 Shader Stage

Programmable StageVertex StageHull StageDomain StageGeometry StagePixel StageCompute StageFixed StageInput Assembler StageRasterizer StageStream Out StageOutput Merger Stage

2015-10-23 18:21:12 583

原创 Pipeline System - Shader Reflection

Shader ReflectionShader的信息可以通过轮询ID3D11ShaderReflection接口获取,该接口也可以获取用于轮询Constant Buffer , Variable , Type信息的接口。通过D3DReflect()函数可以从shader获取其ID3D11ShaderReflection接口以下为从shader中获取ID3D11ShaderReflection的方法:

2015-10-20 15:42:16 805

原创 Parameter System

参数类型enum ParameterType{ // 数值 VECTOR , MATRIX , MATRIX_ARRAY , // 资源视图 SHADER_RESOURCE , UNORDERED_ACCESS , CBUFFER , SAMPLER , ENTITY}这些都是Shader中的各种参数RenderPa

2015-10-17 00:31:52 330

原创 Resource System

资源类型Resource分为以下几类:enum ResourceType{ // Buffer RT_VERTEXBUFFER = 0x010000, RT_INDEXBUFFER = 0x020000, RT_CONSTANTBUFFER = 0x030000, RT_STRUCTUREDBUFFER = 0x040000, RT_BYTEA

2015-10-16 20:08:22 495

原创 Ray Box求交点

Ray与Box的定义:class Ray{ // data member Vector3f Origin; Vector3f Direction;}class Box{ // data member Vector3f Center; float Extents[3]; Vector3f Axis[3];}Box可以看成由三组平面所构成的平

2015-10-12 22:15:20 749

原创 Ray Box 碰撞检测

Box采用OBB定义:enum AxisDefine{ X , Y , Z};// data member Vector3f Center;Vector3f Axis[3];float extent[3]; // 边长的一半Ray采用参数式Point=Origin+t∗Direction,0≤t≤∞Point = Origin + t * Directio

2015-10-12 17:13:43 557

原创 Ray Sphere 求交点

Ray:// data memberVector3f Origin;Vector3f Direction;设Ray的起点OriginOrigin为O(x0,y0,z0)O(x_0 , y_0 , z_0),DirectionDirection为D(dx,dy,dz)D(dx , dy , dz) ⎧⎩⎨x=x0+t∗dxy=y0+t∗dyz=z0+t∗dz \begin{equat

2015-10-10 22:51:19 471

原创 Ray Sphere 相交测试

Ray:// data memberVector3f Origin;Vector3f Direction;Sphere:// data memberVector3f Origin;float Radius;测试Ray Sphere是否相交: 球心为O , 光线的起点为A,以点A向球发射切线,设点B为切点 则当光线在图示的椎体中时,光线与球产生相交 在椎体之外,则无相交 并且当

2015-10-10 21:26:11 417

翻译 视椎体提取

参考:fast extraction viewing frustum planes from world view projection matrix本文主要是记录下视椎体提取的主要方法首先假设我们有一个顶点v=(x,y,z,w=1)\mathbf{v} = (x , y , z , w = 1)和4x4矩阵M=(mij)\mathbf{M}=(m_{ij}),M\mathbf{M}是视图投影矩阵,

2015-10-10 14:54:44 1239

原创 DirectX 11 填充二维纹理

最近写程序刚好需要将数据写到二维纹理中,然后显示出来看数据是否正确。以这个笔记小小的记载下 srand( 0 ); DirectX::XMFLOAT2 data[128 * 128]; for( int i = 0; i < 128 * 128; i++ ) { data[i].x = rand() / ( float )RAND_MAX;

2015-05-27 21:36:53 1539

原创 位逆置变换

将数组int a[] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7};进行位逆置变换变为{0 , 4 , 2 , 6 , 1 , 5 , 3 , 7};变换前二进制表示为:000 , 001 , 010 , 011 , 100 , 101 , 110 , 111变换后:000 , 100 , 010 , 110 , 001 , 101 , 011 , 111代码如下:#inclu

2015-05-08 21:31:58 462

原创 那些年的狗血bug-----shadow

看了Directx 11龙书中讲阴影的一章后,自己迫不及待的开始动手写~~ 于是噼里啪啦一阵之后,代码终于敲完了,于是开始了漫长的调试过程小问题不断不过也很好解决,很快Basic模式和Normal Map模式都能很好的运行~然而,Displacement Map模式下的阴影并非如此~~ 出现了如下的画面: 从图中可以发现,柱子的阴影不见了(好吧,从右下角的调试纹理中也能看出来~~ 于是乎,阴

2015-04-14 01:58:43 422 1

原创 VS生成后事件闲谈

之前写DirectX时,每次都是将shader编译后生成的文件放在$(ProjectDir)(ProjectDir) 然后再将生成的文件拷贝一份到$(OutDir)(OutDir)中,以便单独运行可执行文件时,可以正确加载shader但是这样太麻烦了~于是乎,想到了VS的生成后事件的功能。于是乎开始尝试下将Shader的生成文件名改为:$(ProjectDir)(ProjectDir)\CSO\%

2015-04-13 18:57:28 2533

原创 Debug and Release 优化闲谈

今天运行程序的时候,在Release模式下调试了一下,忽然发现奇怪的现象(好吧,是我不懂,所以觉得奇怪~)比如有两个文件: A , B 当我在Debug模式下调试时,在A文件中添加一个断点,程序运行到这里的时候理所当然的停下了~ 而我在Release模式下,做相同的事情时,断点却跳到文件B的某处去了~对于此现象百思不得其解~于是乎,问了知乎的大神们,得知是Release优化的原因,于是乎,打开属

2015-04-13 18:05:44 635

原创 vector::resize

今天遇到一个和resize相关的问题,于是就测试了一下~~代码如下:#include <iostream>#include <cstdlib>#include <windows.h>#include <vector>struct Fuck{ Fuck() { std::cout << "调用构造函数" << std::endl; ZeroMem

2015-04-11 20:59:23 540

原创 构造与销毁顺序

现在我们来看看c++在构造函数时的构造顺序代码如下:#include <iostream>class A{public: A() { printf("创建A\n"); } ~A() { printf("销毁A\n"); system("pause"); }};class D{public:

2015-04-10 23:11:36 445

原创 char* a 与 char a[] 以及常量指针,指针常量

常量指针与指针常量常量指针 :指向常量值的指针,指针本身值可变,但是指针所指向的内容不可更改指针常量:指针值是一个常量,即指针值不可变,但指针所指向的内容可以变如:int a = 9;int const * ptr = &a;在这里ptr为常量指针int a = 9;int * const ptr = &a;此时ptr为指针常量读法:当*在const前面时,叫做指针常量,当const在*前

2015-04-02 23:41:29 1124

原创 Ambient Occlusion

在以往的光照模型中,我们没有考虑间接光 以往的环境光照模型为:A=La∗maA= L_a * m_a LaL_a表示物体接受到的间接光的总量 mam_a表示物体的材质,指定了射入环境光的反射和吸收的数量 并且认为光线从各个方向均匀的入射到物体表面 但这种计算模型完全不真实环境光遮蔽的思想是:物体表面某点p\mathit{p}的间接光数目是与以p\mathit{p}为球心的半球对入射光线的遮

2015-03-28 22:02:27 1297

原创 八叉树

在写Ambient Occlusion时需要进行射线与物体的各个三角形的碰撞检测但是逐个三角形进行判断需要进行大量的无意义计算可以通过一个八叉树管理物体的包围盒空间通过八叉树对物体的包围盒进行空间管理这样判断射线是否与物体相交时可以省去大量的计算当射线与某一个空间有相交的话,则进一步判断子空间与射线的相交性算法描述:

2015-03-27 22:02:32 1336

原创 c++实时变量的作用域

c++中我们经常定义实时变量,如:for(int i = 0; i < 10; i++){ //....}这里就定义了一个实时变量i,作用域为整个for循环那么这么一段代码呢:while((char c = cin.get()) != 'q'){ //.....}这段代码也定义了一个实时变量c,咋一看这段代码是没有问题的但是在编译器中是会

2015-03-27 13:51:27 969 1

原创 GeometricToolsEngine分析之HLSLDefiner

该类是对于D3D11_SHADER_MACRO的封装。typedef struct _D3D_SHADER_MACRO { LPCSTR Name; LPCSTR Definition;} D3D_SHADER_MACRO, *LPD3D_SHADER_MACRO;shader macro是用于描述shader中的宏用法如下:D3D11_SHADER_MACR

2015-03-23 15:25:23 1128

原创 GLEW配置

下载地址:GLEWbinaries是已经编译好的版本zip的是可以自己编译的将其下载后解压,文件结构为:build文件夹下有VS的解决方案:图中vc2012为VS2013的解决方案我们可以通过打开这个解决方案,然后生成,则会生成相应的静态库,动态库glew_shared生成的是动态库,glew_static

2015-03-20 18:07:31 5173 2

原创 GLFW配置

下载地址:GLFW下载32位版本解压后的文件结构为:将include中的GLFW文件夹拷贝到VS安装目录下的VC/include中若使用VS2013,则将lib-vc2013中的lib文件拷贝到VS2013安装目录下的VC/lib中然后将lib-vc2013中的dll文件拷贝到system32或system64中写程序时,在工

2015-03-20 17:26:20 4528

原创 Input Layout

假设这样一种情况:vertex shader 的输入结构:struct VertexIn{ float3 PosW : POSITION; float2 Tex : TEXCOORD; float3 Normal : NORMAL;};而程序中传入的数据的组成为:namespace Vertex{

2015-03-18 15:32:59 1318

原创 DirectX 11 Particle System With StreamOut

编写DirectX 11 应用程序时,我们通常是将数据发送到GPU,然后在GPU中对数据进行计算,处理,渲染出图像但当我们需要从GPU中获得数据该怎么办,SteamOut,顾名思义,可以将GPU中的数据流输出到CPU中在设计粒子系统时,我们需要做的三件事情是:一:初始化粒子二:更新粒子三:渲染粒子通常而言,一、二都是在CPU中完成,三由GPU完成但是由于我们有S

2015-03-10 21:22:16 1722 1

原创 Tessellation Shader 随笔

细分着色器分为三个部分:Hull Shader Stage(外壳着色器阶段)Tesselation Stage(细分阶段)Domain Shader State(域着色器阶段)Hull Shader Stage:Constant Hull Shader Control Point Hull ShaderConstant Hull Shader : 在该阶

2015-02-08 16:42:05 1224

翻译 法线贴图与位移贴图

法线贴图是一副纹理图,只是纹理图上的点保存的不是RGB数据,我们是将压缩过的x,y,z轴坐标保存到red,greed,blue分量中,这个xyz坐标定义了一个法线方向因此法线贴图的每个像素都保存了一个法线向量。下图显示了一个形象的normal map例子:保存在法线贴图中的法线是相对于由向量T(x轴),B(y轴),N(z轴)定义的纹理空间坐标系的T向量在纹理图像中是水平

2015-01-28 23:47:00 4933 1

原创 CubeMap

当我们实现天空盒,天空球的时候经常会用到这个技术当我们要得到某点p的颜色值时,从天空盒的中心指向某点p的射线和天空盒相交,相交点采样的纹理值就是p点的颜色值在HLSL中,我们使用TextureCube来保存这种纹理当我们想要反射周围的物体时,比如通过球将周围的环境反射出来我们可以使用这个方式:e为眼睛所在的位置,p是物体上

2015-01-26 18:21:17 1126

原创 IASetVertexBuffer , IASetIndexBuffer

void IASetVertexBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppVertexBuffers, [in] const UINT *pStrides, [in] const UINT *pOffsets);该函数用于将顶点缓存数组绑定到输入

2015-01-16 22:04:09 1531

原创 XMVector3Cross

XMVECTOR XMVector3Cross( [in] XMVECTOR V1, [in] XMVECTOR V2);等同于:XMVECTOR Result;Result.x = (V1.y * V2.z) - (V1.z * V2.y);Result.y = (V1.z * V2.x) - (V1.x * V2.z);Result.z = (V1.x *

2015-01-16 21:40:58 755

原创 UVN相机模型

在3D程序中,一个必备的过程就是将物体从世界坐标系转换到相机坐标系我们先看看一般的情况:物体的位置为(world_x  , world_y , world_z) ,相机的位置为(cam_x , cam_y , cam_z)假设此时相机的角度为((0 , 0 , 0)当我们把相机移动到(0 , 0 , 0),物体也要进行相应的移动才能保持物体和相机相对位置不变则物

2015-01-15 21:28:24 3326 2

原创 HLSL注意事项

Visual Studio可以新建.hlsl文件如新建VertexShader在上图中我们还会看到有HLSL标头文件,该文件用于放公用的自定义函数如:标头文件的后缀名是.hlsli查看其属性会发现该文件不参与生成而创建的顶点着色器,像素着色器等等文件都是参与生成的,生成的时候.hlsl文件会自动

2015-01-14 20:55:47 1800

原创 DirectX 错误总结

写公告板的时候,GeometryShader中写了这样一段代码cbuffer MatrixBuffer{ float4x4 gViewProj; float3 gEyePosW;};cbuffer cbFixed{ float2 gTexC[4] = { float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f,

2015-01-13 19:47:52 403

原创 部署到win8上的openframeworks

微软发布了一套用于部署到win8上的openframeworks库,可以用于编写universal程序~于是迫不及待的想要试一试~于是用example/gl/textureScreengrabExample的代码:void ofApp::setup(){ counter = 0; ofSetCircleResolution(100); texScreen.allocate(1

2014-12-09 21:05:03 564

原创 笔记----DX11.0转为DX11.2

在DX11.2中已经移除了D3DX,xnamath等文件数学库由DirectXMath,D3DX由DirectXTK,DirectXTex代替DirectXTex:点击打开链接DirectXTK:点击打开链接以下列举几个需要注意的:DX11.0中创建旋转矩阵使用:D3DXMATRIX* D3DXMatrixRotationYawPitch

2014-12-06 17:28:34 2637

Elements of Parallel Computing-CRC

Elements of Parallel Computing-CRC Parallel computing is hard, it’s creative

2018-05-05

Real-Time Volumetric Cloudscapes BookSelectPages

Real-Time Volumetric Cloudscapes Book Select Pages

2018-05-05

Computer Animation 3rd Edition Algorithms

学习计算机动画必备书籍,透彻的讲解了计算机动画编程中的各种技术

2015-01-26

GPU Pro 5-Advanced Rendering Technique

学习GPU渲染非常好的书籍~讲解了大量的实用技术,讲解透彻

2015-01-26

DirectX11.2 CubeMap

DirectX 11.2 CubeMap

2015-01-26

Introduction to 3D Game Programming with Directx 11

Directx 11英文版带书签,对于dx11讲解的非常透彻,可以说是dx11最好的入门书籍了

2014-11-18

Practical Rendering and Computation with Direct3D 11源码

Practical Rendering and Computation with Direct3D 11的源码,这也是一个完整的Directx11游戏引擎源码

2014-09-25

3d游戏编程大师技巧

3d游戏编程大师技巧的源码 可以好好参考参考,可以学到蛮多东西~

2014-04-21

空空如也

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

TA关注的人

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