demo05.pas 6.2 KB

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