Draw a rotating cube: Difference between revisions
Content deleted Content added
MaiconSoft (talk | contribs) 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}}== |