游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1168|回复: 0

[D3D8求助]为何FVF中包含pSize,HARDWARE_VERTEXPROCESSING时会导致

[复制链接]

2

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2004-12-26 20:04:00 | 显示全部楼层 |阅读模式
环境:WinXP DXSDK8.1 BCB6.0 镭7500 SERIES

我在练习时发现,如果我的程序使用 HARDWARE_VERTEXPROCESSING, FVF Format中一旦包含PSIZE,基于法线的光源计算就完全乱了。

SOFTWARE下一切正常。
如果删除PSIZE这项同样一切正常。
而没有normal和光源的时候,PSIZE本身也正确工作。

检查DeviceCaps的 FVFCaps , d3d 在DEFALT, HAL情况下 D3DFVFCAPS_PSIZE 位为 1
而无论创建的是SOFTWARE_VERTEXPROCESSING还是 HARDWARE的 d3dDevice, FVFCaps 的D3DFVFCAPS_PSIZE 位都为 1
这证明我的系统能够使用 pSize项。



在我机器上重现这一幕非常简单。打开SDK自带的D3D的Tutorial,修改第四课Light。
FVF定义改为:

struct CUSTOMVERTEX
{
D3DXVECTOR3 position; // The 3D position for the vertex
D3DXVECTOR3 normal; // The surface normal for the vertex
FLOAT pointSize;// The point size
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_PSIZE)

此时运行正常。然后修改 g_pD3D->CreateDevice 中 SOFTWARE_VERTEXPROCESSING 为
HARDWARE_VERTEXPROCESSING 再运行,就会发现光照计算乱七八糟了。

望解惑,希望知道这是为什么,以及到底哪个Caps描述系统的这一能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 20:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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