Olá terráqueos, venho aqui em missão de paz, disponibilizando um código D3D para desenho de triângulos.
Código:
Code:
struct sVertex
{
FLOAT x, y, z, rhw;
DWORD dwColor;
};
VOID DrawTriangle(INT x1, INT y1, INT x2, INT y2, INT x3, INT y3, DWORD Color1, DWORD Color2, DWORD Color3, LPDIRECT3DDEVICE9 pDevice)
{
CONST DWORD dwFVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;
sVertex V[3] =
{
{(FLOAT)x1, (FLOAT)y1, 0.5f, 1.0f, Color1},
{(FLOAT)x3, (FLOAT)y3, 0.5f, 1.0f, Color3},
{(FLOAT)x2, (FLOAT)y2, 0.5f, 1.0f, Color2},
};
VOID *pVertexBuffer = NULL;
LPDIRECT3DVERTEXBUFFER9 pBuffer = NULL;
if(FAILED(pDevice->CreateVertexBuffer(3 * sizeof(sVertex), 0, dwFVF, D3DPOOL_DEFAULT, &pBuffer, NULL)))
return;
if(FAILED(pBuffer->Lock(0, sizeof(V), &pVertexBuffer, 0)))
return;
memcpy(pVertexBuffer, V, sizeof(V));
pBuffer->Unlock();
pDevice->SetFVF(dwFVF);
pDevice->SetStreamSource(0, pBuffer, 0, sizeof(sVertex));
pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
}
Para isso supõe-se que você ao menos saiba coisas básicas de um triângulo:
Code:
• O que é um triângulo?
R: Um polígono com 3 lados e 3 vértices, portanto a função conta com as coordenadas de cada um dos 3 vértices que são dispostos dessa maneira
Code:
A(x1, y1) = Ponto do vértice 1
B(x2, y2) = Ponto do vértice 2
C(x3, y3) = Ponto do vértice 3
Code:
Color1 = Cor do vértice 1
Color2 = Cor do vértice 2
Color3 = Cor do vértice 3
Se você deseja construir um triângulo equilátero a partir desse código, usei uma fórmula de acordo com os princípios da geometria plana básica:
Code:
Lado = L
Altura do Triângulo = ((L * (3 ^(1 / 2))) / 2)
Atribuindo à origem do plano do triângulo valores arbitrários como menuX e menuY temos:
Code:
A(menuX + (L / 2), menuY)
B(menuX, menuY + (L * 0.86f))
C(menuX + L, menuY + (L * 0.86f))
• Nota: 0,86 é a aproximação de ((3 ^ (1 / 2)) / 2)
Sendo(exemplo) menuX = 20, menuY = 25, L = 50 e o triângulo monocromático de cor vermelha:
Code:
A(20 + 25, 25)
B(20, 25 + 43)
C(70, 25 + 43)
Utilizamos em seu local de desenho(Present ou Multi-Byte to Wide Char):
Code:
DrawTriangle(45, 25, 20, 68, 70, 68, D3DCOLOR_ARGB(255, 255, 000, 000), D3DCOLOR_ARGB(255, 255, 000, 000), D3DCOLOR_ARGB(255, 255, 000, 000), pDevice);
• Nota 2: Estas medidas são todas em pixels
Resultando assim em algo desse tipo:
• Nota 3: O triângulo tricromático faz parte do programa de simulação
Créditos:
• DirectXTutorial
• Matypatty
• Chaos Magician
• AeroMan
• Meu professor de matemática