阴影贴图的位置和分辨率

哈哈

我目前正在学习C ++和OpenGL,想知道是否有人可以指导我理解下面的代码到底发生了什么。当前,它计算3D环境中阴影贴图的位置和分辨率。

该代码当前有效,只是希望掌握一些东西。

//Vertex Shader Essentials.
Position = ProjectionMatrix * ViewMatrix * WorldMatrix * vec4 (VertexPosition, 1);
Normal = (ViewMatrix * WorldMatrix * vec4 (VertexNormal, 0)).xyz;
EyeSpaceLightPosition = ViewMatrix * LightPosition;
EyeSpacePosition = ViewMatrix * WorldMatrix * vec4 (VertexPosition, 1);
STCoords = VertexST;

//What is this block of code currently doing?
ShadowCoord = ProjectionMatrix * ShadowMatrix * WorldMatrix * vec4 (VertexPosition, 1);
ShadowCoord = ShadowCoord / ShadowCoord.w;  
ShadowCoord = (ShadowCoord + vec4 (1.0, 1.0, 1.0, 1.0)) * vec4 (1.0/2.0, 1.0/2.0, 1.0/2.0, 1.0);

//Alters the Shadow Map Resolution. 
//    Please Note - c is a slider that I control in the program execution.
float rounding = (c + 2.1) * 100.0;
ShadowCoord.x = (floor (ShadowCoord.x * rounding)) / rounding;
ShadowCoord.y = (floor (ShadowCoord.y * rounding)) / rounding;
ShadowCoord.z = (floor (ShadowCoord.z * rounding)) / rounding;


gl_Position = Position;
汤米
ShadowCoord = ProjectionMatrix * ShadowMatrix * WorldMatrix * vec4 (VertexPosition, 1);

这将计算该顶点在光眼空间内的位置。您要重新计算的是Position = ProjectionMatrix * ViewMatrix * WorldMatrix * vec4 (VertexPosition, 1);渲染到阴影缓冲区时行必须产生的结果。

ShadowCoord = ShadowCoord / ShadowCoord.w;  

这将应用透视投影,以找出阴影坐标应在光源的视平面上的何处。

这样想:从光的角度来看,(1,1,1)处的坐标应该与(2,2,2)处的坐标出现在同一位置。对于这两种方法,您都应该在深度缓冲区上采样相同的2d位置。除以w实现。

ShadowCoord = (ShadowCoord + vec4 (1.0, 1.0, 1.0, 1.0)) * vec4 (1.0/2.0, 1.0/2.0, 1.0/2.0, 1.0);

这也与在正确位置采样有关。上方的投影在事物的视线中央有一个东西-例如(0,0,1)处的东西-最终位于(0,0)。但是(0,0)是光照图的左下角,而不是中心。这条线可确保拍摄的光照贴图覆盖光源投影空间中从(-1,-1)到(1,1)的区域。

...因此,总的来说,代码是关于将描述从光到光空间中的点的3d向量映射到描述该点在光的视平面上的位置的2d向量的映射。渲染以生成深度图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS位置和缩放对象(按分辨率)

来自分类Dev

CSS位置和缩放对象(按分辨率)

来自分类Dev

增加R射线阴影图像的分辨率

来自分类Dev

Unity 4.3-了解位置和屏幕分辨率,如何正确设置对象的位置?

来自分类Dev

VirtualBox,Ubuntu和屏幕分辨率

来自分类Dev

屏幕和分辨率问题

来自分类Dev

显示分辨率和缩放

来自分类Dev

图像中文本的垂直和水平居中位置,而不考虑分辨率的比例

来自分类Dev

如何更改桌面分辨率与移动分辨率中的元素位置?

来自分类Dev

我看不出光照贴图分辨率之间有任何区别

来自分类Dev

我看不出光照贴图分辨率之间有任何区别

来自分类Dev

如何同步屏幕分辨率和信号分辨率

来自分类Dev

重载分辨率

来自分类Dev

打印分辨率

来自分类Dev

扫描分辨率

来自分类Dev

CAShapeLayer分辨率

来自分类Dev

设置程序以特定的分辨率在特定的屏幕位置打开

来自分类Dev

设置程序以特定的分辨率在特定的屏幕位置打开

来自分类Dev

通过不同的屏幕分辨率固定位置

来自分类Dev

根据屏幕分辨率更改div位置(flexbox?)

来自分类Dev

位置固定不跟随屏幕分辨率

来自分类Dev

html表单更改分辨率更改位置

来自分类Dev

OpenGL阴影贴图-阴影位置错误

来自分类Dev

Matplotlib:带有阴影的PDF图形分辨率差

来自分类Dev

什么是iPhone分辨率下采样和上采样?

来自分类Dev

不同屏幕尺寸和分辨率的图像尺寸

来自分类Dev

正确查询屏幕宽度和设备分辨率

来自分类Dev

移动应用中的图像分辨率和大小

来自分类Dev

数组衰减到指针和重载分辨率