mirror of
https://github.com/Leonmmcoset/CMLeonOS.git
synced 2026-04-21 19:24:00 +00:00
87 lines
2.4 KiB
C#
87 lines
2.4 KiB
C#
|
|
using CMLeonOS;
|
||
|
|
using CMLeonOS.Gui.UILib;
|
||
|
|
using CMLeonOS.OSGraphicDraw;
|
||
|
|
using System.Drawing;
|
||
|
|
|
||
|
|
namespace CMLeonOS.Gui.Apps.Demos
|
||
|
|
{
|
||
|
|
internal class Cube3D : Process
|
||
|
|
{
|
||
|
|
internal Cube3D() : base("Cube3D", ProcessType.Application) { }
|
||
|
|
|
||
|
|
private readonly WindowManager wm = ProcessManager.GetProcess<WindowManager>();
|
||
|
|
private AppWindow window;
|
||
|
|
|
||
|
|
private double angleX = 0d;
|
||
|
|
private double angleY = 0d;
|
||
|
|
private double angleZ = 0d;
|
||
|
|
|
||
|
|
private static readonly Vec3[] BaseVertices = new Vec3[]
|
||
|
|
{
|
||
|
|
new Vec3(-1, -1, -1),
|
||
|
|
new Vec3( 1, -1, -1),
|
||
|
|
new Vec3( 1, 1, -1),
|
||
|
|
new Vec3(-1, 1, -1),
|
||
|
|
new Vec3(-1, -1, 1),
|
||
|
|
new Vec3( 1, -1, 1),
|
||
|
|
new Vec3( 1, 1, 1),
|
||
|
|
new Vec3(-1, 1, 1),
|
||
|
|
};
|
||
|
|
|
||
|
|
private static readonly int[] Edges = new int[]
|
||
|
|
{
|
||
|
|
0,1, 1,2, 2,3, 3,0,
|
||
|
|
4,5, 5,6, 6,7, 7,4,
|
||
|
|
0,4, 1,5, 2,6, 3,7
|
||
|
|
};
|
||
|
|
|
||
|
|
private void RenderCube()
|
||
|
|
{
|
||
|
|
window.Clear(Color.FromArgb(15, 17, 24));
|
||
|
|
|
||
|
|
Vec3[] transformed = new Vec3[BaseVertices.Length];
|
||
|
|
for (int i = 0; i < BaseVertices.Length; i++)
|
||
|
|
{
|
||
|
|
Vec3 v = BaseVertices[i];
|
||
|
|
v = Vec3.RotateX(v, angleX);
|
||
|
|
v = Vec3.RotateY(v, angleY);
|
||
|
|
v = Vec3.RotateZ(v, angleZ);
|
||
|
|
transformed[i] = v;
|
||
|
|
}
|
||
|
|
|
||
|
|
double fovScale = 240d;
|
||
|
|
double cameraDistance = 4.2d;
|
||
|
|
|
||
|
|
for (int i = 0; i < Edges.Length; i += 2)
|
||
|
|
{
|
||
|
|
int a = Edges[i];
|
||
|
|
int b = Edges[i + 1];
|
||
|
|
Renderer3D.DrawLine3D(window, transformed[a], transformed[b], Color.FromArgb(188, 224, 255), fovScale, cameraDistance);
|
||
|
|
}
|
||
|
|
|
||
|
|
window.DrawString("OSGD Cube Demo", Color.FromArgb(140, 170, 198), 10, 8);
|
||
|
|
wm.Update(window);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Start()
|
||
|
|
{
|
||
|
|
base.Start();
|
||
|
|
window = new AppWindow(this, 280, 140, 480, 360);
|
||
|
|
window.Title = "Cube3D";
|
||
|
|
window.CanResize = true;
|
||
|
|
window.Closing = TryStop;
|
||
|
|
wm.AddWindow(window);
|
||
|
|
|
||
|
|
RenderCube();
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Run()
|
||
|
|
{
|
||
|
|
angleX += 0.015d;
|
||
|
|
angleY += 0.019d;
|
||
|
|
angleZ += 0.011d;
|
||
|
|
RenderCube();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|