From f3fdc4c52a037bd8da48553634b54f774d26e80d Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sat, 10 Dec 2022 21:20:38 +0530 Subject: [PATCH] fix some bugs --- src/InstanceManager.hx | 3 ++- src/MarbleWorld.hx | 4 ++++ src/Sky.hx | 2 ++ src/shaders/Skybox.hx | 21 +++++++++++++++++++-- src/triggers/Trigger.hx | 4 ++-- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/InstanceManager.hx b/src/InstanceManager.hx index 76d511b2..2798af07 100644 --- a/src/InstanceManager.hx +++ b/src/InstanceManager.hx @@ -60,6 +60,7 @@ class InstanceManager { dtsShader.currentOpacity = instance.gameObject.currentOpacity; } var transform = instance.emptyObj.getAbsPos(); + minfo.meshbatch.shadersChanged = true; minfo.meshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name); minfo.meshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights; minfo.meshbatch.setTransform(transform); @@ -67,7 +68,7 @@ class InstanceManager { } } if (minfo.transparencymeshbatch != null) { - var transparentinstances = visibleinstances.filter(x -> x.gameObject.currentOpacity != 1); + var transparentinstances = visibleinstances.filter(x -> x.gameObject.currentOpacity != 1 && x.gameObject.currentOpacity != 0); // Filter out all zero opacity things too minfo.transparencymeshbatch.begin(transparentinstances.length); for (instance in transparentinstances) { // Non opaque shit var dtsShader = minfo.transparencymeshbatch.material.mainPass.getShader(DtsTexture); diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 1342c178..675dba55 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -267,6 +267,8 @@ class MarbleWorld extends Scheduler { worker.loadFile(file); } + this.scene.camera.zFar = Math.max(4000, Std.parseFloat(this.skyElement.visibledistance)); + this.sky = new Sky(); sky.dmlPath = "data/skies/sky_day.dml"; @@ -312,6 +314,8 @@ class MarbleWorld extends Scheduler { "shapes/pads/red.jpg", "shapes/pads/blue.jpg", "shapes/pads/green.jpg", + "shapes/items/gem.dts", // Ew ew + "shapes/items/gemshine.png", ]; for (file in marblefiles) { worker.loadFile(file); diff --git a/src/Sky.hx b/src/Sky.hx index 32309072..a6bf987c 100644 --- a/src/Sky.hx +++ b/src/Sky.hx @@ -51,8 +51,10 @@ class Sky extends Object { // env.compute(); // var renderer = cast(level.scene.renderer, h3d.scene.pbr.Renderer); var shad = new Skybox(texture); + skyMesh.material.mainPass.removeShader(skyMesh.material.textureShader); skyMesh.material.mainPass.addShader(shad); skyMesh.material.mainPass.depthWrite = false; + skyMesh.material.mainPass.depth(false, h3d.mat.Data.Compare.LessEqual); cubemap = texture; onFinish(); }); diff --git a/src/shaders/Skybox.hx b/src/shaders/Skybox.hx index 09c2f8ec..4a373482 100644 --- a/src/shaders/Skybox.hx +++ b/src/shaders/Skybox.hx @@ -3,21 +3,38 @@ package shaders; class Skybox extends hxsl.Shader { static var SRC = { var pixelColor:Vec4; - var transformedNormal:Vec3; var transformedPosition:Vec3; + var projectedPosition:Vec4; @param var texture:SamplerCube; @global var camera:{ var position:Vec3; var viewProj:Mat4; var view:Mat4; var proj:Mat4; + var projFlip:Float; + }; + @input var input:{ + var position:Vec3; + }; + @global var global:{ + @perObject var modelView:Mat4; + }; + var output:{ + var position:Vec4; + var color:Vec4; + var depth:Float; }; var projNorm:Vec3; + function __init__() { + transformedPosition = input.position * global.modelView.mat3x4(); + projectedPosition = vec4(transformedPosition, 1) * camera.viewProj; + } function vertex() { projNorm = transformedPosition - camera.position; + output.position = projectedPosition * vec4(1, camera.projFlip, 1, 1); } function fragment() { - pixelColor.rgba = texture.get(normalize(projNorm)).rgba; + output.color = texture.get(normalize(projNorm)).rgba; } } diff --git a/src/triggers/Trigger.hx b/src/triggers/Trigger.hx index d7d00ae2..37433269 100644 --- a/src/triggers/Trigger.hx +++ b/src/triggers/Trigger.hx @@ -43,8 +43,8 @@ class Trigger extends GameObject { var mat = new Matrix(); var quat = MisParser.parseRotation(element.rotation); - // quat.x = -quat.x; - // quat.w = -quat.w; + quat.x = -quat.x; + quat.w = -quat.w; quat.toMatrix(mat); var scale = MisParser.parseVector3(element.scale); mat.scale(scale.x, scale.y, scale.z);