From cce61d80753d1899852aa520a9c209661ace163d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 30 Mar 2024 11:31:44 -0500 Subject: [PATCH] fix: uniform inv proj mat --- .../Armor/components/CoreArmorSceneComponent/index.tsx | 5 ++++- .../components/CoreArmorSceneComponent/shaders/fragment.glsl | 4 ++-- .../components/CoreArmorSceneComponent/shaders/vertex.glsl | 2 -- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/Armor/components/CoreArmorSceneComponent/index.tsx b/src/components/Armor/components/CoreArmorSceneComponent/index.tsx index de5c27e95..30bb92619 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/index.tsx +++ b/src/components/Armor/components/CoreArmorSceneComponent/index.tsx @@ -50,6 +50,7 @@ export function CoreArmorSceneComponent({ opaque: { value: null }, useSpacedArmor: { value: null }, + inverseProjectionMatrix: { value: null }, resolution: { value: new Vector2() }, spacedArmorBuffer: { value: null }, spacedArmorDepth: { value: null }, @@ -124,13 +125,15 @@ export function CoreArmorSceneComponent({ }; }, []); - useFrame(({ gl }) => { + useFrame(({ gl, camera }) => { gl.getSize(material.uniforms.resolution.value).multiplyScalar( gl.getPixelRatio(), ); material.uniforms.spacedArmorBuffer.value = spacedArmorRenderTarget.texture; material.uniforms.spacedArmorDepth.value = spacedArmorRenderTarget.depthTexture; + material.uniforms.inverseProjectionMatrix.value = + camera.projectionMatrixInverse; }); return ( diff --git a/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl b/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl index 283184728..cc71046d2 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl +++ b/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl @@ -1,6 +1,5 @@ varying vec3 vNormal; varying vec3 vViewPosition; -varying mat4 vProjectionMatrix; uniform float thickness; uniform float penetration; @@ -15,13 +14,14 @@ uniform float explosionRadius; uniform bool greenPenetration; uniform bool opaque; uniform bool useSpacedArmor; +uniform mat4 inverseProjectionMatrix; uniform highp sampler2D spacedArmorBuffer; uniform highp sampler2D spacedArmorDepth; float depthToDistance(float depth) { vec4 clipPosition = vec4(gl_FragCoord.xy / resolution * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); - vec4 eyePosition = inverse(vProjectionMatrix) * clipPosition; + vec4 eyePosition = inverseProjectionMatrix * clipPosition; return length(eyePosition.xyz / eyePosition.w); } diff --git a/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl b/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl index 0e4d1407f..82f94e255 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl +++ b/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl @@ -1,12 +1,10 @@ varying vec3 vNormal; varying vec3 vViewPosition; -varying mat4 vProjectionMatrix; void main() { vec4 vViewPosition4 = modelViewMatrix * vec4(position, 1.0); vViewPosition = vViewPosition4.xyz; - vProjectionMatrix = projectionMatrix; vNormal = normalMatrix * normal; gl_Position = projectionMatrix * vViewPosition4;