关于ID3DXBaseEffect::GetParameterBySemantic

zzz822163 2008-11-26 11:11:46
D3DXHANDLE GetParameterBySemantic(
D3DXHANDLE hParameter,
LPCSTR pSemantic
);
typedef LPCSTR D3DXHANDLE;
D3DXHANDLE m_hMatProjection = m_pResource->GetParameterBySemantic( NULL, "PROJECTION" );
我单步看m_hMatProjection 是有地址的,但为什么说他是错误的指针?
程序运行是正常的,我只是以为m_hMatProjection 该是一个字符串的...
...全文
84 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacier3d 2008-11-27
  • 打赏
  • 举报
回复
WorldMatrix只是个变量名,可以随便改。

具体在.fx文件里,下面怎么用那就怎么写。
比如:要像固定渲染管道似的直接用来做世界变换矩阵,就在
technique{
pass{
}}
里写:WorldTransform[0] = (WorldMatrix);

要是自己写渲染管道里的变换过程,那就把WorldMatrix带入对应的计算式子里算就行了。

---这些是.fx文件格式规定问题,还是看D3D SDK文档或相关书籍比较好吧
zzz822163 2008-11-27
  • 打赏
  • 举报
回复
m_hWorldMatrix = m_effect->GetParameterByName(0,"WorldMatrix");
这里WorldMatrix这个参数是固定的,还是每个程序都可以不同呢?
m_device->SetTransform( D3DTS_WORLD, &m_WorldMatrix );
这个他就用D3DTS_WORLD说明了是世界矩阵
m_effect->SetMatrix(m_hWorldMatrix,&W); // 第一个参数不就对应上世界矩阵了吗
这里我知道他对应上了一个矩阵,他怎么知道他就是世界矩阵呢?
zzz822163 2008-11-27
  • 打赏
  • 举报
回复
好的,谢谢你指点
glacier3d 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzz822163 的回复:]
还有个问题,SetMatrix怎么知道自己正在设置的是世界矩阵,视图矩阵还是投影矩阵呢?
[/Quote]
GetParameter...得到的句柄不就是用来对应啥是啥的吗?
比如在.fx文件里声明了几个主要的变换矩阵如下:


//
// Globals
//
matrix WorldMatrix;
matrix ProjMatrix;
matrix ViewMatrix;


对应程序里:

//save frequently accessed parameter handles
m_hWorldMatrix = m_effect->GetParameterByName(0,"WorldMatrix"); // 获得世界变换矩阵对应的句柄
m_hViewMatrix = m_effect->GetParameterByName(0,"ViewMatrix");
m_hProjMatrix = m_effect->GetParameterByName(0,"ProjMatrix");
m_hTex = m_effect->GetParameterByName(0,"Tex");


//set effect parameters
D3DXMATRIX W,P;
//D3DXMatrixIdentity(&W);
D3DXMatrixTranslation(&W,0.f,0.f,40.f);
m_effect->SetMatrix(m_hWorldMatrix,&W); // 第一个参数不就对应上世界矩阵了吗
m_effect->SetMatrix(m_hProjMatrix,&matProj);

zzz822163 2008-11-26
  • 打赏
  • 举报
回复
还有个问题,SetMatrix怎么知道自己正在设置的是世界矩阵,视图矩阵还是投影矩阵呢?
zzz822163 2008-11-26
  • 打赏
  • 举报
回复
我知道了
D3DXPARAMETER_DESC desc;
m_pResource->GetParameterDesc( m_hMatProjection,&desc);
这样就能查询信息了
不过还是不明白上面两个SetMatrix的差别,还是说第2个他会自动查找字符串?
zzz822163 2008-11-26
  • 打赏
  • 举报
回复
g_pEffect->SetMatrix( "g_mWorld", &mWorld )
这个SetMatrix他有时用上面的方法,有时用GetParameterBySemantic返回的句柄,一个D3DXHANDLE 对象
如m_pResource->SetMatrix( m_hMatProjection, pProjection )
所以我才会以为m_hMatProjection也是个字符串,没想到VC都不知道他到底是什么东西,说他是错误的指针
glacier3d 2008-11-26
  • 打赏
  • 举报
回复
m_hMatProjection 里应该就是个32位数,根据这个数可以找到对应的参数,微软的东西不都这样用句柄来表示吗,呵呵,我的理解
zzz822163 2008-11-26
  • 打赏
  • 举报
回复
成功了的哦,如果没成功地址会是NULL,
程序运行是正常的,我只是不明白m_hMatProjection 里面到底装的是啥东西
glacier3d 2008-11-26
  • 打赏
  • 举报
回复
可能从effect文件里获取projection没成功吧!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧