mirror of
https://github.com/Leonmmcoset/CMLeonOS.git
synced 2026-04-21 19:24:00 +00:00
86 lines
2.4 KiB
C#
86 lines
2.4 KiB
C#
using CMLeonOS;
|
|
using CMLeonOS.Gui.UILib;
|
|
using CMLeonOS.OSGraphicDraw;
|
|
using System.Drawing;
|
|
|
|
namespace CMLeonOS.Gui.Apps.Demos
|
|
{
|
|
internal class Pyramid3D : Process
|
|
{
|
|
internal Pyramid3D() : base("Pyramid3D", ProcessType.Application) { }
|
|
|
|
private readonly WindowManager wm = ProcessManager.GetProcess<WindowManager>();
|
|
private AppWindow window;
|
|
|
|
private double angleX = 0d;
|
|
private double angleY = 0d;
|
|
private double angleZ = 0d;
|
|
|
|
// Base square + apex
|
|
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( 0, 1, 0), // apex
|
|
};
|
|
|
|
// edges in pairs
|
|
private static readonly int[] Edges = new int[]
|
|
{
|
|
0,1, 1,2, 2,3, 3,0,
|
|
0,4, 1,4, 2,4, 3,4
|
|
};
|
|
|
|
private void RenderPyramid()
|
|
{
|
|
window.Clear(Color.FromArgb(14, 18, 22));
|
|
|
|
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 = 230d;
|
|
double cameraDistance = 4.0d;
|
|
Color wireColor = Color.FromArgb(255, 208, 136);
|
|
|
|
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], wireColor, fovScale, cameraDistance);
|
|
}
|
|
|
|
window.DrawString("OSGD Pyramid Demo", Color.FromArgb(176, 184, 196), 10, 8);
|
|
wm.Update(window);
|
|
}
|
|
|
|
public override void Start()
|
|
{
|
|
base.Start();
|
|
window = new AppWindow(this, 300, 160, 460, 340);
|
|
window.Title = "Pyramid3D";
|
|
window.CanResize = true;
|
|
window.Closing = TryStop;
|
|
wm.AddWindow(window);
|
|
|
|
RenderPyramid();
|
|
}
|
|
|
|
public override void Run()
|
|
{
|
|
angleX += 0.014d;
|
|
angleY += 0.017d;
|
|
angleZ += 0.010d;
|
|
RenderPyramid();
|
|
}
|
|
}
|
|
}
|