La tela è forte! - pagina 64

 
Vladimir Pastushak:

Ciao a tutti, vorrei approfondire la mia conoscenza di Canvas

Non so nemmeno da dove cominciare. In questo momento sto immaginando che Canvas sia composto da complicate formule logaritmiche e cose del genere.

Potete darmi un esempio di come fare un bottone come sotto su tela. Ho bisogno di un po' di codice per capirlo.


Forum sul trading, sistemi di trading automatico e test di strategia

Fare un progetto in crowdsourcing su Canvas

Nikolai Semko, 2017.05.24 02:20


Ecco cosa è venuto fuori.


Il pulsante può essere visualizzato dietro lo sfondo e in primo piano, impostato per bloccare il clic o meno.

Nel file di esempio CanvasButton.mq5 è possibile trascinare il pulsante con il mouse. Per farlo, basta tenere premuto Ctrl per spostare il pulsante blu e Shift per spostare il pulsante rosso.

Poiché la classe GButton è una discendente della classe CCanvas, l'esempio dimostra la possibilità di usare funzioni della classe CCanvas sull'esempio CircleWu (questo è implementato in OnInit). Quindi, è possibile scrivere del testo sul pulsante usando le funzioni della classe CCanvas.

Questa classe, ovviamente, non pretende di essere pulita. La grafica non brilla di perfezione e il 3D è molto convenzionale; le ombre non sono implementate, la velocità di esecuzione non è ottimizzata. E molto probabilmente ci sono molti bordi grezzi e la mancanza di vari controlli. Quindi non giudicate severamente.

Se si spende un po' più di tempo, ovviamente si può fare:


Stavo solo cercando di... si potrebbe dire - impostare la direzione.


Il file Canvas.mqh differisce dall'originale solo perché l'array m_pixels è definito come pubblico.


 

Nikolay, naturalmente, è un rispetto per il suo entusiasmo acuto di sperimentare con Canvas. E ho studiato gli esempi di codice con non meno piacere.

Ahimè, naturalmente, Canvas nella sua attuale implementazione è puramente algoritmi legati alla CPU per riempire l'array di bitmap con primitive grafiche. Cioè tramite cicli con enumerazione degli elementi dell'array e questo è tutto... Nel frattempo, è stato 21 anni fa...

Gli esperimenti sono certamente buoni, ma l'implementazione ai fini pratici dovrebbe essere non solo bella ma anche efficace. Perché posso certamente ignorarlo seduto su qualche PC top-of-the-line a 8 core, ma di regola la massa principale degli utenti ha PC piuttosto di classe media. E qualsiasi GUI a schermo intero con visualizzazione di dati di mercato, anche se è molto comoda e bella, non sarà popolare, se caricherà la CPU fino al 75%. Questo è un fatto. Ecco perché - e non perché semplicemente non avevano altro da fare - l'accelerazione hardware è stata portata nelle implementazioni Canvas in tutti i principali browser.

Venendo al nucleo - in MQL5 ci dovrebbe essere qualche wrapper per Direct2D (e DirectWrite) - sarebbe una vera bomba, aprendo la strada all'efficiente implementazione accelerata dall'hardware di molti compiti pratici nel campo delle GUI e della visualizzazione dei dati. Certo, si può dire che c'è già DirectX. Ma solo la sua parte Direct3D è rappresentata, e cioè proiezioni 3D, shader e altri attributi del 3D ed è ancora una nicchia piuttosto stretta per l'uso pratico. Sì, naturalmente è possibile con alcune proiezioni di regolazione e altre manipolazioni e tassellazioni ottenere il rendering della grafica 2D e attraverso Direct3D - ma non significa né più né meno di creare la propria implementazione di Direct2D su Direct3D. Questo non avrebbe alcun senso, dato che Direct2D è stato implementato molto tempo fa.

Quindi ecco un pensiero...
 
Detto questo, tutto può essere disegnato rapidamente anche sulla CPU.

Gli esempi precedenti lo dimostrano. Inoltre, questo è un dominio di applicazione dove non ci sono requisiti rigorosi per la bellezza finale e la raffinatezza delle immagini.
 
Codexample:

Nikolay, naturalmente, è un rispetto per il suo entusiasmo acuto di sperimentare con Canvas. E ho studiato gli esempi di codice con non meno piacere.

Sfortunatamente, Canvas nella sua attuale implementazione non è altro che algoritmi legati alla CPU per riempire array di bitmap con primitive grafiche. Cioè attraverso i cicli con la ricerca degli elementi dell'array e questo è tutto... Nel frattempo, è stato 21 anni fa...

Gli esperimenti sono certamente buoni, ma l'implementazione ai fini pratici dovrebbe essere non solo bella ma anche efficace. Perché posso certamente ignorarlo seduto su qualche PC top-of-the-line a 8 core, ma di regola la massa principale degli utenti ha PC piuttosto di classe media. E qualsiasi GUI a schermo intero con visualizzazione di dati di mercato, anche se è molto comoda e bella, non sarà popolare, se caricherà la CPU fino al 75%. Questo è un fatto. Ecco perché - e non perché semplicemente non avevano altro da fare - l'accelerazione hardware è stata portata nelle implementazioni Canvas in tutti i principali browser.

In realtà venendo al punto - in MQL5 ci sarebbe qualche wrapper per Direct2D (e DirectWrite) - sarebbe una vera bomba, aprendo la strada all'efficiente implementazione accelerata dall'hardware di molti compiti pratici nel campo delle GUI e della visualizzazione dei dati. Certo, si può dire che c'è già DirectX. Ma solo la sua parte Direct3D è rappresentata, e cioè proiezioni 3D, shader e altri attributi del 3D ed è ancora una nicchia piuttosto stretta per l'uso pratico. Sì, naturalmente è possibile, con alcuni aggiustamenti di proiezioni e altre manipolazioni e tassellazioni per ottenere il rendering della grafica 2D e attraverso Direct3D - ma non significa né più né meno di creare la propria implementazione di Direct2D su Direct3D. Questo non avrebbe alcun senso, dato che Direct2D è stato implementato molto tempo fa.

Ecco un pensiero...

Grazie per le parole gentili.
In realtà MQ sono bravi in questo senso e si sono presi cura della grafica e degli strumenti di calcolo utilizzando la GPU e non solo la CPU.
Intendo OpenCL e DirectX.
Ecco alcuni esempi che confrontano le implementazioni dello stesso compito grafico (8 centri di gravità) in tre varianti - CPU, OpenCL(GPU) e DirectX(GPU):

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

2. OpenCL - 162 fotogrammi al secondo (richiede driver OpenCL installati sul tuo computer) (script Swirl2_OCL.mq5)

3. DirectX - 37 fotogrammi al secondo (script Swirl2_GPU.mq5)


così non è così malinconico.
Se hai bisogno di prestazioni massime, puoi usare anche la scheda grafica.
Dovrei notare che questi test sono stati fatti su un portatile piuttosto debole con una debole scheda graficaIntel® HD Graphics 620.
Mentre l'utilizzo della potenza della scheda grafica dà un incremento delle prestazioni molto decente, sono d'accordo con Renat che anche l'utilizzo della CPU per l'output grafico copre più del 99% di tutti i compiti grafici nell'area dei compiti di MQL5
.
Finché il mio frame viene generato in meno di 10 millisecondi, non sono particolarmente nervoso per la GPU (anche se la tentazione c'è a volte, meno male che c'è spazio di manovra).
E in 10 millisecondi potrei produrre, per esempio, una cosa del genere con ombre, antialiasing e trasparenza:


I codici SZY per la GPU sono stati scaricati daquesto thread, grazie mille@Rorschach e@Serhii Shevchuk per questo.

File:
Swirl2.mq5  5 kb
Swirl2_OCL.mq5  14 kb
 
Gente, qualcuno ha fatto qualche ridimensionamento di risorse grafiche usando l'interpolazione di Canvas?
 
Nikolay Kositsin:
Gente, qualcuno ha fatto qualche ridimensionamento di risorse grafiche usando l'interpolazione su Canvas?

Ho dato un esempio del codicequi. Ma il codice è tutt'altro che perfetto. Ora sarebbe molto diverso.

Forum sul trading, sistemi di trading automatico e test di strategia

La tela è forte!

Nikolai Semko, 2018.03.24 04:13

Demo dello script di scalatura raster

C'è un file BMP piuttosto grande nel file Ex5 come risorsa.



 
Nikolai Semko:

Ho dato un esempio del codicequi. Ma il codice è tutt'altro che perfetto. Ora mi sarei comportato in modo molto diverso.


Sono curioso di sapere come lo faresti ora. È nel mio interesse :)

 
Nikolai Semko:

Ho dato un esempio del codicequi. Ma il codice è tutt'altro che perfetto. Ora farei tutto in modo diverso.


È una bellezza indescrivibile :)

 

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

DirectX:Remnant 3D come standard

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

Mi chiedevo solo come lo faresti ora. Puramente nel mio interesse :)

Molto brevemente, Artem, prima percepivo un pixel come un quadrato con calcolo della sua partecipazione ponderata in un pixel di nuova scala attraverso l'area, ma ora lo percepirei come un cerchio con calcolo della sua partecipazione ponderata attraverso la distanza dal centro del pixel di nuova scala.