demo05.pas 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. library demo05;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_application,
  5. zgl_screen,
  6. zgl_window,
  7. zgl_timers,
  8. zgl_fx,
  9. zgl_render_2d,
  10. zgl_primitives_2d,
  11. zgl_primitives_2dEX,
  12. zgl_types,
  13. zgl_math_2d,
  14. gegl_color,
  15. zgl_utils;
  16. var
  17. calc : Integer;
  18. points : array[ 0..359 ] of zglTPoint2D;
  19. //dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF}; // определится с дирректориями для Android
  20. newColor: array[0..1] of LongWord;
  21. // RU: это для создания ломанных линий. Можно создать динамический массив и делать
  22. // линии с произвольным количеством точек.
  23. // EN: this is for creating broken lines. You can create a dynamic array and draw
  24. // lines with an arbitrary number of points.
  25. myPointArray: array[0..3] of zglTPoint2DColor;
  26. deltaX, deltaY: array [0..3] of Integer;
  27. procedure Init;
  28. var
  29. i : Integer;
  30. begin
  31. zgl_Enable( CORRECT_RESOLUTION );
  32. scr_CorrectResolution( 800, 600 );
  33. for i := 0 to 359 do
  34. begin
  35. points[ i ].X := 400 + m_Cos( i ) * ( 96 + random( 32 ) );
  36. points[ i ].Y := 300 + m_Sin( i ) * ( 96 + random( 32 ) );
  37. end;
  38. // Rus: устанавливаем новый цвет. Которого нет в списке стандартных. Все константы в gegl_color.
  39. // Eng: set a new color. Which is not in the standard list. All constants in gegl_color.
  40. newColor[0] := Color_FindOrAdd($0000009B);
  41. newColor[1] := Color_FindOrAdd($FFFFFF4B);
  42. myPointArray[0].X := 20;
  43. myPointArray[0].Y := 20;
  44. myPointArray[0].Color := cl_Red;
  45. myPointArray[1].X := wndWidth - 20;
  46. myPointArray[1].Y := 20;
  47. myPointArray[1].Color := cl_Blue;
  48. myPointArray[3].X := wndWidth - 80;
  49. myPointArray[3].Y := wndHeight - 20;
  50. myPointArray[3].Color := cl_Green;
  51. myPointArray[2].X := 80;
  52. myPointArray[2].Y := wndHeight - 20;
  53. myPointArray[2].Color := cl_Yellow;
  54. deltaX[0] := 1; deltaY[0] := 1;
  55. deltaX[1] := - 1; deltaY[1] := 1;
  56. deltaX[2] := - 1; deltaY[2] := - 1;
  57. deltaX[3] := 1; deltaY[3] := - 1;
  58. end;
  59. procedure Draw;
  60. var
  61. i : Integer;
  62. begin
  63. batch2d_Begin;
  64. // RU: Устанавливаем цвет и альфу для каждой вершины.
  65. // EN: Set color and alpha for each vertex.
  66. fx2d_SetVCA( $FF0000, $00FF00, $0000FF, $FFFFFF, 255, 255, 255, 255 );
  67. // RU: Рисуем прямоугольник с заливкой(флаг PR2D_FILL) с использованием отдельных цветов для каждой вершины(флаг FX2D_VCA).
  68. // EN: Render filled rectangle(flag PR2D_FILL) and use different colors for each vertex(flag FX2D_VCA).
  69. pr2d_Rect( 0, 0, 800, 600, cl_Black, FX2D_VCA or PR2D_FILL );
  70. // RU: рисуем широкую ломанную линию. Каждая точка имеет свой цвет, ширина линии 10 пикселей.
  71. // EN: draw a wide broken line. Each point has its own color, the line width is 10 pixels.
  72. pr2d_LineStripEX(@myPointArray, 4, 0, 10, LINE_RGBA);
  73. // RU: пока мы можем производить вычисления для Android здесь, но это временно. Для Android будут свои таймера.
  74. // EN: for now we can do android calculations here, but it's temporary. Android will have its own timers.
  75. for i := 0 to 3 do
  76. begin
  77. if (myPointArray[i].X > wndWidth - 20) or (myPointArray[i].X < 20) then
  78. deltaX[i] := - deltaX[i];
  79. if (myPointArray[i].Y > wndHeight - 20) or (myPointArray[i].Y < 20) then
  80. deltaY[i] := - deltaY[i];
  81. myPointArray[i].X := myPointArray[i].X + deltaX[i];
  82. myPointArray[i].Y := myPointArray[i].Y + deltaY[i];
  83. end;
  84. // RU: Рисуем в центре экрана круг с радиусом 128 пиксела.
  85. // EN: Render circle in the center of screen with radius 128 pixels.
  86. pr2d_Circle( 400, 300, 128, newColor[0], 32, PR2D_FILL );
  87. INC( calc );
  88. if calc > 359 Then calc := 0;
  89. points[ calc ].X := 400 + m_Cos( calc ) * ( 96 + random( 32 ) );
  90. points[ calc ].Y := 300 + m_Sin( calc ) * ( 96 + random( 32 ) );
  91. // RU: Рисуем линии внутри круга.
  92. // EN: Render lines inside the circle.
  93. for i := 0 to 359 do
  94. pr2d_Line( 400, 300, points[ i ].X, points[ i ].Y, cl_White );
  95. // RU: Рисуем эллипсы с заливкой и без, со сглаженными контурами(флаг PR2D_SMOOTH).
  96. // EN: Render filled ellipses with smoothed edges(flag PR2D_SMOOTH).
  97. pr2d_Ellipse( 400 + 300, 300, 64, 256, newColor[1], 64, PR2D_FILL or PR2D_SMOOTH );
  98. pr2d_Ellipse( 400 + 300, 300, 64, 256, cl_Black, 32, PR2D_SMOOTH );
  99. pr2d_Ellipse( 400 - 300, 300, 64, 256, newColor[1], 64, PR2D_FILL{ or PR2D_SMOOTH });
  100. pr2d_Ellipse( 400 - 300, 300, 64, 256, cl_Black, 32, PR2D_SMOOTH );
  101. batch2d_End;
  102. end;
  103. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  104. begin
  105. zgl_Reg( SYS_LOAD, @Init );
  106. zgl_Reg( SYS_DRAW, @Draw );
  107. scr_SetOptions();
  108. end;
  109. exports
  110. Java_zengl_android_ZenGL_Main,
  111. {$I android_export.inc}
  112. End.