游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2203|回复: 2

(转)关于 DX 的简单问题,帮忙看一下,谢谢。

[复制链接]

5

主题

29

帖子

29

积分

注册会员

版主

Rank: 2

积分
29
QQ
发表于 2007-4-15 12:02:00 | 显示全部楼层 |阅读模式
帮一个网友问一个 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-&gtresent(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

sf_200741512159.zip

25.66 KB, 下载次数:

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-4-15 12:26:00 | 显示全部楼层

Re:(转)关于 DX 的简单问题,帮忙看一下,谢谢。

面和面之间靠得太近了?

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-4-15 13:57:00 | 显示全部楼层

Re:(转)关于 DX 的简单问题,帮忙看一下,谢谢。

那也不对呀,靠得很近是很正常的呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 19:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表