|

楼主 |
发表于 2009-9-19 14:15:00
|
显示全部楼层
Re:为什么相同的材质,在同一个平面上会有这么大的反光
光照分为顶点光照和像素光照,我也不知道我用的是哪种,因为代码大部分是从书上例子改来的。D3D环境设定代码如下:
IDirect3D9* d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = rect.Width(); //窗口大小
d3dpp.BackBufferHeight = rect.Height();
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = GetDlgItem(IDC_D3D)->m_hWnd; //窗口句柄
d3dpp.Windowed = TRUE; //窗口显示
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3d9->CreateDevice(
D3DADAPTER_DEFAULT, // primary adapter
D3DDEVTYPE_HAL, // device type
GetDlgItem(IDC_D3D)->m_hWnd, // window associated with device
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, // present parameters
&m_Device); // return created device
d3d9->Release(); // done with d3d9 object
// 创建各大大小小的Box
D3DXCreateBox(......);
......
//然后建立世界矩阵-各模型在世界空间中的位置
D3DXMatrixTranslation(......);
......
//再设定并启用光源
......
最后在每帧的渲染函数中显示所有的Box。因为并没有作什么特别的设置,所以不知道系统默认用的是哪种光照?不过看前面代码中得到的FVF格式为D3DFVF_XYZ | D3DFVF_NORMAL的,所以估计用的是顶点光照,不知道这样判断对不对?请楼上兄弟指点指点哈! |
|