Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > [DirectX] Отрисовка


Автор: PRF 5.5.2009, 20:36
Здравствуйте. Скажите пожалуйста в чем проблема, когда отрисовываешь объекты не в полноэкранном режиме, некоторые линии не рисует, а если переключится в полноэкранный режим , то нормально!
вот пример скриншота.

Автор: Rickert 7.5.2009, 03:18
Телепаты - в атаку! smile 

Автор: PRF 7.5.2009, 11:44
ну может какой то режим надо ставить отрисовки SetRender , в DirectX. я не знаю почему так делает, или линию допустим рисует прерывисто, пунктирно , а не сплошником.

Автор: Rickert 7.5.2009, 14:00
Ну вот мы уже знаем через что вы отрисовываете, ещё пара сеансов и сможем увидеть код.

Автор: PRF 7.5.2009, 17:40
ну вот здесь инициализация и  отрисовка происходит.. 

Код

void InitializationDirectX(HWND window)
{
    d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
    D3DCAPS9 caps;

    d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT,    D3DDEVTYPE_HAL,    &caps);  

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));

    d3dpp.BackBufferWidth            = 1280;
    d3dpp.BackBufferHeight           = 800;
    d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8; //формат пикселей
    d3dpp.BackBufferCount            = 1;
    d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;
    d3dpp.MultiSampleQuality         = 0;
    d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow              = window;
    d3dpp.Windowed                   = true; // полноэкранный режим
    d3dpp.EnableAutoDepthStencil     = true;
    d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8; 
    d3dpp.Flags                      = 0;
    d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;

    d3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &device);
}

void RenderScene(D3DPRIMITIVETYPE type)
{
    device->Clear(0, 0, D3DCLEAR_TARGET, 0xffffffff, 1.0f, 0);
    device->BeginScene();
    //scene::RenderObject(type);
    device->EndScene();
    device->Present(0, 0, 0, 0);
}

Автор: C/L 15.5.2009, 12:31
Точно не знаю но могу предположить. Когда размеры окна вывода и BackBuffer не совпадают(а у вас оно высокое), DirectX производит масштабирование самым быстрым способом (явно не бикубическим), в результате которого часть пикселей стирается. Поэтому размер BackBuffer надо подстраивать под размеры окна.

Автор: PRF 15.5.2009, 21:10
хм.. спасибо) почитаю)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)