; SetCanvasCamera Example ; ----------------------- ; Requires Extended mode. Const EVENT_WINDOW_CLOSE=$803 ; A window with two 3D canvases, editor style window=CreateWindow("SetCanvasCamera",100,100,640,480,0,15) left_canvas=CreateCanvas(8,8,306,396,window) right_canvas=CreateCanvas(322,8,306,396,window) label=CreateLabel("Left: perspective camera Right: top camera Space: swap Esc: exit",8,412,608,36,window) Graphics3DCanvas left_canvas Graphics3DCanvas right_canvas world=GetWorld() ; A perspective camera and an orthographic top-down camera perspective_camera=CreateCamera() PositionEntity perspective_camera,0,1,-5 top_camera=CreateCamera() CameraProjMode top_camera,2 PositionEntity top_camera,0,8,0 RotateEntity top_camera,90,0,0 light=CreateLight() RotateEntity light,45,45,0 cube=CreateCube() PositionEntity cube,0,1,0 EntityColor cube,80,165,240 ; SetCanvasCamera binds one camera to each canvas, so ; RenderWorldToCanvas renders only that camera's view there SetCanvasCamera left_canvas,perspective_camera SetCanvasCamera right_canvas,top_camera swapped=False running=True While running ; Pump GUI events so the window stays responsive event=WaitEvent(1) While event<>0 If event=EVENT_WINDOW_CLOSE And EventSource()=window Then running=False event=PeekEvent() Wend If KeyHit(1) Then running=False ; Space swaps the two bindings If KeyHit(57) swapped=Not swapped If swapped SetCanvasCamera left_canvas,top_camera SetCanvasCamera right_canvas,perspective_camera SetGadgetText label,"Left: top camera Right: perspective camera Space: swap Esc: exit" Else SetCanvasCamera left_canvas,perspective_camera SetCanvasCamera right_canvas,top_camera SetGadgetText label,"Left: perspective camera Right: top camera Space: swap Esc: exit" EndIf EndIf TurnEntity cube,0,1,0 ; Render both views, then present: vwait only on the final canvas RenderWorldToCanvas left_canvas,world RenderWorldToCanvas right_canvas,world FlipCanvas left_canvas,False FlipCanvas right_canvas,True Wend EndGraphics FreeGadget window End