Skip to content

Commit 805fd21

Browse files
committed
Reworked Vector class
1 parent d321f0b commit 805fd21

File tree

15 files changed

+206
-169
lines changed

15 files changed

+206
-169
lines changed

Editors/EditorGObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public override void SaveState(object item)
5151

5252
obj.Name = txtName.Text;
5353

54-
Vector temp = obj.Origin;
54+
Vector3D temp = obj.Origin;
5555
temp.X = (float)numX.Value;
5656
temp.Y = (float)numY.Value;
5757
temp.Z = (float)numZ.Value;

Editors/EditorPlane.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public override void SaveState(object item)
3333
return;
3434

3535
// Update the plane's normal
36-
pl.Normal = new Vector(
36+
pl.Normal = new Vector3D(
3737
(float)numX.Value,
3838
(float)numY.Value,
3939
(float)numZ.Value

Engine/Camera.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ public class Camera
44
{
55

66

7-
public Vector Eye { get; set; } = new Vector(0, 0, 1);
8-
public Vector LookAt { get; set; } = new Vector();
7+
public Vector3D Eye { get; set; } = new Vector3D(0, 0, 1);
8+
public Vector3D LookAt { get; set; } = new Vector3D();
99

1010
// defaults to a 4:3 aspect ratio
1111
public float ViewportWidth { get; set; } = 4;

Engine/Intersector.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Unilight
22
{
33
// Item1 = Origin, Item2 = Direction
4-
using Ray = Tuple<Vector, Vector>;
4+
using Ray = Tuple<Vector3D, Vector3D>;
55

66
public class Intersector : Visitor
77
{
@@ -25,13 +25,13 @@ public Ray? Ray
2525
public float Distance { get; set; } = float.MaxValue;
2626

2727
// point of intersection (non-nullable now)
28-
public Vector IntersectionPoint { get; set; } = Vector.Zero;
28+
public Vector3D IntersectionPoint { get; set; } = Vector3D.Zero;
2929

3030
private void intersectionMiss()
3131
{
3232
Result = IntersectionResult.Miss;
3333
Distance = float.MaxValue;
34-
IntersectionPoint = Vector.Zero;
34+
IntersectionPoint = Vector3D.Zero;
3535
}
3636

3737
public void Visit(Plane p)
@@ -63,7 +63,7 @@ public void Visit(Sphere s)
6363
return;
6464
}
6565

66-
Vector e = s.Origin - mRay.Item1;
66+
Vector3D e = s.Origin - mRay.Item1;
6767
float a = e.Dot(mRay.Item2);
6868
float e2 = e.Length();
6969
e2 *= e2;
@@ -90,18 +90,18 @@ public void Visit(Triangle tri)
9090
return;
9191
}
9292

93-
Vector origin = tri.Origin;
94-
Vector v1 = tri.getV1() + origin;
95-
Vector v2 = tri.getV2() + origin;
96-
Vector v3 = tri.getV3() + origin;
93+
Vector3D origin = tri.Origin;
94+
Vector3D v1 = tri.getV1() + origin;
95+
Vector3D v2 = tri.getV2() + origin;
96+
Vector3D v3 = tri.getV3() + origin;
9797

9898
// Implementation of Möller's algorithm
99-
Vector E1 = v2 - v1;
100-
Vector E2 = v3 - v1;
101-
Vector D = mRay.Item2;
102-
Vector P = D.Cross(E2);
103-
Vector T = mRay.Item1 - v1;
104-
Vector Q = T.Cross(E1);
99+
Vector3D E1 = v2 - v1;
100+
Vector3D E2 = v3 - v1;
101+
Vector3D D = mRay.Item2;
102+
Vector3D P = D.Cross(E2);
103+
Vector3D T = mRay.Item1 - v1;
104+
Vector3D Q = T.Cross(E1);
105105

106106
float pDotE1Inv = 1.0f / P.Dot(E1);
107107

Engine/Matrix4.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ public void MultiplyThisBy(Matrix4 m)
106106
}
107107
}
108108

109-
public Vector Multiply(Vector v)
109+
public Vector3D Multiply(Vector3D v)
110110
{
111-
Vector result = new Vector();
111+
Vector3D result = new Vector3D();
112112

113113
// compute x
114114
float sum = 0;

Engine/Raytracer.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
namespace Unilight
44
{
55
// 1st = Origin, 2nd = Direction
6-
using Ray = Tuple<Vector, Vector>;
6+
using Ray = Tuple<Vector3D, Vector3D>;
77

88
using IntPair = Tuple<int, int>;
99

1010
// Eye, LookAt, ViewportWidth, ViewportHeight
11-
using TCamera = Tuple<Vector, Vector, float, float>;
11+
using TCamera = Tuple<Vector3D, Vector3D, float, float>;
1212

1313
public class Raytracer
1414
{
@@ -21,7 +21,7 @@ private struct RayTraversalResult
2121
{
2222
public GObject? Closest { get; set; }
2323
public float Distance { get; set; }
24-
public Vector? IntersectionPoint { get; set; }
24+
public Vector3D? IntersectionPoint { get; set; }
2525
}
2626

2727
public delegate void UpdateCallback(int percent);
@@ -67,7 +67,7 @@ private RgbColor trace(Ray ray, int depth)
6767

6868
GObject? closest = null;
6969
float dist = float.MaxValue;
70-
Vector intersectionPoint = new();
70+
Vector3D intersectionPoint = new();
7171

7272
for (int k = 0; k < Scene.CountObjects(); ++k)
7373
{
@@ -90,16 +90,16 @@ private RgbColor trace(Ray ray, int depth)
9090

9191
if (closest != null && mIntersector.Result == Intersector.IntersectionResult.Hit)
9292
{
93-
Vector n = closest.GetNormalAt(intersectionPoint);
93+
Vector3D n = closest.GetNormalAt(intersectionPoint);
9494
n.Normalize();
9595

9696
Material mat = closest.Material;
9797
float refl = mat.Reflection;
9898

99-
Vector v = ray.Item1 - intersectionPoint; // point to eye vector
99+
Vector3D v = ray.Item1 - intersectionPoint; // point to eye vector
100100
v.Normalize();
101-
Vector r; // reflected ray
102-
Vector l; // light vector
101+
Vector3D r; // reflected ray
102+
Vector3D l; // light vector
103103

104104
for (int k = 0; k < Scene.CountLights(); ++k)
105105
{
@@ -150,7 +150,7 @@ private Matrix4 imageToViewportTransform(int imgWidth, int imgHeight, Camera cam
150150

151151
Matrix4 finalTransform = Matrix4.translate(cam.LookAt.X, cam.LookAt.Y, cam.LookAt.Z);
152152

153-
Vector invNormal = cam.Eye - cam.LookAt;
153+
Vector3D invNormal = cam.Eye - cam.LookAt;
154154
invNormal.Normalize();
155155

156156
Matrix4 scale = Matrix4.identity();
@@ -222,8 +222,8 @@ private void RenderChunk(Point start, Point end, byte[] pixels, int stride)
222222

223223
while (!iter.Done())
224224
{
225-
Vector mapped = i2v.Multiply(new Vector(iter.Cursor.X, iter.Cursor.Y, 0));
226-
Vector dir = mapped - Camera.Eye;
225+
Vector3D mapped = i2v.Multiply(new Vector3D(iter.Cursor.X, iter.Cursor.Y, 0));
226+
Vector3D dir = mapped - Camera.Eye;
227227
dir.Normalize();
228228
Ray ray = new Ray(Camera.Eye, dir);
229229

MainForm.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public class SettingsInfo
1313
public bool computeAmbient = true;
1414
public bool computeFog = true;
1515
public int depth = 1;
16-
public Vector eye;
17-
public Vector lookAt;
16+
public Vector3D eye;
17+
public Vector3D lookAt;
1818
public float width = 0;
1919
public float height = 0;
2020
}
@@ -56,7 +56,7 @@ private void BuildScene()
5656
mScene = new Scene();
5757

5858
Sphere s1 = new Sphere();
59-
s1.Origin = new Vector(-3.5f, 0, 0);
59+
s1.Origin = new Vector3D(-3.5f, 0, 0);
6060
s1.Material.Color = RgbColor.Blue;
6161
s1.Material.Gloss = 30;
6262
s1.Material.Specular = 1.0f;
@@ -66,7 +66,7 @@ private void BuildScene()
6666
mScene.AddObject(s1);
6767

6868
Sphere s2 = new Sphere();
69-
s2.Origin = new Vector(3, 0, 0);
69+
s2.Origin = new Vector3D(3, 0, 0);
7070
s2.Material.Color = RgbColor.Red;
7171
s2.Material.Gloss = 10;
7272
s2.Material.Specular = 0.8f;
@@ -77,7 +77,7 @@ private void BuildScene()
7777
mScene.AddObject(s2);
7878

7979
Sphere s3 = new Sphere();
80-
s3.Origin = new Vector(0, 0, 0);
80+
s3.Origin = new Vector3D(0, 0, 0);
8181
s3.Material.Color = RgbColor.Green;
8282
s3.Material.Gloss = 10;
8383
s3.Material.Specular = 0;
@@ -91,7 +91,7 @@ private void BuildScene()
9191
mScene.AddObject(pln);
9292

9393
PointLight p = new PointLight();
94-
p.setPosition(new Vector(0, 15, 35));
94+
p.setPosition(new Vector3D(0, 15, 35));
9595
p.setColor(RgbColor.White);
9696
p.setName("Point Light");
9797
p.setEnabled(true);
@@ -112,8 +112,8 @@ public MainForm()
112112
// setup camera
113113
Camera cam = new()
114114
{
115-
Eye = new Vector(0, 15, 35),
116-
LookAt = new Vector(0, 0, 0),
115+
Eye = new Vector3D(0, 15, 35),
116+
LookAt = new Vector3D(0, 0, 0),
117117
ViewportWidth = 12,
118118
ViewportHeight = 9,
119119
};

Model/Box.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ public override void Accept (Visitor v)
1212
v.Visit (this);
1313
}
1414

15-
public override Vector GetNormalAt(Vector p)
15+
public override Vector3D GetNormalAt(Vector3D p)
1616
{
1717
// Compute local coordinates relative to box center
18-
Vector local = p - Origin;
18+
Vector3D local = p - Origin;
1919
float halfW = Width / 2f;
2020
float halfH = Height / 2f;
2121
float halfD = Depth / 2f;
@@ -30,12 +30,12 @@ public override Vector GetNormalAt(Vector p)
3030

3131
float min = Math.Min(Math.Min(Math.Min(dx, dxNeg), Math.Min(dy, dyNeg)), Math.Min(dz, dzNeg));
3232

33-
if (min == dx) return new Vector(1, 0, 0);
34-
if (min == dxNeg) return new Vector(-1, 0, 0);
35-
if (min == dy) return new Vector(0, 1, 0);
36-
if (min == dyNeg) return new Vector(0, -1, 0);
37-
if (min == dz) return new Vector(0, 0, 1);
38-
return new Vector(0, 0, -1);
33+
if (min == dx) return new Vector3D(1, 0, 0);
34+
if (min == dxNeg) return new Vector3D(-1, 0, 0);
35+
if (min == dy) return new Vector3D(0, 1, 0);
36+
if (min == dyNeg) return new Vector3D(0, -1, 0);
37+
if (min == dz) return new Vector3D(0, 0, 1);
38+
return new Vector3D(0, 0, -1);
3939
}
4040
}
4141

Model/GObject.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ public abstract class GObject
44
{
55
protected static int _instanceCount = 0; // shared across all instances
66

7-
private Vector mOrigin = new Vector();
7+
private Vector3D mOrigin = new Vector3D();
88

99
public string Name { get; set; }
1010

1111
public Material Material { get; set; } = new ();
1212

13-
public Vector Origin
13+
public Vector3D Origin
1414
{
1515
get => mOrigin;
1616
set => mOrigin = value;
@@ -26,6 +26,6 @@ protected GObject()
2626

2727
public abstract void Accept(Visitor v);
2828

29-
public abstract Vector GetNormalAt(Vector p);
29+
public abstract Vector3D GetNormalAt(Vector3D p);
3030
}
3131
}

Model/Plane.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ namespace Unilight
33

44
public class Plane : GObject
55
{
6-
public Vector Normal { get; set; } = new (0, 1, 0);
6+
public Vector3D Normal { get; set; } = new (0, 1, 0);
77
public float Distance { get; set; } = 0;
88

99
public Plane()
1010
{
1111
Name = "Plane " + _instanceCount;
1212
}
1313

14-
public Plane(Vector n, float d)
14+
public Plane(Vector3D n, float d)
1515
{
1616
Normal = n;
1717
Distance = d;
@@ -24,7 +24,7 @@ public override void Accept(Visitor v)
2424
v.Visit(this);
2525
}
2626

27-
public override Vector GetNormalAt(Vector p)
27+
public override Vector3D GetNormalAt(Vector3D p)
2828
{
2929
return Normal;
3030
}

0 commit comments

Comments
 (0)