El lienzo es genial. - página 64

 
Vladimir Pastushak:

Hola a todos, me gustaría profundizar en mis conocimientos sobre Canvas

No sé ni por dónde empezar. Ahora mismo me estoy imaginando que Canvas son complicadas fórmulas logarítmicas y cosas así.

Me puedes dar un ejemplo de cómo hacer un botón como el de abajo en el lienzo. Necesito un código para entenderlo.


Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Realización de un proyecto crowdsourced en Canvas

Nikolai Semko, 2017.05.24 02:20


Esto es lo que salió.


El botón puede mostrarse detrás del fondo y en primer plano, configurado para bloquear el clic o no.

En el archivo de ejemplo CanvasButton.mq5 es posible arrastrar el botón con el ratón. Para ello, basta con mantener pulsada la tecla Ctrl para mover el botón azul y la tecla Shift para mover el botón rojo.

Debido a que la clase GButton es descendiente de la clase CCanvas, el ejemplo demuestra la capacidad de utilizar funciones de la clase CCanvas en el ejemplo CircleWu (Esto se implementa en OnInit). Así, es posible escribir texto en el botón utilizando funciones de la clase CCanvas.

Esta clase, por supuesto, no pretende ser limpia. Los gráficos no brillan con perfección y el 3D es muy convencional; las sombras no están implementadas, la velocidad de ejecución no está optimizada. Y lo más probable es que haya muchas asperezas y falta de controles diversos. Así que no juzgues con severidad.

Si se dedica un poco más de tiempo, por supuesto que se puede hacer:


Sólo intentaba... se podría decir - marcar la dirección.


El archivo Canvas.mqh difiere del original sólo en que la matriz m_pixels se define como pública.


 

Nikolay, por supuesto, es un respeto a su gran entusiasmo por experimentar con Canvas. Y he estudiado los ejemplos de código con no menos placer.

Por supuesto, Canvas en su implementación actual es puramente algoritmos de la CPU para llenar la matriz de mapa de bits con primitivas gráficas. Es decir, a través de bucles con enumeración de elementos del array y eso es todo... Mientras tanto, hace 21 años...

Los experimentos son ciertamente buenos, pero la aplicación a efectos prácticos debe ser no sólo bella sino también eficaz. Porque ciertamente puedo ignorarlo sentado en algún PC de 8 núcleos de alta gama, pero por regla general la masa principal de usuarios tiene PCs más bien de clase media. Y cualquier interfaz gráfica de usuario de pantalla completa con visualización de datos de mercado, incluso si es muy conveniente y hermosa, no será popular, si va a cargar la CPU hasta el 75%. Esto es un hecho. Por eso, y no porque no tuvieran otra cosa que hacer, la aceleración por hardware se incorporó a las implementaciones de Canvas en los principales navegadores.

Llegando al núcleo - en MQL5 debería haber alguna envoltura para Direct2D (y DirectWrite) - sería una verdadera bomba, abriendo el camino a la eficiente implementación acelerada por hardware de muchas tareas prácticas en el campo de la GUI y la visualización de datos. Por supuesto, se puede decir que ya existe DirectX. Pero sólo está representada su parte Direct3D, que son las proyecciones 3D, los shaders y otros atributos del 3D, y sigue siendo un nicho bastante estrecho para el uso práctico. Sí, por supuesto que puedes mediante algunas proyecciones de ajuste y otras manipulaciones y teselaciones lograr renderizar gráficos 2D y a través de Direct3D - pero no significa ni más ni menos que crear tu propia implementación de Direct2D sobre Direct3D. Esto no tendría ningún sentido ya que Direct2D se implementó hace mucho tiempo.

Así que aquí hay una idea...
 
Pero al mismo tiempo, todo se puede dibujar rápidamente en la CPU también.

Los ejemplos anteriores lo demuestran. Además, se trata de un ámbito de aplicación en el que no hay requisitos estrictos en cuanto a la belleza y sofisticación final de las imágenes.
 
Codexample:

Nikolay, por supuesto, es un respeto a su gran entusiasmo por experimentar con Canvas. Y he estudiado los ejemplos de código con no menos placer.

Desafortunadamente, Canvas en su implementación actual no es más que algoritmos limitados por la CPU para llenar la matriz de mapas de bits con primitivas gráficas. Es decir, a través de bucles con búsqueda de elementos de matriz y eso es todo... Mientras tanto, hace 21 años...

Los experimentos son ciertamente buenos, pero la aplicación a efectos prácticos debe ser no sólo bella sino también eficaz. Porque ciertamente puedo ignorarlo sentado en algún PC de 8 núcleos de gama alta, pero por regla general la masa principal de usuarios tiene PCs más bien de clase media. Y cualquier interfaz gráfica de usuario de pantalla completa con visualización de datos de mercado, incluso si es muy conveniente y hermosa, no será popular, si va a cargar la CPU hasta el 75%. Esto es un hecho. Por eso -y no porque simplemente no tuvieran otra cosa que hacer- la aceleración por hardware se ha incorporado a las implementaciones de Canvas en los principales navegadores.

En realidad, yendo al grano - en MQL5 habría alguna envoltura para Direct2D (y DirectWrite) - sería una verdadera bomba, abriendo el camino a la implementación eficiente acelerada por hardware de muchas tareas prácticas en el campo de la GUI y la visualización de datos. Por supuesto, se puede decir que ya existe DirectX. Pero sólo está representada su parte Direct3D, que son las proyecciones 3D, los shaders y otros atributos del 3D, y sigue siendo un nicho bastante estrecho para el uso práctico. Sí, por supuesto que puedes mediante algunas proyecciones de ajuste y otras manipulaciones y teselaciones lograr renderizar gráficos 2D y a través de Direct3D - pero no significa ni más ni menos que crear tu propia implementación de Direct2D sobre Direct3D. Esto no tendría ningún sentido ya que Direct2D se implementó hace mucho tiempo.

He aquí una idea...

Gracias por las amables palabras.
En realidad, MQ es buena en este sentido y se ha ocupado de los gráficos y las herramientas de cálculo utilizando las GPU y no sólo las CPU.
Me refiero a OpenCL y DirectX.
A continuación se muestran los ejemplos que comparan la implementación de la misma tarea gráfica (8 centros de gravedad) en tres variantes: CPU, OpenCL(GPU) y DirectX(GPU):

1.CPU -14 fps. (script Swirl2.mq5)

2. OpenCL - 162 fotogramas por segundo (requiere la instalación de controladores OpenCL en el ordenador) (script Swirl2_OCL.mq5)

3. DirectX - 37 imágenes por segundo (script Swirl2_GPU.mq5)


para que no sea tan melancólico.
Si necesitas el máximo rendimiento, puedes utilizar también una tarjeta gráfica.
Debo tener en cuenta que estas pruebas se realizaron en un portátil bastante débil con una tarjeta gráficaIntel® HD Graphics 620 débil.
Aunque el uso de una tarjeta gráfica proporciona un aumento de rendimiento muy decente, estoy de acuerdo con Renat en que incluso el uso de una CPU para la salida de gráficos cubre más del 99% de todas las tareas gráficas en el área de tareas de MQL5
.
Mientras mi fotograma se genere en menos de 10 milisegundos, no estoy especialmente nervioso con la GPU (aunque la tentación está ahí a veces, menos mal que hay margen de maniobra).
Y en 10 milisegundos podría sacar, por ejemplo, una cosa así con sombras, antialiasing y transparencia:


Los códigos SZY para la GPU fueron descargados deeste hilo, muchas gracias@Rorschach y@Serhii Shevchuk por ello.

Archivos adjuntos:
Swirl2.mq5  5 kb
Swirl2_OCL.mq5  14 kb
 
Amigos, ¿alguien ha hecho algún cambio de tamaño de los recursos gráficos utilizando la interpolación de Canvas?
 
Nikolay Kositsin:
Amigos, ¿alguien ha hecho algún cambio de tamaño de los recursos gráficos utilizando la interpolación en Canvas?

He dado un ejemplo del códigoaquí. Pero el código está lejos de ser perfecto. Ahora sería muy diferente.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

El lienzo es genial.

Nikolai Semko, 2018.03.24 04:13

Demostración del script de escalado de trama

Hay un archivo BMP bastante grande en el archivo Ex5 como recurso.



 
Nikolai Semko:

He dado un ejemplo del códigoaquí. Pero el código está lejos de ser perfecto. Ahora lo habría hecho de forma muy diferente.


Tengo curiosidad por saber cómo lo harías ahora. Es lo que más me conviene :)

 
Nikolai Semko:

He dado un ejemplo del códigoaquí. Pero el código está lejos de ser perfecto. Ahora lo haría todo de forma diferente.


Es una belleza indescriptible :)

 

OpenCL:https://www.mql5.com/ru/forum/162864

DirectX:Remnant 3D de serie

Вот что можно сделать с OpenCL прямо в терминале MetaTrader 5 без всяких DLL
Вот что можно сделать с OpenCL прямо в терминале MetaTrader 5 без всяких DLL
  • 2016.12.10
  • www.mql5.com
Это демонстрация не только расчетов на GPU в MQL5 коде, но и графических возможностей терминала: Полный исходный код в виде скрипта приложен...
 
Artyom Trishkin:

Sólo me pregunto cómo lo harías ahora. Por mi propio interés :)

Muy brevemente, Artem, antes percibía un píxel como un cuadrado con cálculo de su participación ponderada en un píxel de nueva escala a través del área, pero ahora lo percibiría como un círculo con cálculo de su participación ponderada a través de la distancia al centro del píxel de nueva escala.