Skip to content

Commit 5ad6c7d

Browse files
Merge pull request #358 from P0rc3lain/env-update
Env update
2 parents f851512 + 2393dc0 commit 5ad6c7d

4 files changed

Lines changed: 25 additions & 3 deletions

File tree

Engine/Shaders/Common/Transformation.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,7 @@
88

99
metal::float3x3 extractRotation(metal::float4x4 transformation);
1010
metal::float4 extractPosition(metal::float4x4 transformation);
11+
simd::float4x4 perspectiveProjection(float fovYRadians,
12+
float aspect,
13+
float nearZ,
14+
float farZ);

Engine/Shaders/Common/Transformation.metal

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,22 @@ float3x3 extractRotation(float4x4 transformation) {
1313
}
1414

1515
float4 extractPosition(float4x4 transformation) {
16-
return transformation * float4(0, 0, 0, 1);
16+
return transformation.columns[3];
17+
}
18+
19+
simd::float4x4 perspectiveProjection(float fovYRadians,
20+
float aspect,
21+
float nearZ,
22+
float farZ)
23+
{
24+
float ys = 1.0f / tan(fovYRadians * 0.5f);
25+
float xs = ys / aspect;
26+
float zs = farZ / (farZ - nearZ);
27+
28+
return simd::float4x4{
29+
simd::float4(xs, 0, 0, 0),
30+
simd::float4( 0, ys, 0, 0),
31+
simd::float4( 0, 0, zs, 1),
32+
simd::float4( 0, 0, -zs * nearZ, 0)
33+
};
1734
}

Engine/Shaders/EnvironmentMapper.metal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ struct RasterizedData {
2323
vertex RasterizedData environmentVertexShader(VertexP in [[stage_in]],
2424
constant CameraUniforms & camera [[buffer(kAttributeEnvironmentVertexShaderBufferCameraUniforms)]],
2525
constant ModelUniforms * modelUniforms [[buffer(kAttributeEnvironmentVertexShaderBufferModelUniforms)]]) {
26+
float4x4 projectionMatrix = perspectiveProjection(30.0f, 16.0f/9.0f, 0.01f, 100.0f);
2627
float3x3 extractedRotation = extractRotation(modelUniforms[camera.index].modelMatrixInverse);
2728
return RasterizedData {
28-
camera.projectionMatrix * float4(extractedRotation * in.position, 1),
29+
projectionMatrix * float4(extractedRotation * in.position, 1),
2930
in.position
3031
};
3132
}

0 commit comments

Comments
 (0)