35 lines
720 B
HLSL
35 lines
720 B
HLSL
cbuffer cb0 : register (b0)
|
|
{
|
|
float aspectRatio;
|
|
float distanceToCenter;
|
|
float dummy2;
|
|
float dummy3;
|
|
float4x4 modelRotation;
|
|
float4 pivot;
|
|
}
|
|
|
|
float4x4 getProjMatrix()
|
|
{
|
|
float yScale = 2.4142135623730950488016887242097;//cot(fovY/2)
|
|
float xScale = yScale / aspectRatio;
|
|
float n = 0.1f;
|
|
float f = 100.0f;
|
|
float4x4 proj =
|
|
{
|
|
xScale, 0, 0, 0,
|
|
0, yScale, 0, 0,
|
|
0, 0, f/(f-n), 1,
|
|
0, 0, -n*f/(f-n), 0
|
|
};
|
|
return proj;
|
|
}
|
|
|
|
void main(in float3 pos : POSITION, out float4 result : SV_POSITION, inout float3 normal : NORMAL, inout float4 uv : TEXCOORD)
|
|
{
|
|
float4 v = float4(pos, 1);
|
|
v.xyz -= pivot.xyz;
|
|
v = mul(v, modelRotation);
|
|
v.z += distanceToCenter;
|
|
v = mul(v, getProjMatrix());
|
|
result = v;
|
|
} |