-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
103 lines (83 loc) · 3.1 KB
/
Program.cs
File metadata and controls
103 lines (83 loc) · 3.1 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// SDL knowledge came from: https://jsayers.dev/c-sharp-sdl-tutorial-part-1-setup/
// How to rotate 3D shapes, came from: https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations/programming-3d-shapes/a/rotating-3d-shapes
using SDL2;
using Shapes3D;
Scene3D scene = new Scene3D();
const int ViewWidth = 640;
const int ViewHeight = 480;
const int FOV = 300;
const int CubeSize = 100;
void CreateScene()
{
var cubeSize = CubeSize;
scene.Add(new Line3D(-cubeSize, -cubeSize, -cubeSize, cubeSize, -cubeSize, -cubeSize));
scene.Add(new Line3D(cubeSize, -cubeSize, -cubeSize, cubeSize, cubeSize, -cubeSize));
scene.Add(new Line3D(cubeSize, cubeSize, -cubeSize, -cubeSize, cubeSize, -cubeSize));
scene.Add(new Line3D(-cubeSize, cubeSize, -cubeSize, -cubeSize, -cubeSize, -cubeSize));
scene.Add(new Line3D(-cubeSize, -cubeSize, cubeSize, cubeSize, -cubeSize, cubeSize));
scene.Add(new Line3D(cubeSize, -cubeSize, cubeSize, cubeSize, cubeSize, cubeSize));
scene.Add(new Line3D(cubeSize, cubeSize, cubeSize, -cubeSize, cubeSize, cubeSize));
scene.Add(new Line3D(-cubeSize, cubeSize, cubeSize, -cubeSize, -cubeSize, cubeSize));
scene.Add(new Line3D(-cubeSize, -cubeSize, -cubeSize, -cubeSize, -cubeSize, cubeSize));
scene.Add(new Line3D(cubeSize, -cubeSize, -cubeSize, cubeSize, -cubeSize, cubeSize));
scene.Add(new Line3D(cubeSize, cubeSize, -cubeSize, cubeSize, cubeSize, cubeSize));
scene.Add(new Line3D(-cubeSize, cubeSize, -cubeSize, -cubeSize, cubeSize, cubeSize));
}
static double DegreesToRadians(int degrees)
{
return degrees * Math.PI / 180;
}
// ---------------------------------------------------------------
var sdlWrapper = new SDLWrapper();
if(sdlWrapper.SetupSDL("Cube 3D", ViewWidth, ViewHeight, FOV) != true)
return;
CreateScene();
var running = true;
var rotationX = 0;
var rotationY = 0;
var bounceX = 100;
var bounceY = 240;
var directionX = 5;
var directionY = 5;
while (running)
{
// Check to see if there are any events and continue to do so until the queue is empty.
while (SDL.SDL_PollEvent(out SDL.SDL_Event e) == 1)
{
switch (e.type)
{
case SDL.SDL_EventType.SDL_QUIT:
running = false;
break;
}
}
var screenScene = scene.RotateX(DegreesToRadians(rotationX))
.RotateY(DegreesToRadians(rotationY))
.TranslateScene(bounceX, bounceY, CubeSize*2);
sdlWrapper.RenderScene(screenScene);
rotationX += 1; if (rotationX >= 360) rotationX = 0;
rotationY += 1; if (rotationY >= 360) rotationY = 0;
bounceX += directionX;
if(bounceX < CubeSize)
{
directionX = -directionX;
bounceX = CubeSize;
}
if(bounceX > ViewWidth - CubeSize)
{
directionX = -directionX;
bounceX = ViewWidth - CubeSize;
}
bounceY += directionY;
if(bounceY < CubeSize)
{
directionY = -directionY;
bounceY = CubeSize;
}
if(bounceY > ViewHeight - CubeSize)
{
directionY = -directionY;
bounceY = ViewHeight - CubeSize;
}
}
sdlWrapper.CleanupSDL();