-
Notifications
You must be signed in to change notification settings - Fork 9
/
Camera.cs
30 lines (24 loc) · 1.22 KB
/
Camera.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
using static System.Runtime.Intrinsics.X86.Avx;
internal class Camera
{
public Camera(VectorPacket256 pos, VectorPacket256 forward, VectorPacket256 up, VectorPacket256 right) { Pos = pos; Forward = forward; Up = up; Right = right; }
public VectorPacket256 Pos;
public VectorPacket256 Forward;
public VectorPacket256 Up;
public VectorPacket256 Right;
public static Camera Create(VectorPacket256 pos, VectorPacket256 lookAt)
{
VectorPacket256 forward = (lookAt - pos).Normalize();
VectorPacket256 down = new VectorPacket256(Vector256<float>.Zero, Vector256.Create(-1.0f), Vector256<float>.Zero);
Vector256<float> OnePointFive = Vector256.Create(1.5f);
VectorPacket256 right = OnePointFive * VectorPacket256.CrossProduct(forward, down).Normalize();
VectorPacket256 up = OnePointFive * VectorPacket256.CrossProduct(forward, right).Normalize();
return new Camera(pos, forward, up, right);
}
}