demo05.dpr 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. program demo05;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$R *.res}
  5. uses
  6. zgl_screen,
  7. zgl_window,
  8. zgl_timers,
  9. zgl_keyboard,
  10. zgl_fx,
  11. zgl_render_2d,
  12. zgl_primitives_2d,
  13. zgl_types,
  14. zgl_math_2d,
  15. {$IfNDef OLD_METHODS}
  16. gegl_color,
  17. {$EndIf}
  18. zgl_utils;
  19. var
  20. calc : Integer;
  21. points : array[ 0..359 ] of zglTPoint2D;
  22. TimeStart: LongWord = 0;
  23. {$IfNDef OLD_METHODS}
  24. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  25. newColor: array[0..1] of LongWord;
  26. {$EndIf}
  27. procedure Init;
  28. var
  29. i : Integer;
  30. begin
  31. for i := 0 to 359 do
  32. begin
  33. points[ i ].X := 400 + m_Cos( i ) * ( 96 + random( 32 ) );
  34. points[ i ].Y := 300 + m_Sin( i ) * ( 96 + random( 32 ) );
  35. end;
  36. {$IfNDef OLD_METHODS}
  37. // Rus: óñòàíàâëèâàåì íîâûé öâåò, êîòîðîãî íåò â ñïèñêå ñòàíäàðòíûõ. Âñå êîíñòàíòû â gegl_color.
  38. // Eng: set a new color. Which is not in the standard list. All constants in gegl_color.
  39. newColor[0] := Color_FindOrAdd($0000009B);
  40. newColor[1] := Color_FindOrAdd($FFFFFF4B);
  41. {$EndIf}
  42. end;
  43. procedure Draw;
  44. var
  45. i : Integer;
  46. begin
  47. // RU: Óñòàíàâëèâàåì öâåò è àëüôó äëÿ êàæäîé âåðøèíû ïðÿìîóãîëüíèêà ( â äàííîì ñëó÷àå)
  48. // EN: Set color and alpha for each vertex.
  49. fx2d_SetVCA( $FF0000, $00FF00, $0000FF, $FFFFFF, 255, 255, 255, 255 );
  50. // RU: Ðèñóåì ïðÿìîóãîëüíèê ñ çàëèâêîé(ôëàã PR2D_FILL) ñ èñïîëüçîâàíèåì îòäåëüíûõ öâåòîâ äëÿ êàæäîé âåðøèíû(ôëàã FX2D_VCA).
  51. // EN: Render filled rectangle(flag PR2D_FILL) and use different colors for each vertex(flag FX2D_VCA).
  52. pr2d_Rect(0, 0, 800, 600, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, FX2D_VCA or PR2D_FILL); // 4 + $010000
  53. // RU: Ðèñóåì â öåíòðå ýêðàíà êðóã ñ ðàäèóñîì 128 ïèêñåëà.
  54. // EN: Render circle in the center of screen with radius 128 pixels.
  55. pr2d_Circle( 400, 300, 128, {$IfDef OLD_METHODS}$000000, 155{$Else}newColor[0]{$EndIf}, 32, PR2D_FILL );
  56. // RU: Ðèñóåì ëèíèè âíóòðè êðóãà.
  57. // EN: Render lines inside the circle.
  58. for i := 0 to 359 do
  59. pr2d_Line( 400, 300, points[ i ].X, points[ i ].Y, {$IfDef OLD_METHODS}$FFFFFF, 255{$Else}cl_White{$EndIf} );
  60. // RU: Ðèñóåì ýëëèïñû ñ çàëèâêîé è áåç, ñî ñãëàæåííûìè êîíòóðàìè(ôëàã PR2D_SMOOTH).
  61. // EN: Render filled ellipses with smoothed edges(flag PR2D_SMOOTH).
  62. pr2d_Ellipse( 400 + 300, 300, 64, 256, {$IfDef OLD_METHODS}$FFFFFF, 75{$Else}newColor[1]{$EndIf}, 32, PR2D_FILL {or PR2D_SMOOTH });
  63. pr2d_Ellipse( 400 + 300, 300, 64, 256, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, 32, PR2D_SMOOTH );
  64. pr2d_Ellipse( 400 - 300, 300, 64, 256, {$IfDef OLD_METHODS}$FFFFFF, 75{$Else}newColor[1]{$EndIf}, 32, PR2D_FILL or PR2D_SMOOTH );
  65. pr2d_Ellipse( 400 - 300, 300, 64, 256, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, 32, PR2D_SMOOTH );
  66. end;
  67. procedure Timer;
  68. begin
  69. INC( calc );
  70. if calc > 359 Then
  71. calc := 0;
  72. points[ calc ].X := 400 + m_Cos( calc ) * ( 96 + random( 32 ) );
  73. points[ calc ].Y := 300 + m_Sin( calc ) * ( 96 + random( 32 ) );
  74. end;
  75. Begin
  76. TimeStart := timer_Add( @Timer, 16, t_Start );
  77. zgl_Reg( SYS_LOAD, @Init );
  78. zgl_Reg( SYS_DRAW, @Draw );
  79. wnd_SetCaption(utf8_Copy('05 - Primitives'));
  80. zgl_Init();
  81. End.