board basics

This commit is contained in:
spatialfree 2022-05-02 10:56:57 -04:00
parent 2574429a41
commit f6db3e8981
4 changed files with 75 additions and 14 deletions

View file

@ -56,20 +56,22 @@ public class Mono {
Renderer.SetClip(0.02f, 1000f); Renderer.SetClip(0.02f, 1000f);
} }
Vec3 pos = new Vec3(0f, 0f, 0f); // see below Vec3 pos = new Vec3(0f, 0f, 0f);
Quat ori = Quat.Identity;
float yy = 0f;
public void Step() { public void Step() {
Renderer.CameraRoot = Matrix.T(pos); Renderer.CameraRoot = Matrix.TR(pos, ori);
rig.Step(); rig.Step();
scene.Step(); scene.Step();
// ------------------------------------------------- // -------------------------------------------------
rGlove.Step(); lGlove.Step(); // rGlove.Step(); lGlove.Step();
rBlock.Step(); lBlock.Step(); // rBlock.Step(); lBlock.Step();
cubicCon.Step(); // cubicCon.Step();
// Vec3 fullstick = rig.Fullstick(false); // Vec3 fullstick = rig.Fullstick(false);
@ -77,7 +79,34 @@ public class Mono {
// oriel.Step(); // oriel.Step();
pos.z += Time.Elapsedf * 0.1f; // board
// use the active con position to point from the head *top down perspective (y = 0)
// to determine the board direction
Con handleCon = rig.HandleCon();
Vec3 boardDir = (handleCon.pos.X0Z - rig.Head().position.X0Z).Normalized;
Quat boardRot = Quat.LookDir(boardDir);
// boardDir = (handleCon.pos.X0Z - head.position.X0Z).normalized
// boardRot = Quat.LookDir(boardDir)
// boardPos += boardDir * handleCon.trigger * speed * delta
pos += boardDir * handleCon.device.trigger * Time.Elapsedf;
yy += handleCon.device.stick.x * 90 * Time.Elapsedf;
ori = Quat.FromAngles(0f, yy, 0f); // stick.x -> twist z
Vec3 boardPos = pos + Vec3.Up * -1.35f; // rig.Head().position.X0Z
Mesh.Cube.Draw(Material.Default, Matrix.TRS(boardPos, boardRot, new Vec3(0.18f, 0.06f, 0.6f)));
// having a board underneath my feet and a virtual handlebar in my hand
// did a lot to improve the quality of the experience (+immersion -sickness)
// don't do more just yet!
// these are all important, but lets start small and scrappy + it's 9AM
// twist turning
// handleCon
// tighter boardDir
// lean turning (head moving in relation to hand, doesn't that happen a little already?)
// ------------------------------------------------- // -------------------------------------------------

View file

@ -360,13 +360,13 @@ public class Peer {
PullRequest.BlockOut(Matrix.TRS(headset.position + Input.Head.Forward * -0.15f, headset.orientation, Vec3.One * 0.3f), color); PullRequest.BlockOut(Matrix.TRS(headset.position + Input.Head.Forward * -0.15f, headset.orientation, Vec3.One * 0.3f), color);
} }
Bezier.Draw( // Bezier.Draw(
mono.rGlove.virtualGlove.position, // mono.rGlove.virtualGlove.position,
mono.rig.rCon.pos, // mono.rig.rCon.pos,
mono.rig.lCon.pos, // mono.rig.lCon.pos,
mono.lGlove.virtualGlove.position, // mono.lGlove.virtualGlove.position,
new Color(1, 1, 1, 0.1f) // new Color(1, 1, 1, 0.1f)
); // );
for (int i = 0; i < blocks.Length; i++) { for (int i = 0; i < blocks.Length; i++) {
NetBlock block = blocks[i]; NetBlock block = blocks[i];

View file

@ -10,6 +10,16 @@ public class Rig {
public Con rCon = new Con(), lCon = new Con(); public Con rCon = new Con(), lCon = new Con();
public Con Con(bool chirality) { return chirality ? rCon : lCon; } public Con Con(bool chirality) { return chirality ? rCon : lCon; }
bool handleChirality = false;
public Con HandleCon() {
return Con(handleChirality);
}
public Pose Head() {
Pose pose = Input.Head;
pose.position += pose.orientation * Vec3.Forward * -0.1f;
return pose;
}
public Pose rShoulder, lShoulder; public Pose rShoulder, lShoulder;
public Pose Shoulder(bool chirality) { return chirality ? rShoulder : lShoulder; } public Pose Shoulder(bool chirality) { return chirality ? rShoulder : lShoulder; }
@ -22,8 +32,11 @@ public class Rig {
rCon.Step(true); rCon.Step(true);
lCon.Step(false); lCon.Step(false);
if (rCon.gripBtn.frameDown) { handleChirality = true; }
if (lCon.gripBtn.frameDown) { handleChirality = false; }
// Shoulders // Shoulders
Vec3 headPos = Input.Head.position + Input.Head.Forward * -0.15f; Vec3 headPos = Input.Head.position + Input.Head.Forward * -0.15f; // Input.Head -> Head() ?
Vec3 shoulderDir = ( Vec3 shoulderDir = (
(lCon.pos.X0Z - headPos.X0Z).Normalized + (lCon.pos.X0Z - headPos.X0Z).Normalized +
(rCon.pos.X0Z - headPos.X0Z).Normalized (rCon.pos.X0Z - headPos.X0Z).Normalized

View file

@ -48,6 +48,25 @@ public class Scene {
data.matrix = (Matrix)System.Numerics.Matrix4x4.Transpose(oriel.matrix); data.matrix = (Matrix)System.Numerics.Matrix4x4.Transpose(oriel.matrix);
data.dimensions = oriel.bounds.dimensions; data.dimensions = oriel.bounds.dimensions;
data.dimensions = Vec3.Zero;
buffer.Set(data); buffer.Set(data);
// PullRequest.BlockOut(floor.GetPose().ToMatrix(floorScale), Color.White * 0.333f, matFloor); // PullRequest.BlockOut(floor.GetPose().ToMatrix(floorScale), Color.White * 0.333f, matFloor);