La toile est cool ! - page 64

 
Vladimir Pastushak:

Bonjour à tous, j'aimerais approfondir ma connaissance de Canvas

Je ne sais même pas par où commencer. En ce moment, j'imagine que Canvas, c'est des formules logarithmiques compliquées et des trucs comme ça.

Pouvez-vous me donner un exemple de comment faire un bouton comme ci-dessous sur le canevas. J'ai besoin d'un code pour le comprendre.


Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Réaliser un projet de crowdsourcing sur Canvas

Nikolai Semko, 2017.05.24 02:20


Voici ce qui en est ressorti.


Le bouton peut être affiché derrière l'arrière-plan et au premier plan, avec ou sans verrouillage du clic.

Dans le fichier d'exemple CanvasButton.mq5, il est possible de faire glisser le bouton avec la souris. Pour ce faire, il suffit de maintenir la touche Ctrl enfoncée pour déplacer le bouton bleu, et la touche Shift pour déplacer le bouton rouge.

Comme la classe GButton est un descendant de la classe CCanvas, l'exemple démontre la possibilité d'utiliser les fonctions de la classe CCanvas sur l'exemple CircleWu (Ceci est implémenté dans OnInit). Il est donc possible d'écrire du texte sur le bouton en utilisant les fonctions de la classe CCanvas.

Cette classe, bien sûr, ne prétend pas être propre. Les graphismes ne brillent pas par leur perfection et la 3D est très conventionnelle ; les ombres ne sont pas implémentées, la vitesse d'exécution n'est pas optimisée. Et il est fort probable qu'il y ait beaucoup d'aspérités et l'absence de divers contrôles. Ne jugez donc pas sévèrement.

Si vous passez un peu plus de temps, c'est bien sûr possible :


J'essayais juste de... on pourrait dire - définir la direction.


Le fichier Canvas.mqh ne diffère de l'original que par le fait que le tableau m_pixels est défini comme public.


 

Nikolay, bien sûr, est un respect pour son enthousiasme à expérimenter la toile. Et j'ai étudié les exemples de code avec non moins de plaisir.

Hélas, bien sûr, Canvas, dans sa mise en œuvre actuelle, se contente d'algorithmes purement liés au CPU pour remplir le tableau de bitmaps avec des primitives graphiques. C'est-à-dire via des boucles avec une énumération des éléments du tableau. et c'est à peu près tout... En attendant, c'était il y a 21 ans...

Les expériences sont certainement bonnes, mais la mise en œuvre à des fins pratiques doit être non seulement belle mais aussi efficace. En effet, je peux certainement ignorer qu'il se trouve sur un PC 8 cœurs haut de gamme, mais en règle générale, la majorité des utilisateurs ont des PC de classe moyenne. Et toute interface graphique plein écran avec visualisation des données du marché, même si elle est très pratique et belle, ne sera pas populaire, si elle charge le processeur jusqu'à 75%. C'est un fait. C'est pourquoi - et non parce qu'ils n'avaient simplement rien d'autre à faire - l'accélération matérielle a été introduite dans les implémentations Canvas de tous les principaux navigateurs.

Pour en venir à l'essentiel - MQL5 devrait comporter un wrapper pour Direct2D (et DirectWrite) - ce serait une véritable bombe, ouvrant la voie à la mise en œuvre efficace, accélérée par le matériel, de nombreuses tâches pratiques dans le domaine des interfaces graphiques et de la visualisation des données. Bien sûr, on peut dire qu'il y a déjà DirectX. Mais seule sa partie Direct3D est représentée, et il s'agit de projections 3D, de shaders et d'autres attributs de la 3D, et c'est encore une niche plutôt étroite pour une utilisation pratique. Oui, bien sûr, vous pouvez, en ajustant des projections et d'autres manipulations et tessellations, obtenir un rendu de graphiques 2D par le biais de Direct3D, mais cela ne signifie ni plus ni moins que de créer votre propre mise en œuvre de Direct2D sur Direct3D. Cela n'aurait aucun sens puisque Direct2D a été implémenté il y a longtemps.

Alors voici une idée...
 
Cela dit, tout peut être dessiné rapidement sur l'unité centrale également.

Les exemples ci-dessus le prouvent. De plus, il s'agit d'un domaine d'application où il n'y a pas d'exigences strictes concernant la beauté finale et la sophistication des images.
 
Codexample:

Nikolay, bien sûr, est un respect pour son enthousiasme à expérimenter la toile. Et j'ai étudié les exemples de code avec non moins de plaisir.

Malheureusement, Canvas, dans sa mise en œuvre actuelle, n'est rien d'autre que des algorithmes liés au CPU pour remplir des tableaux de bitmaps avec des primitives graphiques. C'est-à-dire via des boucles avec recherche d'éléments de tableau et c'est à peu près tout... En attendant, c'était il y a 21 ans...

Les expériences sont certainement bonnes, mais la mise en œuvre à des fins pratiques doit être non seulement belle mais aussi efficace. En effet, je peux certainement ignorer qu'il se trouve sur un PC 8 cœurs haut de gamme, mais en règle générale, la majorité des utilisateurs ont des PC de classe moyenne. Et toute interface graphique plein écran avec visualisation des données du marché, même si elle est très pratique et belle, ne sera pas populaire, si elle charge le processeur jusqu'à 75%. C'est un fait. C'est pourquoi - et non parce qu'ils n'avaient simplement rien d'autre à faire - l'accélération matérielle a été introduite dans les implémentations Canvas de tous les principaux navigateurs.

Pour en venir au fait, si MQL5 était un wrapper pour Direct2D (et DirectWrite), ce serait une véritable bombe, ouvrant la voie à la mise en œuvre efficace, accélérée par le matériel, de nombreuses tâches pratiques dans le domaine des interfaces graphiques et de la visualisation des données. Bien sûr, on peut dire qu'il y a déjà DirectX. Mais seule sa partie Direct3D est représentée, et il s'agit de projections 3D, de shaders et d'autres attributs de la 3D, et c'est encore une niche plutôt étroite pour une utilisation pratique. Oui, bien sûr, vous pouvez, en ajustant les projections et d'autres manipulations et tessellations pour obtenir un rendu graphique 2D et par Direct3D - mais cela ne signifie ni plus ni moins de créer votre propre mise en œuvre de Direct2D sur Direct3D. Cela n'aurait aucun sens puisque Direct2D a été implémenté il y a longtemps.

J'ai une idée...

Merci pour ces mots gentils.
En fait, MQ est bon à cet égard et a pris soin des outils graphiques et de calcul en utilisant les GPU et pas seulement les CPU.
Je veux dire OpenCL et DirectX.
Voici des exemples comparant la mise en œuvre de la même tâche graphique (8 centres de gravité) dans trois variantes - CPU, OpenCL(GPU) et DirectX(GPU) :

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

2. OpenCL - 162 images par seconde (les pilotes OpenCL doivent être installés sur votre ordinateur) (script Swirl2_OCL.mq5)

3. DirectX - 37 images par seconde (script Swirl2_GPU.mq5)


pour que ce ne soit pas si mélancolique.
Si vous avez besoin de performances maximales, vous pouvez aussi utiliser une carte graphique.
Je dois noter que ces tests ont été effectués sur un ordinateur portable plutôt faible avec une carte graphiqueIntel® HD Graphics 620 faible.
Bien que l'utilisation de la puissance de la carte graphique donne une augmentation très décente des performances, je suis d'accord avec Renat que même l'utilisation du CPU pour la sortie graphique couvre plus de 99% de toutes les tâches graphiques dans la zone de tâches de MQL5
.
Tant que mon image est générée en moins de 10 millisecondes, je ne suis pas particulièrement nerveux à l'égard du GPU (bien que la tentation soit parfois là, heureusement qu'il y a une marge de manœuvre).
Et en 10 millisecondes, je pourrais produire, par exemple, une telle chose avec des ombres, un anticrénelage et une transparence :


Les codes SZY pour le GPU ont été téléchargés à partir dece fil de discussion, merci beaucoup à@Rorschach et@Serhii Shevchuk pour cela.

Dossiers :
Swirl2.mq5  5 kb
Swirl2_OCL.mq5  14 kb
 
Quelqu'un a-t-il déjà redimensionné des ressources graphiques en utilisant l'interpolation Canvas ?
 
Nikolay Kositsin:
Les amis, quelqu'un a-t-il déjà redimensionné des ressources graphiques en utilisant l'interpolation sur Canvas ?

J'ai donné un exemple du codeici. Mais le code est loin d'être parfait. Ce serait tout à fait différent maintenant.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

La toile est cool !

Nikolai Semko, 2018.03.24 04:13

Démonstration du script de mise à l'échelle de la trame

Un fichier BMP assez volumineux se trouve dans le fichier Ex5 en tant que ressource.



 
Nikolai Semko:

J'ai donné un exemple du codeici. Mais le code est loin d'être parfait. J'aurais agi différemment aujourd'hui.


Je suis curieux de savoir comment vous le feriez maintenant. C'est dans mon intérêt :)

 
Nikolai Semko:

J'ai donné un exemple du codeici. Mais le code est loin d'être parfait. Je le ferais complètement différent maintenant.


C'est d'une beauté indescriptible :)

 

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

DirectX :Remnant 3D en standard

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

Je me demande juste comment vous feriez maintenant. Dans mon seul intérêt :)

Très brièvement, Artem, auparavant je percevais un pixel comme un carré avec le calcul de sa participation pondérée dans un pixel de nouvelle échelle par la surface, mais maintenant je le percevrais comme un cercle avec le calcul de sa participation pondérée par la distance au centre du pixel de nouvelle échelle.
Raison: