Pular para o conteúdo

Texturas, shaders e render targets

Cliente

Tudo o que estas funções desenham vale por um quadro. Não existe “criar um retângulo e deixá-lo lá”: a tela é redesenhada a cada quadro, então o seu desenho precisa ser refeito toda vez — de dentro de um handler do evento onClientRender.

local telaW, telaH = getScreenSize()
addEventHandler("onClientRender", root, function()
-- fundo da barra
dxDrawRectangle(20, telaH - 70, 240, 26, tocolor(0, 0, 0, 160))
-- preenchimento
dxDrawRectangle(20, telaH - 70, 240 * 0.65, 26, tocolor(80, 200, 120, 255))
-- linha de base
dxDrawLine(20, telaH - 44, 260, telaH - 44, tocolor(255, 255, 255, 90), 1)
end)

A ordem importa: o que é desenhado depois fica por cima.

As cores são inteiros empacotados, e não três números soltos. Monte-as com tocolor(r, g, b, a), onde os quatro canais vão de 0 a 255. Quando o argumento de cor é omitido, o padrão é branco opaco — tocolor(255, 255, 255, 255).

Quando um argumento tem o tipo errado, ou um valor fora do intervalo aceito, a maioria destas funções devolve false e escreve o motivo no console de debug. As exceções são dxDrawPrimitive, dxDrawMaterialPrimitive, dxDrawPrimitive3D, dxDrawMaterialPrimitive3D, dxDrawWiredSphere e dxDrawModel3D: um argumento inválido em qualquer uma delas gera um erro de Lua, que interrompe o código que a chamou.

Estas 36 funções existem somente no cliente. Chamá-las de um script de servidor resulta em erro de valor nulo.

O desenho de texto, retângulos e imagens fica na página de Desenho na tela.

As coordenadas são em pixels, contadas a partir do canto superior esquerdo da tela.

Os mesmos nomes valem para as versões 2D e 3D.

ValorComo os vértices são ligadosQuantidade exigida
"pointlist"Cada vértice vira um ponto solto.1 ou mais
"linelist"Cada par de vértices vira uma linha independente.múltiplo de 2
"linestrip"Uma linha contínua passando por todos os vértices.2 ou mais
"trianglelist"Cada trio de vértices vira um triângulo independente.múltiplo de 3
"trianglestrip"Faixa de triângulos: cada novo vértice fecha um triângulo com os dois anteriores.3 ou mais
"trianglefan"Leque: todos os triângulos partem do primeiro vértice.3 ou mais

A área de radar é desenhada no minimapa, uma vez por quadro, a partir de coordenadas do mundo.

Aqui as coordenadas são as do mundo, não as da tela. O desenho continua sendo por quadro.

As funções de linha e primitiva 3D aceitam um argumento de estágio, que é um booleano ou o nome de um estágio de renderização (maiúsculas ou minúsculas):

ValorEfeito
false ou "postfx" (padrão)Desenhado depois do filtro de cor do jogo. O desenho respeita o mundo — o que estiver na frente esconde o traço.
"prefx"Desenhado antes do filtro de cor do jogo, então o filtro também se aplica a ele. Também respeita o mundo.
true ou "postgui"Desenhado depois da GUI, por cima de tudo. Com o menu principal aberto, cai para "postfx".

Materiais são os elementos que guardam imagem: texturas, render targets, screen sources e shaders. Todos podem ser usados onde uma imagem é pedida.

Materiais criados por um resource são liberados quando ele para, mas você também pode soltá-los na hora com destroyElement.

ValorO que acontece fora da imagem
"wrap"A imagem se repete.
"mirror"A imagem se repete espelhada a cada repetição.
"clamp"Os pixels da borda são esticados.
"border"Tudo fora vira a cor de borda escolhida.
"mirror-once"Espelha uma vez e depois estica a borda.

Uma string de pixels é a imagem crua, que você pode ler e alterar em Lua. Existem quatro formatos:

FormatoDescrição
"plain"Pixels sem compressão. É o único formato que pode ser lido e alterado pixel a pixel.
"png"Imagem PNG comprimida.
"jpeg"Imagem JPEG comprimida.
"dds"Imagem DDS.