Tuval harika! - sayfa 64

 
Vladimir Pastushak :

Herkese merhaba, Canvas bilgimi derinleştirmek istiyorum

ama nereden başlayacağımı bile bilmiyorum. Şimdi tuvalin karmaşık logaritmik formüller ve bunun gibi şeyler olduğunu hayal ediyorum.

Kanvas üzerine nasıl buton yapılacağına aşağıdaki gibi bir örnek veriniz. Anlamak için koda ihtiyacınız var.


Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Canvas üzerinde bir kitle kaynaklı proje yapma

Nikolai Semko , 2017.05.24 02:20


İşte olanlar.


Düğmeye basarak veya sabitlemeden sabitlemeyi ayarlamak için düğme arka plana ve ön plana getirilebilir.

CanvasButton.mq5 örnek dosyası, düğmeyi fare ile sürükleme özelliğini uygular. Bunu yapmak için, mavi düğmeyi hareket ettirmek için Ctrl ve kırmızı düğmeyi hareket ettirmek için Shift tuşuna basmanız yeterlidir.

Çünkü GButton sınıfı, CCanvas sınıfının bir alt öğesidir, örnek, CircleWu çemberini kullanarak CCanvas sınıfının işlevlerini kullanma olasılığını gösterir (Bu, OnInit'te uygulanır). Bu, CCanvas sınıfının işlevlerini kullanarak buton üzerine metin yazabileceğiniz anlamına gelir.

Bu sınıf, elbette, nihai olduğunu iddia etmiyor. Grafikler mükemmel bir şekilde parlamaz ve 3D çok koşulludur, gölgeler uygulanmaz, yürütme hızı optimize edilmez. Ve büyük olasılıkla çok sayıda pürüzlü kenar ve çeşitli kontrollerin olmaması. Bu yüzden kesinlikle yargılamayın.

Biraz daha fazla zaman harcarsanız, elbette bu yapılabilir:


Ben sadece denedim... biri denebilir - yönü belirlemek için.


Canvas.mqh dosyasının orijinal dosyadan farkı yalnızca m_pixels dizisinin genel olarak tanımlanmasıdır.


 

Tabii ki, Tuval ile denemeler için canlı coşkusu için Nikolai'ye saygı duyuyorum) İpliği zevkle okudum. Ve kod örneklerine daha az aşina olmadan.

Ne yazık ki, elbette, ancak şu anki uygulamasında Canvas, bir bitmap dizisini grafik ilkellerle doldurmak için özel olarak CPU'ya bağlı algoritmalardır. Onlar. dizi öğeleri üzerinde yinelenen döngüler aracılığıyla ve hepsi bu ... Ve bu arada 21 yıl geçti ...

Deneyler kesinlikle iyidir, ancak pratik görevlerin uygulanması sadece güzel değil, aynı zamanda etkili olmalıdır. Üst düzey bir 8 çekirdekte oturmak için, elbette, bunu ihmal edebilirsiniz, ancak tüketicilerin büyük bir kısmı için - PC'ler genellikle özellikler açısından oldukça ortalamadır. Ve piyasa verileri görselleştirmesi olan herhangi bir tam ekran GUI, çok kullanışlı ve güzel olsa bile, CPU'yu yüzde 75'in altında yüklerse popüler olmayacaktır.Bu bir gerçektir. Bu nedenle ve yapacak başka bir şeyleri olmadığı için değil - tüm büyük tarayıcılarda Canvas uygulamasına donanım hızlandırma getirildi.

Burada asıl meseleye gelmek - MQL5'te Direct2D (ve DirectWrite) için bir çeşit sarmalayıcı olurdu - bu gerçekten bir bomba olurdu ve GUI alanındaki birçok pratik görevin donanımla hızlandırılmış verimli bir şekilde uygulanmasının yolunu açar. ve veri görselleştirme. Kesinlikle DirectX olduğunu söyleyebilirsiniz. Ancak bunun yalnızca Direct3D kısmı temsil edilir ve bunlar 3B projeksiyonlar, gölgelendiriciler ve diğer 3B niteliklerdir ve bu hala pratik kullanım için oldukça dar bir niştir. Evet, elbette, belirli projeksiyon ayarları ve diğer manipülasyonlar ve mozaiklemeler yoluyla Direct3D aracılığıyla 2D grafiklerin oluşturulmasını sağlamak mümkündür - ancak bu, Direct3D üzerinden kendi Direct2D uygulamanızı oluşturmaktan başka bir şey değildir. Direct2D uzun zaman önce uygulandığı için bu hiç mantıklı değil.

Düşünceler bunlar...
 
Ancak aynı zamanda, her şey hızlı bir şekilde CPU'ya çekilir.

Yukarıdaki örnekler bunu kanıtlamaktadır. Ayrıca, görüntülerin nihai güzelliği ve fantezisi için katı gereksinimlerin olmadığı uygulamalı bir alanımız var.
 
Codexample :

Tabii ki, Tuval ile denemeler için canlı coşkusu için Nikolai'ye saygı duyuyorum) İpliği zevkle okudum. Ve kod örneklerine daha az aşina olmadan.

Ne yazık ki, elbette, ancak şu anki uygulamasında Canvas, bir bitmap dizisini grafik ilkellerle doldurmak için özel olarak CPU'ya bağlı algoritmalardır. Onlar. dizi öğeleri üzerinde yinelenen döngüler aracılığıyla ve hepsi bu ... Ve bu arada 21 yıl geçti ...

Deneyler kesinlikle iyidir, ancak pratik görevlerin uygulanması sadece güzel değil, aynı zamanda etkili olmalıdır. Üst düzey bir 8 çekirdekte oturmak için, elbette, bunu ihmal edebilirsiniz, ancak tüketicilerin büyük bir kısmı için - PC'ler genellikle özellikler açısından oldukça ortalamadır. Ve piyasa verileri görselleştirmesi olan herhangi bir tam ekran GUI, çok kullanışlı ve güzel olsa bile, CPU'yu yüzde 75'in altında yüklerse popüler olmayacaktır.Bu bir gerçektir. Bu nedenle ve yapacak başka bir şeyleri olmadığı için değil - tüm büyük tarayıcılarda Canvas uygulamasına donanım hızlandırma getirildi.

Burada asıl meseleye gelmek - MQL5'te Direct2D (ve DirectWrite) için bir çeşit sarmalayıcı olurdu - bu gerçekten bir bomba olurdu ve GUI alanındaki birçok pratik görevin donanımla hızlandırılmış verimli bir şekilde uygulanmasının yolunu açar. ve veri görselleştirme. Kesinlikle DirectX olduğunu söyleyebilirsiniz. Ancak bunun yalnızca Direct3D kısmı temsil edilir ve bunlar 3B projeksiyonlar, gölgelendiriciler ve diğer 3B niteliklerdir ve bu hala pratik kullanım için oldukça dar bir niştir. Evet, elbette, belirli projeksiyon ayarları ve diğer manipülasyonlar ve mozaiklemeler yoluyla Direct3D aracılığıyla 2D grafiklerin oluşturulmasını sağlamak mümkündür - ancak bu, Direct3D üzerinden kendi Direct2D uygulamanızı oluşturmaktan başka bir şey değildir. Direct2D uzun zaman önce uygulandığı için bu hiç mantıklı değil.

Düşünceler bunlar...

Nazik sözlerin için teşekkür ederim.
Aslında, MQ bu konuda harika bir iş çıkardı ve sadece CPU'yu değil GPU'yu kullanan grafik ve hesaplama araçlarıyla ilgilendi.
OpenCL ve DirectX'i kastediyorum.
Burada, aynı grafik görevinin (8 ağırlık merkezi) üç sürümde (CPU, OpenCL(GPU) ve DirectX(GPU) uygulanmasını karşılaştırma örnekleri verilmiştir):

1.CPU -14 fps. (Swirl2.mq5 komut dosyası)

2. OpenCL - Saniyede 162 kare (bilgisayarınızda OpenCL sürücülerini yüklemeniz gerekir) (script Swirl2_OCL.mq5)

3. DirectX - saniyede 37 kare. (script Swirl2_GPU.mq5)


yani o kadar melankolik değil.
Maksimum performansa ihtiyacınız varsa, grafik kartını kullanabilirsiniz.
Bu testlerin zayıf bir Intel® HD Graphics 620 grafik kartına sahip oldukça zayıf bir dizüstü bilgisayarda gerçekleştirildiğini belirtmeliyim.
Video kartının gücünü kullanmanın çok iyi bir performans artışı sağlamasına rağmen, grafik çıkışı için CPU kullanmanın bile MQL5 görev alanındaki tüm grafik görevlerinin %99'undan fazlasını kapsadığı konusunda Renat'a katılıyorum.
Çerçevem 10 milisaniyeden az sürdüğü sürece, GPU'ya karşı özellikle seğirmiyorum (bazen cazip gelse de, böyle bir manevra olasılığının olması iyi).
Ve 10 milisaniye içinde, örneğin bunu gölgeler, pürüzsüzlük ve şeffaflık ile görüntüleyebilirsiniz:


Casusluk yapılan GPU için tehdit kodları   bu konu , çok teşekkürler   @Rorschach ve   @Serhii Shevchuk  

Dosyalar:
Swirl2.mq5  5 kb
Swirl2_OCL.mq5  14 kb
 
İnsanlar, Canvas'ta enterpolasyon kullanarak grafik kaynaklarının yeniden boyutlandırılmasını yapan var mı?
 
Nikolay Kositsin :
İnsanlar, Canvas'ta enterpolasyon kullanarak grafik kaynaklarının yeniden boyutlandırılmasını yapan var mı?

İşte bir örnek kod. Kod yine de mükemmel olmaktan uzak. Şimdi her şeyi farklı yapardım.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Tuval harika!

Nikolai Semko , 2018.03.24 04:13

Raster ölçeklemeli komut dosyası demosu

Ex5 dosyası, kaynak olarak oldukça büyük bir BMP dosyası içerir.



 
Nikolai Semko :

İşte bir örnek kod. Kod yine de mükemmel olmaktan uzak. Şimdi her şeyi farklı yapardım.


Şimdi ne yapacağın gerçekten ilginç. Tamamen bencil çıkarlarım için :)

 
Nikolai Semko :

İşte bir örnek kod. Kod yine de mükemmel olmaktan uzak. Şimdi her şeyi farklı yapardım.


Tarif edilemez güzellik :)

 

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

DirectX: Standart olarak kalan 3D

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

Şimdi ne yapacağın gerçekten ilginç. Tamamen bencil çıkarlarım için :)

Pekala, eğer çok kısaysa Artem, o zaman daha önce bir pikseli alan üzerinden yeni ölçeğin pikseline ağırlığının katılımını hesaplayarak bir kare olarak algılamıştım, ama şimdi onu hesaplama ile bir daire olarak algılıyordum. yeni ölçeğin pikselinin merkezine olan mesafeden ağırlık katılımı.