demo05.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. program demo05;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. uses
  5. {$IFDEF UNIX}
  6. cthreads,
  7. {$ENDIF}
  8. {$IfDef USE_ZENGL_STATIC}
  9. zgl_screen,
  10. zgl_window,
  11. zgl_timers,
  12. zgl_keyboard,
  13. zgl_fx,
  14. zgl_render_2d,
  15. zgl_primitives_2d,
  16. zgl_types,
  17. zgl_math_2d,
  18. {$IfNDef OLD_METHODS}
  19. gegl_color,
  20. {$EndIf}
  21. zgl_utils
  22. {$Else}
  23. zglHeader
  24. {$EndIf}
  25. ;
  26. var
  27. calc : Integer;
  28. points : array[ 0..359 ] of zglTPoint2D;
  29. TimeStart : LongWord = 0;
  30. {$IfNDef OLD_METHODS}
  31. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  32. newColor: array[0..1] of LongWord;
  33. {$EndIf}
  34. procedure Init;
  35. var
  36. i : Integer;
  37. begin
  38. for i := 0 to 359 do
  39. begin
  40. points[ i ].X := 400 + m_Cos( i ) * ( 96 + random( 32 ) );
  41. points[ i ].Y := 300 + m_Sin( i ) * ( 96 + random( 32 ) );
  42. end;
  43. {$IfNDef OLD_METHODS}
  44. // Rus: устанавливаем новый цвет. Которого нет в списке стандартных. Все константы в gegl_color.
  45. // Eng: set a new color. Which is not in the standard list. All constants in gegl_color.
  46. newColor[0] := Color_FindOrAdd($0000009B);
  47. newColor[1] := Color_FindOrAdd($FFFFFF4B);
  48. {$EndIf}
  49. end;
  50. procedure Draw;
  51. var
  52. i : Integer;
  53. begin
  54. // RU: Устанавливаем цвет и альфу для каждой вершины.
  55. // EN: Set color and alpha for each vertex.
  56. fx2d_SetVCA( $FF0000, $00FF00, $0000FF, $FFFFFF, 255, 255, 255, 255 );
  57. // RU: Рисуем прямоугольник с заливкой(флаг PR2D_FILL) с использованием отдельных цветов для каждой вершины(флаг FX2D_VCA).
  58. // EN: Render filled rectangle(flag PR2D_FILL) and use different colors for each vertex(flag FX2D_VCA).
  59. pr2d_Rect( 0, 0, 800, 600, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, FX2D_VCA or PR2D_FILL );
  60. // RU: Рисуем в центре экрана круг с радиусом 128 пиксела.
  61. // EN: Render circle in the center of screen with radius 128 pixels.
  62. pr2d_Circle( 400, 300, 128, {$IfDef OLD_METHODS}$000000, 155{$Else}newColor[0]{$EndIf}, 32, PR2D_FILL );
  63. // RU: Рисуем линии внутри круга.
  64. // EN: Render lines inside the circle.
  65. for i := 0 to 359 do
  66. pr2d_Line( 400, 300, points[ i ].X, points[ i ].Y, {$IfDef OLD_METHODS}$FFFFFF, 255{$Else}cl_White{$EndIf} );
  67. // RU: Рисуем эллипсы с заливкой и без, со сглаженными контурами(флаг PR2D_SMOOTH).
  68. // EN: Render filled ellipses with smoothed edges(flag PR2D_SMOOTH).
  69. pr2d_Ellipse( 400 + 300, 300, 64, 256, {$IfDef OLD_METHODS}$FFFFFF, 75{$Else}newColor[1]{$EndIf}, 64, PR2D_FILL or PR2D_SMOOTH );
  70. pr2d_Ellipse( 400 + 300, 300, 64, 256, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, 32, PR2D_SMOOTH );
  71. pr2d_Ellipse( 400 - 300, 300, 64, 256, {$IfDef OLD_METHODS}$FFFFFF, 75{$Else}newColor[1]{$EndIf}, 64, PR2D_FILL{ or PR2D_SMOOTH });
  72. pr2d_Ellipse( 400 - 300, 300, 64, 256, {$IfDef OLD_METHODS}$000000, 255{$Else}cl_Black{$EndIf}, 32, PR2D_SMOOTH );
  73. end;
  74. procedure Timer;
  75. begin
  76. INC( calc );
  77. if calc > 359 Then
  78. calc := 0;
  79. points[ calc ].X := 400 + m_Cos( calc ) * ( 96 + random( 32 ) );
  80. points[ calc ].Y := 300 + m_Sin( calc ) * ( 96 + random( 32 ) );
  81. end;
  82. Begin
  83. {$IFNDEF USE_ZENGL_STATIC}
  84. if not zglLoad( libZenGL ) Then exit;
  85. {$ENDIF}
  86. TimeStart := timer_Add( @Timer, 16, t_Start );
  87. zgl_Reg( SYS_LOAD, @Init );
  88. zgl_Reg( SYS_DRAW, @Draw );
  89. wnd_SetCaption(utf8_Copy('05 - Primitives'));
  90. zgl_Init();
  91. End.