Как правильно рисовать линии в текстуре - PullRequest
0 голосов
/ 28 сентября 2018

Чтобы нарисовать и стереть линии на фоновом изображении артборда, я создал текстуру RTT, нарисовал на ней различные линии, а затем отрисовал текстуру, но теперь я вижу края с окружающим цветом (черные точки).) когда я пересекаю черту.Я надеюсь избавиться от этого "шума".

As indicated by the yellow arrow, the black dots at the intersection of the lines

if (_pILineTexture)
{
    D3DSURFACE_DESC desc;
    hr = _pILineTexture->GetLevelDesc(0, &desc);
    if (FAILED(hr))
    {
        return;
    }
    if (desc.Width != all_width || desc.Height != all_height)
    {
        _pILineTexture = nullptr;
    }
}
if (!_pILineTexture)
{
    hr = D3DXCreateTexture(_pID3dDev, all_width, all_height, 0, 
D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &_pILineTexture);
    if (FAILED(hr))
    {
        return;
    }
}
CComPtr<IDirect3DSurface9> pIOldSurface = nullptr;
_pID3dDev->GetRenderTarget(0, &pIOldSurface);    
CComPtr<IDirect3DSurface9> pIDstSurface = nullptr;
_pILineTexture->GetSurfaceLevel(0, &pIDstSurface);
_pID3dDev->SetRenderTarget(0, pIDstSurface);     
_pID3dDev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 
D3DCOLOR_RGBA(0, 0, 0, 0), 0.5f, 0);
_pID3dLine->Begin();
_pID3dDev->SetRenderState(D3DRS_LIGHTING, FALSE);//For XYZ
_pID3dDev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
_pID3dDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
_pID3dDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
_pID3dLine->DrawTransform(_points.data(), _points.size(), &matrix, 
D3DCOLOR_RGBA(255, 0, 0, 255));
_pID3dLine->End();
D3DXSaveTextureToFileA("G:\\Proj\\line.png", D3DXIFF_PNG, _pILineTexture, NULL);
...