From a01cebb0ec54549a2a95b292d089a929b6d30866 Mon Sep 17 00:00:00 2001 From: spatialfree Date: Sat, 6 Nov 2021 03:29:54 -0400 Subject: [PATCH] fiddling with shaders --- Assets/oriel.hlsl | 8 ++++--- ColorCube.cs | 16 ++++++++------ Program.cs | 44 ++++++++++++++++++++++++++++--------- SpatialCursor.cs | 55 +++++++++++++++++++++++++++++++++++++++++------ oriels.bat | 6 +++++- oriels.csproj | 2 ++ oriels.xml | 6 ++++++ 7 files changed, 110 insertions(+), 27 deletions(-) create mode 100644 oriels.xml diff --git a/Assets/oriel.hlsl b/Assets/oriel.hlsl index 1100eba..fd2a6dc 100644 --- a/Assets/oriel.hlsl +++ b/Assets/oriel.hlsl @@ -15,7 +15,7 @@ struct psIn { float4 pos : SV_POSITION; float3 norm : NORMAL0; float2 uv : TEXCOORD0; - float1 depth : TEXCOORD1; + // float1 depth : TEXCOORD1; float4 color : COLOR0; uint view_id : SV_RenderTargetArrayIndex; }; @@ -31,11 +31,13 @@ psIn vs(vsIn input, uint id : SV_InstanceID) { o.uv = input.uv; o.color = input.col; - o.depth = dot(float4(o.norm, 1), normalize(float4(world,1) - sk_camera_pos[o.view_id])); + float lighting = dot(o.norm, normalize(float3(0.3, -0.6, -0.1))); + o.color.rgb = o.color.rgb * lighting; + // o.depth = dot(float4(o.norm, 1), normalize(float4(world,1) - sk_camera_pos[o.view_id])); return o; } float4 ps(psIn input) : SV_TARGET { - clip(input.depth); + // clip(input.depth); return input.color; } \ No newline at end of file diff --git a/ColorCube.cs b/ColorCube.cs index 315822c..bbf61ec 100644 --- a/ColorCube.cs +++ b/ColorCube.cs @@ -11,11 +11,11 @@ class ColorCube { public Color color = Color.White * 0.5f; public float thickness { set { - _thickness = value; + _thiccness = value; colorCube.RootNode.Material["border_size"] = value; } } - float _thickness = 0.01f; + float _thiccness = 0.01f; public ColorCube() { SetColor(Vec3.Zero); @@ -59,10 +59,12 @@ class ColorCube { Vec3 orbPos = Col2Vec(color); - Lines.Add(matrix * new Vec3(-0.5f, orbPos.y, orbPos.z), matrix * new Vec3(0.5f, orbPos.y, orbPos.z), new Color(0, color.g, color.b), new Color(1, color.g, color.b), _thickness); - Lines.Add(matrix * new Vec3(orbPos.x, -0.5f, orbPos.z), matrix * new Vec3(orbPos.x, 0.5f, orbPos.z), new Color(color.r, 0, color.b), new Color(color.r, 1, color.b), _thickness); - Lines.Add(matrix * new Vec3(orbPos.x, orbPos.y, -0.5f), matrix * new Vec3(orbPos.x, orbPos.y, 0.5f), new Color(color.r, color.g, 0), new Color(color.r, color.g, 1), _thickness); + Lines.Add(matrix * new Vec3(-0.5f, orbPos.y, orbPos.z), matrix * new Vec3(0.5f, orbPos.y, orbPos.z), new Color(0, color.g, color.b), new Color(1, color.g, color.b), _thiccness); + Lines.Add(matrix * new Vec3(orbPos.x, -0.5f, orbPos.z), matrix * new Vec3(orbPos.x, 0.5f, orbPos.z), new Color(color.r, 0, color.b), new Color(color.r, 1, color.b), _thiccness); + Lines.Add(matrix * new Vec3(orbPos.x, orbPos.y, -0.5f), matrix * new Vec3(orbPos.x, orbPos.y, 0.5f), new Color(color.r, color.g, 0), new Color(color.r, color.g, 1), _thiccness); - orb.Draw(Matrix.TS(matrix * orbPos, _thickness * 2)); - } + orb.Draw(Matrix.TS(matrix * orbPos, _thiccness * 2)); + + PullRequest.BoundsDraw(bounds, Color.White); + } } diff --git a/Program.cs b/Program.cs index e85e11d..86a216c 100644 --- a/Program.cs +++ b/Program.cs @@ -1,9 +1,13 @@ using System; using StereoKit; +using AutoUpdaterDotNET; class Program { static void Main(string[] args) { - SKSettings settings = new SKSettings { + // AutoUpdater.InstalledVersion = new Version("0.0.0.2"); + // AutoUpdater.Start("https://github.com/dofdev/oriels/blob/main/oriels.xml"); + + SKSettings settings = new SKSettings { appName = "oriels", assetsFolder = "Assets", }; @@ -26,12 +30,14 @@ public static class Mono { OrbitalView.distance = 0.4f; cube.thickness = 0.01f; - ReachCursor reachCursor = new ReachCursor(); SupineCursor supineCursor = new SupineCursor(); + BallsCursor ballsCursor = new BallsCursor(); Oriel oriel = new Oriel(); + Pose p = new Pose(Vec3.One, Quat.Identity); // ACTUALLY COOL + oriel.Start(); while (SK.Step(() => { @@ -43,13 +49,14 @@ public static class Mono { // Default.MaterialHand["color"] = cube.color; // reachCursor.Step(); - supineCursor.Step( - mainHand.aim.position, - offHand.aim.orientation, - mainHand.aim.orientation, - Mono.mainHand.IsStickClicked - ); - // oriel.Step(); + // supineCursor.Step( + // offHand.aim.orientation, + // mainHand.aim.position, + // mainHand.aim.orientation, + // Mono.mainHand.IsStickClicked + // ); + + oriel.Step(); // cursor.Draw(Matrix.S(0.1f)); })) ; @@ -63,6 +70,7 @@ public class Oriel { // render Material mat = new Material(Shader.FromFile("oriel.hlsl")); Mesh mesh = Mesh.GenerateCube(new Vec3(1, 1, 1)); + Model model = Model.FromFile("oriel.glb", Default.ShaderUnlit); public void Start() { bounds = new Bounds(Vec3.Zero, new Vec3(1f, 0.5f, 0.5f)); @@ -75,6 +83,22 @@ public class Oriel { } public void Step() { - mesh.Draw(mat, Matrix.TRS(bounds.center, Quat.Identity, bounds.dimensions)); + model.Draw(Matrix.TRS(bounds.center, Quat.Identity, bounds.dimensions)); + // mesh.Draw(mat, Matrix.TRS(bounds.center, Quat.Identity, bounds.dimensions)); + } +} + +public static class PullRequest { + public static Vec3 VecMulti(Vec3 a, Vec3 b) { return new Vec3(a.x * b.x, a.y * b.y, a.z * b.z); } + + public static void BoundsDraw(Bounds b, Color color) { + Vec3 c = Vec3.One / 2; + Vec3 ds = b.dimensions; + for (int i = 0; i < 4; i++) { + Quat q = Quat.FromAngles(i * 90, 0, 0); + Lines.Add(q * VecMulti(new Vec3(0, 0, 0) - c, ds), q * VecMulti(new Vec3(0, 1, 0) - c, ds), color, color, 0.01f); + Lines.Add(q * VecMulti(new Vec3(0, 1, 0) - c, ds), q * VecMulti(new Vec3(1, 1, 0) - c, ds), color, color, 0.01f); + Lines.Add(q * VecMulti(new Vec3(1, 1, 0) - c, ds), q * VecMulti(new Vec3(1, 0, 0) - c, ds), color, color, 0.01f); + } } } diff --git a/SpatialCursor.cs b/SpatialCursor.cs index c93eaa5..0d07266 100644 --- a/SpatialCursor.cs +++ b/SpatialCursor.cs @@ -51,7 +51,7 @@ public class TwistCursor : SpatialCursor { public class SupineCursor : SpatialCursor { float calibStr; Quat calibQuat; - public void Step(Vec3 mainPos, Quat offQuat, Quat mainQuat, bool calibrate = false) { + public void Step(Quat offQuat, Vec3 mainPos, Quat mainQuat, bool calibrate = false) { Quat rel = Quat.LookAt(Vec3.Zero, offQuat * Vec3.Forward); float twist = (Vec3.Dot(rel * -Vec3.Right, offQuat * Vec3.Up) + 1) / 2; @@ -69,11 +69,54 @@ public class SupineCursor : SpatialCursor { } } -public class TankCursor : SpatialCursor { - public void Step() { - pos = Vec3.Zero; - rot = Quat.Identity; +public class BallsCursor : SpatialCursor { + Vec3 offPivot, mainPivot; + Quat offBall, mainBall; + Quat oldOffQuat, oldMainQuat; + float offRadius, mainRadius; + bool offPress, mainPress; + public void Step( + Vec3 offPos, Quat offQuat, + Vec3 mainPos, Quat mainQuat, + bool offGrip, bool mainGrip, bool calibrate = false + ) { + + Function(offPos, ref offPivot, ref offBall, offQuat, ref oldOffQuat, ref offRadius, offGrip, ref offPress); + Function(mainPos, ref mainPivot, ref mainBall, mainQuat, ref oldMainQuat, ref mainRadius, mainGrip, ref mainPress); + + void Function(Vec3 handPos, ref Vec3 pivot, ref Quat ball, Quat quat, ref Quat oldQuat, ref float radius, bool grip, ref bool press) { + if (grip) { + if (!press) { + pivot = pos + ball * Vec3.Forward * radius; + oldQuat = quat; + press = true; + } + ball = Quat.Difference(oldQuat, quat) * ball; + pos = pivot + (ball * -Vec3.Forward * radius); + + oldQuat = quat; + } + else { + press = false; + } + + // Sphere sphere = new Sphere(pos, mainDiameter); + Default.MeshSphere.Draw( + clearMat, + Matrix.TS(pos + ball * Vec3.Forward * radius, radius * 2) + ); + } + + if (calibrate) + { + pos = Vec3.Lerp(offPos, mainPos, 0.5f); + offRadius = mainRadius = Vec3.Distance(offPos, mainPos) / 2; + offBall = Quat.LookAt(mainPos, offPos); + mainBall = Quat.LookAt(offPos, mainPos); + } model.Draw(Matrix.TS(pos, 0.06f)); + clearMat.SetColor("color", new Color(1, 1, 1, 0.1f)); } -} \ No newline at end of file + Material clearMat = Default.MaterialHand; +} diff --git a/oriels.bat b/oriels.bat index 9018690..ce16881 100644 --- a/oriels.bat +++ b/oriels.bat @@ -1,4 +1,8 @@ dotnet build pause -cd bin/Debug/netcoreapp3.1/ +cd bin/Debug +@REM echo "zipping into dofdev site" +@REM 7z u oriels.zip %cd%/netcoreapp3.1 +@REM Xcopy "oriels.zip" "C:/dofdev/Web Development/dofdev/res/oriels.zip" /F /Y +cd netcoreapp3.1 oriels.exe \ No newline at end of file diff --git a/oriels.csproj b/oriels.csproj index a964ba2..dfb0833 100644 --- a/oriels.csproj +++ b/oriels.csproj @@ -3,9 +3,11 @@ Exe netcoreapp3.1 + en + diff --git a/oriels.xml b/oriels.xml new file mode 100644 index 0000000..b33aa3b --- /dev/null +++ b/oriels.xml @@ -0,0 +1,6 @@ + + + 0.0.0.1 + https://dofdev.org/res/oriels.zip + true + \ No newline at end of file