D3D9 DrawPrimitive Gradiente Color - PullRequest
       95

D3D9 DrawPrimitive Gradiente Color

0 голосов
/ 22 марта 2019

Я пытаюсь создать систему выбора цвета, и для этого мне нужен градиент цвета.

Я пытаюсь использовать DrawPrimitive для рисования квадрата с цветовой вершиной.но результат не тот, который я хотел, градиент не такой красивый по сравнению с другими программами

Мой градиент:

enter image description here

Градиент Photoshop / ImGui / Другие программы, кажется:

enter image description here

void GradientColor(float x, float y, float width, float height)
{
    static struct D3DVERTEX
    { 
        float x, y, z, rhw;
        DWORD color;
    };

    D3DVERTEX vertices[4];

    vertices[0].x = x;
    vertices[0].y = y;
    vertices[0].z = 0.f;
    vertices[0].rhw = 1.f;
    vertices[0].color = 0xffffffff; //White

    vertices[1].x = x + width;
    vertices[1].y = y;
    vertices[1].z = 0.f;
    vertices[1].rhw = 1.f;
    vertices[1].color = 0xffff0000; //Red

    vertices[2].x = x;
    vertices[2].y = y + height;
    vertices[2].z = 0.f;
    vertices[2].rhw = 1.f;
    vertices[2].color = 0xff000000; //Black

    vertices[3].x = x + width;
    vertices[3].y = y + height;
    vertices[3].z = 0.f;
    vertices[3].rhw = 1.f;
    vertices[3].color = 0xff000000; //Black


    static LPDIRECT3DVERTEXBUFFER9 pVertexObject = NULL;
    static void *pVertexBuffer = NULL;

    if (!pVertexObject) {
        if (FAILED(device->CreateVertexBuffer(sizeof(vertices), 0,
            D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &pVertexObject, NULL)))
            return;
    }
    if (FAILED(pVertexObject->Lock(0, sizeof(vertices), &pVertexBuffer, 0)))
        return;

    memcpy(pVertexBuffer, vertices, sizeof(vertices));
    pVertexObject->Unlock();

    device->SetStreamSource(0, pVertexObject, 0, sizeof(D3DVERTEX));
    device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
    device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

}

Я знаю, разница не велика, но она ощутима, спасибо всем.

...