
HLSL高级实例精讲学习
directx3d_beginner
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
蓝图使用接口通信
实际上,类似于是c++中的实现接口。为了简便,两种物体,方块和灯,击中后,打印出击中的名字。首先,创建一个接口打开该蓝图接口,写纯虚函数,将函数改名为printHitName,暂时不加入输入输出参数创建灯的蓝图在灯光蓝图类里,点击类设置->细节->接口->添加->选择myHitInterface在右键点击,选择实现函数,只是打印由于是子弹击中显示名称,所以,在子弹蓝图里写Event...原创 2020-09-22 13:14:25 · 418 阅读 · 0 评论 -
6.9投影纹理
先上图投影纹理听起来很复杂,实际上too easy.无非就是再设置第二个摄像机,生成一个新的投影颜色,再与正常投影的颜色进行混合,即顶点还是那个顶点,颜色是个混合颜色。贴出代码,避免眼高手低第二个摄像机 //设置投影位置,投影目标,向上向量 D3DXVECTOR3 vProjectPosition(10.0 * sin(-fTime), 7.0...原创 2020-04-14 16:38:23 · 262 阅读 · 0 评论 -
6.8过程纹理
过程纹理也称为自定义纹理,根据计算得出。这个例子使用了位置和原点的距离作为输入参数,并加入了动画,但是和目前的纹理没任何关系。纯手工计算。因为位置是三维的,所以在涉及到纹理的几个地方都要改为三维的struct RENDEROBJECT_D3DVERTEX{ //顶点位置 D3DXVECTOR3 Position; //纹理坐标 float...原创 2020-04-10 16:06:45 · 399 阅读 · 0 评论 -
6.7折射和反射
这个例子涉及到了折射,折射函数,refract(入射光方向,法向量,折射相对系数)另外,由于反射的是周围物体的纹理,而不是自身的纹理,所以在顶点着色器中,法线方向是转到世界坐标矩阵,而不是世界坐标的逆转置矩阵即 Output.Normal = normalize(mul(In.Normal, (float3x3)g_matWorld ));像素着色...原创 2020-04-08 10:58:26 · 836 阅读 · 0 评论 -
6.6视差贴图
关于视差贴图,我的理解是微调获得凹凸感。材料:1,颜色纹理,2,法线纹理,3,高度纹理。其他需要参数:视点位置类比下大地基准面,大地基准面模拟地球表面。同样,大地基准面+深度信息纹理 = 地球表面。就是说,要把白菜吃出鸡腿的味道,那就只能加佐料,这个佐料就是深度信息纹理。当然,白菜不是真正的鸡腿,所以只能偶尔吃吃,就像小时候吃的人造肉,偶尔解解馋还行,真把人造肉当肉...原创 2020-01-20 14:47:34 · 429 阅读 · 0 评论 -
6.1灯光
光的类型分为散射光、环境光和高光。其中散射光和光的方向与法线的角度有关,环境光类似于间接光照,(代替了光追),高光与范围和眼睛位置有关,光源都有这三种光,分为平行光,点光源和聚光灯平行光最简单,直接给出了光的方向;点光源1,方向是光源位置-顶点位置;2,与范围有关,超过某个范围则无光;3,在范围内,光照与距离的平方成反比。聚光灯在点光源的基础上,乘以一个系...原创 2020-01-15 17:32:46 · 513 阅读 · 0 评论 -
6.5三维纹理云彩
其实很简单,首先创建三维纹理D3DXCreateVolumeTextureFromFile(pd3dDevice, szFile, &m_pVolumeTexture);然后在shader里进行天空颜色和云颜色的插值即可;使用红色扰动时,采样三维纹理 //天空颜色 float4 sky = float4(0.0, 0.0, 1.0, 1.0 );...原创 2020-01-13 10:34:33 · 363 阅读 · 0 评论 -
6.5.1一维纹理
重点在于使用原来计算漫反射光强的值作为纹理坐标的索引来查找颜色值 float fDiffuse = (dot(In.Normal, normalize(In.vLight)) + 1.0 ) / 2.0; return tex1D(MeshTextureSampler, fDiffuse );...原创 2020-01-10 15:03:35 · 570 阅读 · 0 评论 -
6.4.3立方体贴图反射
关键步骤在于在vs上 //每个顶点上入射向量,是从观察位置指向顶点,不是由顶点指向观察位置 Output.ReflectInVertex = PositionInWorld.xyz - g_ViewPosition.xyz;在ps上 //计算每个顶点上指向观察位置的反射向量,此向量指向立方体贴图,实际上作为纹理坐标 float3 vReflect...原创 2020-01-10 10:06:08 · 252 阅读 · 0 评论 -
6.4.2立方体纹理
立方体纹理注意两点1,D3DXCreateCubeTextureFromFile(pd3dDevice, szFile, &m_pCubeTexture);2,立方体纹理贴图的3d纹理坐标就是其位置output.texCube = In.Poistion,xyz;...原创 2020-01-07 20:12:51 · 285 阅读 · 0 评论 -
6.3.3法线贴图
1.法线贴图必须与灯光同时进行2,从法线纹理取得模型空间的法线,再根据切线空间到世界空间的变换矩阵,传递到世界坐标系的法线,再进行计算...原创 2020-01-06 12:06:02 · 229 阅读 · 0 评论 -
6.3.1凹凸贴图
在例子中,从空间位置获取凹凸纹理坐标作为体积纹理的输入,与反射向量合并后得到反射颜色,最后与环境纹理按纹理融合因子合并即可。原创 2020-01-03 11:34:17 · 242 阅读 · 0 评论 -
6.2.5透明纹理
这个用到了alhpa混合,开启alpha通道,相加的方式。原创 2020-01-02 09:52:17 · 234 阅读 · 0 评论 -
6.2.4纹理融合
在像素着色器中分别采样后,相加即可。原创 2019-12-31 16:53:55 · 505 阅读 · 0 评论 -
5.6 SSAO(白模)
SSAO全称Screen Space Ambient Occlusion,(屏幕空间环境光屏蔽)。一句话概括:依据屏幕空间中3D场景中模型的遮挡关系来计算环境光亮度。一般认为环境光相同,但是没有考虑到物体之间的相互遮挡带来的耗损,尤其是在褶皱,墙角等位置。因此,要考虑遮挡关系。为什么考虑屏幕空间,因为计算量大,把要计算的物体控制在屏幕范围内。遮挡判断依据是深度图(32位浮点型),...原创 2019-12-28 17:51:42 · 407 阅读 · 0 评论 -
19.3剪裁
1,在固定管线中,裁剪是在世界坐标系中。2,在可编程管线中,裁剪是在规格化坐标系中,步骤(1)按照法向量和空间点定义裁剪平面,并归一化(2)根据世界观察投影变换矩阵相乘,求逆转置,即为需要的变换矩阵(3)变换矩阵与裁剪平面变换后就是需要的裁剪平面。...原创 2019-12-24 15:53:10 · 186 阅读 · 0 评论 -
光线追踪
光追比较流行,其实很多公司也没用到,学习了下,就是反过来进行了,颜色从物体到像素,改为颜色从像素到物体了。碰撞检测就是射线和球之间的三角形关系,根据韦达定理可以判断,不相交,一个值或者两个值,即中学数学。上图...原创 2019-12-20 10:49:36 · 614 阅读 · 0 评论 -
8.5.1控制物体的方向
这里考虑到物体的朝向,即方向约束,摄像机物体转为世界矩阵原创 2019-12-13 13:42:34 · 234 阅读 · 0 评论 -
16.44景深
将整个场景渲染到纹理中,将模糊因子渲染到此纹理的alpha通道。计算模糊因子时,将模型转换到观察空间,将每个顶点在观察坐标系中的坐标与观察坐标系中的平面方程点乘,点乘结果即为顶点到平面的距离,再按某个缩放因子缩放后就是模糊因子,保存到变量中。...原创 2019-12-12 16:55:58 · 266 阅读 · 0 评论 -
光照贴图
如果灯光和模型不移动,则光照不改变,光照计算可以在渲染前期保存到到纹理中,例子上把光照贴图直接放在模型上了原创 2019-12-06 10:10:59 · 295 阅读 · 0 评论 -
5.5.1半球光照
物体受到的光照强度与朝向有关,即朝向天空的光照最强,朝向水平的面,则光照强度只有漫反射光,朝向地面的面,则光线更弱。float3 g_VectorUp = float3( 0.0 , 1.0 , 0.0 ); // 漫反射光 float fDiffuse = 0.4 * dot( In.Normal, g_VectorUp ) ; // 高光,反射向量与观察向量一...原创 2019-12-05 10:24:53 · 434 阅读 · 0 评论