Draw a rotating cube: Difference between revisions

Content added Content deleted
(Added Delphi example)
Line 1,808: Line 1,808:
endSimulation = drawCube()
endSimulation = drawCube()
window.destroy()</lang>
window.destroy()</lang>

=={{header|Objeck}}==
<lang objeck>
use Collection.Generic;
use Game.SDL2;
use Game.Framework;

class RotatingCube {
# game framework
@framework : GameFramework;
@initialized : Bool;

@nodes : Float[,];
@edges : Int[,];

New() {
@initialized := true;
@framework := GameFramework->New(GameConsts->SCREEN_WIDTH, GameConsts->SCREEN_HEIGHT, "Rotating Cube");

@nodes := [[-100.0, -100.0, -100.0], [-100.0, -100.0, 100.0], [-100.0, 100.0, -100.0],
[-100.0, 100.0, 100.0], [100.0, -100.0, -100.0], [100.0, -100.0, 100.0],
[100.0, 100.0, -100.0], [100.0, 100.0, 100.0]];

@edges := [[0, 1], [1, 3], [3, 2], [2, 0], [4, 5], [5, 7],
[7, 6], [6, 4], [0, 4], [1, 5], [2, 6], [3, 7]];

}

function : Main(args : String[]) ~ Nil {
RotatingCube->New()->Play();
}

method : Play() ~ Nil {
if(@initialized) {
# initialization
@framework->SetClearColor(Color->New(0, 0, 0));
RotateCube(Float->Pi(), 2.0->SquareRoot()->ArcTan());

quit := false;
e := @framework->GetEvent();
while(<>quit) {
@framework->FrameStart();
@framework->Clear();
# process input
while(e->Poll() <> 0) {
# joystick
if(e->GetType() = EventType->SDL_QUIT) {
quit := true;
};
};

#draw
DrawCube();

@framework->FrameEnd();

# render
@framework->Show();

Timer->Delay(200);

RotateCube (Float->Pi() / 180.0, 0.0);
};
}
else {
"--- Error Initializing Environment ---"->ErrorLine();
return;
};

leaving {
@framework->FreeShapes();
};
}

method : RotateCube(angleX : Float, angleY : Float) ~ Nil {
sinX := angleX->Sin();
cosX := angleX->Cos();
sinY := angleY->Sin();
cosY := angleY->Cos();
node_sizes := @nodes->Size();
size := node_sizes[0];

for(i := 0; i < size; i += 1;) {
x := @nodes[i, 0];
y := @nodes[i, 1];
z := @nodes[i, 2];
@nodes[i, 0] := x * cosX - z * sinX;
@nodes[i, 2] := z * cosX + x * sinX;
z := @nodes[i, 2];
@nodes[i, 1] := y * cosY - z * sinY;
@nodes[i, 2] := z * cosY + y * sinY;
};
}

method : DrawCube() ~ Nil {
edge_sizes := @edges->Size();
size := edge_sizes[0];

@framework->GetRenderer()->SetDrawColor(0, 220, 0, 0);
for(i := 0; i < size; i += 1;) {
x0y0 := @nodes[@edges[i, 0], 0];
x0y1 := @nodes[@edges[i, 0], 1];

x1y0 := @nodes[@edges[i, 1], 0];
x1y1 := @nodes[@edges[i, 1], 1];

@framework->GetRenderer()->DrawLine(x0y0 + GameConsts->DRAW_OFFSET, x0y1 + GameConsts->DRAW_OFFSET, x1y0 + GameConsts->DRAW_OFFSET, x1y1 + GameConsts->DRAW_OFFSET);
};
}
}

consts GameConsts {
SCREEN_WIDTH := 600,
SCREEN_HEIGHT := 600,
DRAW_OFFSET := 300
}</lang>


=={{header|Perl}}==
=={{header|Perl}}==