diff --git a/Assets/colorcube.hlsl b/Assets/colorcube.hlsl
new file mode 100644
index 0000000..7f04c33
--- /dev/null
+++ b/Assets/colorcube.hlsl
@@ -0,0 +1,43 @@
+#include "stereokit.hlsli"
+
+//--name = dofdev/colorcube
+// float4 color;
+float _height;
+float _ypos;
+
+struct vsIn {
+ float4 pos : SV_POSITION;
+ float3 norm : NORMAL0;
+ float2 uv : TEXCOORD0;
+ float4 col : COLOR0;
+};
+struct psIn {
+ float4 pos : SV_POSITION;
+ float3 world : NORMAL0;
+ float3 norm : NORMAL1;
+ float2 uv : TEXCOORD0;
+ float4 color : COLOR0;
+ uint view_id : SV_RenderTargetArrayIndex;
+};
+
+psIn vs(vsIn input, uint id : SV_InstanceID) {
+ psIn o;
+ o.view_id = id % sk_view_count;
+ id = id / sk_view_count;
+
+ o.world = mul(input.pos, sk_inst[id].world).xyz;
+ o.pos = mul(float4(o.world, 1), sk_viewproj[o.view_id]);
+ o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world));
+
+ o.uv = input.uv;
+ o.color = input.col;
+ float lighting = dot(o.norm, normalize(float3(-0.3, 0.6, 0.1)));
+ lighting = (clamp(lighting, 0, 1) * 0.8) + 0.2;
+ o.color.rgb = o.color.rgb * lighting;
+ return o;
+}
+
+float4 ps(psIn input) : SV_TARGET {
+ input.color.r = 1;
+ return input.color;
+}
\ No newline at end of file
diff --git a/ColorCube.cs b/ColorCube.cs
index bbf61ec..8930081 100644
--- a/ColorCube.cs
+++ b/ColorCube.cs
@@ -2,7 +2,8 @@ using System;
using StereoKit;
class ColorCube {
- static Material orbMat = Default.MaterialUnlit.Copy();
+ static Shader shaderColorCube = Shader.FromFile("colorcube.hlsl");
+ static Material orbMat = Default.MaterialUnlit.Copy();
static Model orb = new Model(Default.MeshSphere, orbMat);
static Model colorCube = Model.FromFile("colorcube.glb", Shader.UIBox);
Bounds bounds = new Bounds(Vec3.Zero, Vec3.One * 1.25f);
@@ -65,6 +66,11 @@ class ColorCube {
orb.Draw(Matrix.TS(matrix * orbPos, _thiccness * 2));
- PullRequest.BoundsDraw(bounds, Color.White);
+ PullRequest.BoundsDraw(bounds, _thiccness, Color.White);
+
+ // can't change shader lol
+ // Default.MaterialUnlit.Shader = shaderColorCube;
+ // Rods time it is!
+ // spatialize the stereokit line shader
}
}
diff --git a/Program.cs b/Program.cs
index 78e739f..f9b5cc2 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,5 +1,9 @@
using System;
using StereoKit;
+using System.Net;
+using System.Net.Sockets;
+using System.Threading;
+using System.Threading.Tasks;
class Program {
static void Main(string[] args) {
@@ -21,6 +25,25 @@ public static class Mono {
public static Controller offHand, mainHand;
public static void Run() {
+ void GetIPs()
+ {
+ string localIP;
+ using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
+ {
+ socket.Connect("8.8.8.8", 65530);
+ IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
+ localIP = endPoint.Address.ToString();
+ }
+ // Console.WriteLine("Your local IP is: " + localIP);
+ string publicIP = new WebClient().DownloadString("https://ipv4.icanhazip.com/").TrimEnd();
+ // Console.WriteLine("Your IP is: " + publicIP);
+ }
+
+ Peer peer0 = new Peer("peer0");
+ Peer peer1 = new Peer("peer1");
+ peer0.Start(1, true);
+ peer1.Start(2, false);
+
ColorCube cube = new ColorCube();
OrbitalView.strength = 4;
OrbitalView.distance = 0.4f;
@@ -28,12 +51,10 @@ public static class Mono {
ReachCursor reachCursor = new ReachCursor();
SupineCursor supineCursor = new SupineCursor();
- BallsCursor ballsCursor = new BallsCursor();
+ ClawCursor clawCursor = new ClawCursor();
Oriel oriel = new Oriel();
- Pose p = new Pose(Vec3.One, Quat.Identity); // ACTUALLY COOL
-
oriel.Start();
while (SK.Step(() => {
@@ -46,20 +67,65 @@ public static class Mono {
// reachCursor.Step();
// supineCursor.Step(
- // offHand.aim.orientation,
- // mainHand.aim.position,
- // mainHand.aim.orientation,
- // Mono.mainHand.IsStickClicked
+ // new Pose(Vec3.Zero, offHand.aim.orientation),
+ // new Pose(mainHand.aim.position, mainHand.aim.orientation),
+ // mainHand.IsStickClicked
// );
-
- oriel.Step();
+ // clawCursor.Step(
+ // Input.Head.position - Vec3.Up * 0.2f,
+ // new Pose(offHand.aim.position, offHand.aim.orientation),
+ // new Pose(mainHand.aim.position, mainHand.aim.orientation),
+ // mainHand.IsStickClicked
+ // );
+
+ // oriel.Step();
// cursor.Draw(Matrix.S(0.1f));
- })) ;
+ }));
SK.Shutdown();
}
}
+public class Peer {
+ public string name;
+ public Peer(string name) {
+ this.name = name;
+ }
+
+ public async void Start(int increment, bool log) {
+ int port = 1234;
+ string serverIP = "139.177.201.219";
+ // try connecting to the server
+ if (log) Console.WriteLine("{0} attempting to connect to server...", name);
+
+ // create a new socket
+ Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+
+ // server endpoint
+ EndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(serverIP), port);
+ socket.Connect(serverEndPoint);
+
+ // send a message to the server
+ if (log) Console.WriteLine("{0} sending message to server...", name);
+
+ int test = 0;
+ // send every 0.1 seconds
+ while (true) {
+ // send a message to the server
+ test += increment;
+ socket.SendTo(BitConverter.GetBytes(test), serverEndPoint);
+
+ // receive a message from the server
+ byte[] data = new byte[1024];
+ socket.ReceiveFrom(data, ref serverEndPoint);
+ if (log) Console.WriteLine("{0} received from server: {1}", name, BitConverter.ToInt32(data, 0));
+
+ // sleep for 0.1 seconds
+ await Task.Delay(100);
+ }
+ }
+}
+
public class Oriel {
public Bounds bounds;
@@ -86,16 +152,18 @@ public class Oriel {
}
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) {
+ public static void BoundsDraw(Bounds b, float thickness, 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);
+ Lines.Add(q * (new Vec3(0, 0, 0) - c) * ds, q * (new Vec3(0, 1, 0) - c) * ds, color, color, thickness);
+ Lines.Add(q * (new Vec3(0, 1, 0) - c) * ds, q * (new Vec3(1, 1, 0) - c) * ds, color, color, thickness);
+ Lines.Add(q * (new Vec3(1, 1, 0) - c) * ds, q * (new Vec3(1, 0, 0) - c) * ds, color, color, thickness);
+
+ // convert to linepoints
}
}
+
+ // amplify quaternions (q * q * lerp(q.i, q, %))
}
diff --git a/README.md b/README.md
index 8f2888a..fac9065 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
## oriels
-*a dof oriented os*
+*a dof driven os*
@@ -16,3 +16,17 @@
- implement all dofs from site
- merge networking prototypes
- architect interfaces for navigation
+
+## stream
+- ~~refactor cursors to pose data ~30m~~
+- ~~claw cursor ~30m~~
+- ~~refactor networking code to async based on video ~1hr~~
+- ~~haul the networking into stereokit ~30m~~
+
+pb = 2:30 (end at 1:30)
+
+- do something spatial with the data
+
+- make a batch script for niko so he can test things easily
+
+- connect dof site data to oriels (networking will help with capturing gifs)
\ No newline at end of file
diff --git a/SpatialCursor.cs b/SpatialCursor.cs
index 0d07266..a79476b 100644
--- a/SpatialCursor.cs
+++ b/SpatialCursor.cs
@@ -9,31 +9,19 @@ public abstract class SpatialCursor {
public static Model model = Model.FromFile("cursor.glb", Shader.Default);
}
-// : SpatialCursor
-public class ReachCursor {
- static Material unlitMat = Default.MaterialUnlit.Copy();
- static Model modelCursor = Model.FromFile("cursor.glb", Shader.Default);
- static Model modelSphere = new Model(Default.MeshSphere, unlitMat);
+// this is just a stretch cursor derivative
+public class ReachCursor : SpatialCursor {
+ static Vec3 origin;
+ public void Step(Vec3 mainPos, bool calibrate) {
+ float stretch = (origin - mainPos).Length;
+ Vec3 dir = (mainPos - origin).Normalized;
+ Vec3 pos = mainPos + dir * stretch * 3;
+ model.Draw(Matrix.TS(pos, 0.06f));
+ Lines.Add(origin, pos, Color.White, 0.01f);
+ model.Draw(Matrix.TS(origin, 0.04f));
- static Vec3[] pullPoints = new Vec3[2];
-
- public void Step() {
- for (int h = 0; h < (int)Handed.Max; h++) {
- // Get the pose for the index fingertip
- Hand hand = Input.Hand((Handed)h);
- Vec3 indexTip = hand[FingerId.Index, JointId.Tip].Pose.position;
- Vec3 thumbTip = hand[FingerId.Thumb, JointId.Tip].Pose.position;
- Vec3 pinchPos = Vec3.Lerp(indexTip, thumbTip, 0.5f);
- if (hand.IsPinched) {
- pullPoints[h] = pinchPos;
- }
-
- float stretch = (pullPoints[h] - pinchPos).Length;
- Vec3 dir = (pinchPos - pullPoints[h]).Normalized;
- Vec3 pos = pinchPos + dir * stretch * 3;
- modelCursor.Draw(Matrix.TS(pos, 0.06f));
- Lines.Add(pullPoints[h], pos, Color.White, 0.01f);
- modelSphere.Draw(Matrix.TS(pullPoints[h], 0.04f));
+ if (calibrate) {
+ origin = mainPos;
}
}
}
@@ -48,75 +36,45 @@ public class TwistCursor : SpatialCursor {
}
}
+// a more symmetrical one would be cool
public class SupineCursor : SpatialCursor {
float calibStr;
Quat calibQuat;
- 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;
+ public void Step(Pose offPose, Pose mainPose, bool calibrate) {
+ Quat rel = Quat.LookAt(Vec3.Zero, offPose.orientation * Vec3.Forward);
+ float twist = (Vec3.Dot(rel * -Vec3.Right, offPose.orientation * Vec3.Up) + 1) / 2;
- pos = mainPos + mainQuat * calibQuat * Vec3.Forward * calibStr * twist;
+ pos = mainPose.position + mainPose.orientation * calibQuat * Vec3.Forward * calibStr * twist;
if (calibrate) {
Vec3 target = Input.Head.position + Input.Head.Forward;
- calibStr = Vec3.Distance(mainPos, target) * 2;
+ calibStr = Vec3.Distance(mainPose.position, target) * 2;
- Quat calibAlign = Quat.LookAt(mainPos, target);
- calibQuat = mainQuat.Inverse * calibAlign;
+ Quat calibAlign = Quat.LookAt(mainPose.position, target);
+ calibQuat = mainPose.orientation.Inverse * calibAlign;
}
model.Draw(Matrix.TS(pos, 0.06f));
}
}
-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
- ) {
+// for fun
+public class ClawCursor : SpatialCursor {
+ Quat calibOff, calibMain;
+ public void Step(Vec3 chest, Pose offPose, Pose mainPose, bool calibrate) {
+ float wingspan = 0.5f;
+ Quat offQuat = calibOff * offPose.orientation;
+ Quat mainQuat = calibMain * mainPose.orientation;
+ Vec3 elbow = chest + mainQuat * mainQuat * Vec3.Forward * wingspan;
+ pos = elbow + offQuat * offQuat * Vec3.Forward * wingspan;
- 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);
+ if (calibrate) {
+ calibOff = offPose.orientation.Inverse;
+ calibMain = mainPose.orientation.Inverse;
}
+ Lines.Add(chest, elbow, Color.White, 0.01f);
+ Lines.Add(elbow, pos, Color.White, 0.01f);
model.Draw(Matrix.TS(pos, 0.06f));
- clearMat.SetColor("color", new Color(1, 1, 1, 0.1f));
}
- Material clearMat = Default.MaterialHand;
}
diff --git a/oriels.csproj b/oriels.csproj
index d5ea7d6..a7aaa31 100644
--- a/oriels.csproj
+++ b/oriels.csproj
@@ -20,11 +20,13 @@
+
+