|
|
帮一个网友问一个 dx 问题:
(截图在附件里)
DIRECTX渲染颜色混杂
如图:地质图层,每层由三角网构成,同层颜色相同,不同层的颜色是不同的
当用如下代码的时候,出现颜色混杂,就是层间的颜色互相影响了
HRESULT CDirect3D9MFCView::render()
{
if( _device )
{
_device->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0x00345667,1.0f, 0);
if (this->g_pVB==NULL) return S_FALSE;
_device->SetRenderState(D3DRS_LIGHTING, false);
//为什么要关闭ZBuffer才对 ==========================================
_device->SetRenderState(D3DRS_ZENABLE ,true);
_device->SetRenderState(D3DRS_CULLMODE ,D3DCULL_NONE );
_device->BeginScene();
_device->SetStreamSource (0,this->g_pVB,0,sizeof(CUSTOMVERTEX));
_device->SetFVF (D3DFVF_CUSTOMVERTEX);
_device->DrawPrimitive(D3DPT_TRIANGLELIST,0,this->pCurDOC->pntCount/3 );
_device->EndScene();
_device-> resent(0, 0, 0, 0);
}
return S_OK;
}
而把上面的代码(红色部分)即把zbuffer关闭,
_device->SetRenderState(D3DRS_ZENABLE ,false);
则就不会出现颜色混杂
设备初始化代码:
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.
_d3dpp.BackBufferWidth = width;
_d3dpp.BackBufferHeight = height;
_d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
_d3dpp.BackBufferCount = 1;
_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
_d3dpp.MultiSampleQuality = 0;
_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
_d3dpp.hDeviceWindow = hwnd;
_d3dpp.Windowed = windowed;
_d3dpp.EnableAutoDepthStencil = true;
_d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
_d3dpp.Flags = 0;
_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
// Step 4: Create the device.
hr = d3d9->CreateDevice(D3DADAPTER_DEFAULT, // primary adapter
deviceType, // device type
hwnd, // window associated with device
vp, // vertex processing
&_d3dpp, // present parameters
&_device); // return created device
|
|