A lona é legal! - página 64

 
Vladimir Pastushak:

Olá a todos, eu gostaria de aprofundar meu conhecimento sobre Tela

Eu nem sei por onde começar. Neste momento estou imaginando que a tela é uma fórmula logarítmica complicada e coisas assim.

Você pode me dar um exemplo de como fazer um botão como o que está abaixo na tela? Preciso de algum código para entendê-lo.


Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Fazendo um projeto de crowdsourced em Tela

Nikolai Semko, 2017.05.24 02:20


Eis o que saiu.


O botão pode ser exibido atrás do fundo e em primeiro plano, definido para bloquear ou não o clique.

No arquivo de exemplo CanvasButton.mq5 é possível arrastar o botão com o mouse. Para fazer isso, basta segurar Ctrl para mover o botão azul, e Shift para mover o botão vermelho.

Como a classe GButton é descendente da classe CCanvas, o exemplo demonstra a capacidade de usar as funções da classe CCanvas no exemplo CircleWu (Isto é implementado no OnInit). Assim, é possível escrever texto no botão usando as funções da classe CCanvas.

Esta classe, é claro, não finge estar limpa. Os gráficos não brilham com perfeição e o 3D é muito convencional; as sombras não são implementadas, a velocidade de execução não é otimizada. E o mais provável é que haja muitas arestas ásperas e falta de vários controles. Portanto, não julgue severamente.

Se você passar um pouco mais de tempo, é claro que isso pode ser feito:


Eu só estava tentando... poderia-se dizer - definir a direção.


O arquivo Canvas.mqh difere do original somente no fato de que a matriz m_pixels é definida como pública.


 

Nikolay, é claro, é um respeito ao seu grande entusiasmo em experimentar com Tela. E eu estudei os exemplos de código com não menos prazer.

Infelizmente, a Tela em sua implementação atual é puramente algorítmica ligada à CPU para preencher a matriz de bitmap com primitivos gráficos. Isto é, através de loops com enumeração de elementos de matriz e é só isso... Enquanto isso, foi há 21 anos.

As experiências são certamente boas, mas a implementação para fins práticos deve ser não apenas bela, mas também eficaz. Pois certamente posso ignorá-lo sentado em algum PC top de linha de 8 núcleos, mas como regra geral a principal massa de usuários tem PCs de classe média. E qualquer GUI em tela cheia com visualização de dados do mercado, mesmo que seja muito conveniente e bonita, não será popular, se ela carregar a CPU até 75%. Isto é um fato. É por isso, e não porque eles simplesmente não tinham mais nada a fazer - as implementações de lona em todos os principais navegadores trouxeram aceleração de hardware.

Chegando ao núcleo - na MQL5 deveria haver algum invólucro para Direct2D (e DirectWrite) - seria uma verdadeira bomba, abrindo o caminho para a implementação eficiente e acelerada por hardware de muitas tarefas práticas no campo da GUI e visualização de dados. É claro, pode-se dizer que já existe o DirectX. Mas apenas sua parte Direct3D é representada, ou seja, projeções 3D, shaders e outros atributos do 3D e ainda é um nicho bastante estreito para uso prático. Sim, claro que você pode, através de algumas projeções de ajuste e outras manipulações e tesselações para conseguir renderizar gráficos 2D e através do Direct3D - mas não significa nem mais nem menos criar sua própria implementação do Direct2D sobre o Direct3D. Isto não faria nenhum sentido desde que o Direct2D foi implementado há muito tempo.

Então, aqui vai um pensamento...
 
Mas, ao mesmo tempo, tudo pode ser desenhado rapidamente também na CPU.

Os exemplos acima comprovam isso. Além disso, este é um domínio de aplicação onde não há requisitos rigorosos para a beleza e sofisticação final das imagens.
 
Codexample:

Nikolay, é claro, respeita seu grande entusiasmo em experimentar com Tela. E eu estudei os exemplos de código com não menos prazer.

Infelizmente, a Tela em sua implementação atual não é nada mais do que algoritmos vinculados a CPU para preencher a matriz de bitmap com primitivos gráficos. Isto é, através de loops com busca de elementos de matriz e é só isso... Enquanto isso, foi há 21 anos.

As experiências são certamente boas, mas a implementação para fins práticos deve ser não apenas bela, mas também eficaz. Pois certamente posso ignorá-lo sentado em algum PC top de linha de 8 núcleos, mas como regra geral a principal massa de usuários tem PCs de classe média. E qualquer GUI em tela cheia com visualização de dados do mercado, mesmo que seja muito conveniente e bonita, não será popular, se ela carregar a CPU até 75%. Isto é um fato. É por isso - e não porque eles simplesmente não tinham mais nada a fazer - que a aceleração de hardware foi introduzida nas implementações de Tela em todos os principais navegadores.

Na verdade, chegar ao ponto - na MQL5 seria algum invólucro para Direct2D (e DirectWrite) - seria uma verdadeira bomba, abrindo o caminho para a implementação eficiente e acelerada por hardware de muitas tarefas práticas no campo da GUI e visualização de dados. É claro, pode-se dizer que já existe o DirectX. Mas apenas sua parte Direct3D é representada, ou seja, projeções 3D, shaders e outros atributos do 3D e ainda é um nicho bastante estreito para uso prático. Sim, é claro que você pode através de algumas projeções de ajuste e outras manipulações e tesselações conseguir renderizar gráficos 2D e através do Direct3D - mas isso significa nem mais nem menos criar sua própria implementação do Direct2D sobre o Direct3D. Isto não faria nenhum sentido desde que o Direct2D foi implementado há muito tempo.

Aqui vai uma reflexão...

Obrigado pelas amáveis palavras.
Na verdade, MQ são bons neste aspecto e cuidaram dos gráficos e ferramentas de computação usando GPUs e não apenas CPUs.
Refiro-me ao OpenCL e DirectX.
Aqui estão os exemplos comparando a implementação da mesma tarefa gráfica (8 centros de gravidade) em três variantes - CPU, OpenCL(GPU) e DirectX(GPU):

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

2. OpenCL - 162 quadros por segundo (requer drivers OpenCL instalados em seu computador) (Swirl2_OCL.mq5 script)

3. DirectX - 37 quadros por segundo (script Swirl2_GPU.mq5)


portanto, não é tão melancólico.
Se você precisa de desempenho máximo, você pode usar também a placa gráfica.
Devo observar que estes testes foram feitos em um laptop bastante fraco com uma placa gráficaIntel® HD Graphics 620 fraca.
Embora o uso de uma placa gráfica dê um aumento de desempenho muito decente, concordo com Renat que mesmo usando uma CPU para saída gráfica cobre mais de 99% de todas as tarefas gráficas na área de tarefas MQL5
.
Desde que minha estrutura seja gerada em menos de 10 milissegundos, não estou particularmente nervoso com a GPU (embora a tentação esteja lá às vezes, ainda bem que há espaço para manobras).
E em 10 milissegundos eu poderia produzir, por exemplo, uma coisa assim com sombras, antialiasing e transparência:


Os códigos SZY para GPU foram baixadosdeste tópico, muito obrigado@Rorschach e@Serhii Shevchuk por isso.

Arquivos anexados:
Swirl2.mq5  5 kb
Swirl2_OCL.mq5  14 kb
 
Pessoal, alguém fez algum redimensionamento de recursos gráficos usando a interpolação de Tela?
 
Nikolay Kositsin:
Pessoal, alguém fez algum redimensionamento de recursos gráficos usando a interpolação em Tela?

Eu dei um exemplo do códigoaqui. Mas o código está longe de ser perfeito. Agora seria bem diferente.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

A lona é legal!

Nikolai Semko, 2018.03.24 04:13

Raster Scale Scale Scale Demo

Há um arquivo BMP bastante grande no arquivo Ex5 como um recurso.



 
Nikolai Semko:

Eu dei um exemplo do códigoaqui. Mas o código está longe de ser perfeito. Eu o teria feito de forma bem diferente agora.


Estou curioso em saber como você faria isso agora. É do meu maior interesse :)

 
Nikolai Semko:

Eu dei um exemplo do códigoaqui. Mas o código está longe de ser perfeito. Eu faria tudo diferente agora.


É de uma beleza indescritível :)

 

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

DirectX:Restante 3D como padrão

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

Só me pergunto como você faria isso agora. No meu melhor interesse :)

Muito brevemente, Artem, antes eu percebia um pixel como um quadrado com cálculo de sua participação ponderada em um pixel de nova escala através da área, mas agora eu o perceberia como um círculo com cálculo de sua participação ponderada através da distância até o centro do pixel de nova escala.
Razão: