Draw a rotating cube: Difference between revisions

(Added Delphi example)
Line 1,808:
endSimulation = drawCube()
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}}==
760

edits