谁有D3D?

 游戏外挂制作研究的中文网络平台
  声明:GameRes严禁各类外挂、私服等商业行为,更不会以GameRes名义进行任何商业销售,请勿信任任何
出售、购买、招聘
内容,谨防受骗!不要轻易运行下载的
可执行文件
,谨防恶意发布的木马病毒。
有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下 - 游戏外挂研究院
访问本论坛!
有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
声明:此资讯仅供参考,不代表本站观点,请明辨信息正确性,如果信息错误、虚假,请给我们
,我们将进行查处。
本主题共有
张帖子, 被点击
侦察兵 发表于: 2003-10-31 15:06:00
| 有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
问题1:在Pick()函数里的,有如下代码
POINT tCursor;
GetCursorPos( am tCursor );
ScreenToClient( m_hWnd, am tCursor ); D3DXVECTOR3 v;// v.x = ( ( 2.0f *(ptCursor.x )/ m_d3dsdBackBuffer.Width ) - 1 ) / matProj._11;//为什么这里要用2.0乘于ptCursor?然后又要除以m_d3dsdBackBuffer.Width ???想不明白它的原理 v.y = -( ( 2.0f *(ptCursor.y )/ m_d3dsdBackBuffer.Height) - 1 ) / matProj._22;
问题2:如下代码
// Get the inverse view matrix
D3DXMATRIXA16 matView, m;
m_pd3dDevice-GetTra form( D3DTS_VIEW, am matView);//
D3DXMatrixInverse( am m, NULL, am matView );//为什么要用view矩阵的逆矩阵来运算?这个在很多的D3D例子中都有用到,没有想明白
// Tra form the cree ace ick ray into 3D ace
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
那位高手帮忙讲解一下,谢谢 注册:
2003-8 状态:
1 tru un2003
新成员 发表于: 2003-10-31 17:23:00
| Re: 有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
老兄看看 View 变换 和 Proj 变换
就知道了
应该是 x= arcta a * x0 好像是阿 可以简化为 你看到的公式、、
注意其中的 1 是 z = (fov1 -fov2)/fov1
fov1 是 fov far ,fov2 是 fov ear ,一般约等于 1 ,
等我把转换程序给你吧,刚刚写了一个,呵呵,其实 DirectX 文档上都有阿. 注册:
2003-10 状态:
2 pzh508
侦察兵 发表于: 2003-10-31 17:56:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
to tru un2003:
对第二个问题:
我不明白为什么要用view矩阵的逆矩阵来运算而不是直接用view矩阵来运算 注册:
2003-8 状态:
3 tru un2003
新成员 发表于: 2003-11-1 11:39:00
| Re: 有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
上面我回复的有错误更正一下。
Projectio 变换是
w = (2*Znear)/Vw h = (2*Znear)/Vk;
z = Zfar/(Zfar-Znear);
变换程序可以用下面的,用到了 View 变换的逆矩阵了阿。具体看程序
D3DXVECTOR3 CMainScene::ScreenPtToWorldPt(int X,int Y)
D3DXVECTOR3 retVal(0,0,0);
//TRACE((pX,pY) = (%d,%d) \ quot;,pX,pY);
D3DXVECTOR3 vPickRayDir // 射线方向(向量)
D3DXVECTOR3 vPickRayOrig // 射线原点(坐标) // 获得 Proj 变换矩阵。
D3DXMATRIXA16 matProj = m_camera.GetProjMatrix(); // 获得视区宽度,高度
FLOAT x = (FLOAT)m_viewPort.Width;
FLOAT y = (FLOAT)m_viewPort.Height;
//TRACE((sx,sy) = (%f,%f) \ quot;,sx,sy);
// Compute the vector of the ick ray i cree ace // 计算出 Proj 前的点坐标。
D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * X ) / x ) - 1 ) / matProj._11;
v.y = -( ( ( 2.0f * Y ) / y ) - 1 ) / matProj._22;
v.z = 100.0f / (100.0f - 1.0f);
//TRACE(v.(x,y,z) = (%f,%f,%f) \ quot;,v.x,v.y,v.z); // Get the inverse view matrix // 得到 View 变换逆矩阵
D3DXMATRIXA16 m = m_camera.GetInvViewMatrix();
// Tra form the cree ace ick ray into 3D ace // 求逆
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
//TRACE(vPickRayDir.(x,y,z) = (%f,%f,%f) \ quot;,vPickRayDir.x,vPickRayDir.y,vPickRayDir.z); // 射线原点(eye)位置
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
//TRACE(vPickRayOrig.(x,y,z) = (%f,%f,%f) \ quot;,vPickRayOrig.x,vPickRayOrig.y,vPickRayOrig.z); // 我用的是 y=0 平面 ,所以下面是直线和平面求交点,比较简单
retVal.x = vPickRayOrig.x - ( vPickRayDir.x * vPickRayOrig.y / vPickRayDir.y);
retVal.y = 0.0f;
retVal.z = vPickRayOrig.z - ( vPickRayDir.z * vPickRayOrig.y / vPickRayDir.y);
//TRACE(retVal.(x,y,z) = (%f,%f,%f) \ quot;,retVal.x,retVal.y,retVal.z);
// Get the inverse view matrix
retur retVal;
具体原理是 先求出 射线 的原点(Eye),再求出射线的方向。
最后得出直线方程 (点法式); 注册:
2003-10 状态:
4 pzh508
侦察兵 发表于: 2003-11-3 10:37:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
up 注册:
2003-8 状态:
5 pzh508
侦察兵 发表于: 2003-11-3 10:41:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
to tru un2003:
为什么要用view矩阵的逆矩阵来运算而不是直接用view矩阵来运算?
D3DXMATRIXA16 m = m_camera.GetInvViewMatrix();
// Tra form the cree ace ick ray into 3D ace
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
在上面代码中直接用view矩阵来运算为什么不行? 注册:
2003-8 状态:
6 pzh508
侦察兵 发表于: 2003-11-3 15:02:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
仔细用线性代数推导一下,终于明白过来了 注册:
2003-8 状态:
7 juanahx
新成员 发表于: 2005-2-21 19:31:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
vPickRayDir的坐标应该是(x,y,z,1)吧?
所以求逆这步为什么不是下面这样:
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31+1.0*m._41;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32+1.0*m._42;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33+1.0*m._43;
_________________________________________________________________
vPickRayOrig的坐标是(0,0,0,1),
才会得到vPickRayOrig的世界坐标是:
vPickRayOrig.x = 0*m._11 + 0*m._21 + 0*m._31+1.0*m._41=m._41
vPickRayOrig.y = 0*m._12 + 0*m._22 + 0*m._32+1.0*m._42=m._42
vPickRayOrig.z =0*m._13 + 0*m._23 + 0*m._33+1.0*m._43=m._43
这个问题我百思不得其解,等待哪位高人能帮我解答一下. 注册:
2005-2 状态:
8 juanahx
新成员 发表于: 2005-2-23 0:05:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
up一下 注册:
2005-2 状态:
9 juanahx
新成员 发表于: 2005-2-23 21:59:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
up 注册:
2005-2 状态:
10 niexuchina
Exp:1444
骑士中尉 发表于: 2005-2-25 23:43:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
我有一个想法。
用stencilbuffer,pick的时候看看鼠标处的值不就可以了吗?
我是菜鸟的,错了请指正。 注册:
2004-3 状态:
11 liulikui
新成员 发表于: 2008-5-6 21:29:00
| Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
juanahx: Re:有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
vPickRayDir的坐标应该是(x,y,z,1)吧?
所以求逆这步为什么不是下面这样:
vPickRayDir.x = v.x*m._11 +...
因为vPickRayDir是vTemp转换到物体空间后与摄像机原点vPickRayOrig(物体空间)的差,而vPickRayOrig=(m._41,m._42,m._43,1),故求vPickRayDir时各个分量要与vPickRayOrig相减,所以是:
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31 + m._41 - vPickRayOrig.x;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32 + m._42 - vPickRayOrig.y;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33 + m._43 - vPickRayOrig.z;
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33; 注册:
2008-3 状态:
12 共1页,选择: 1 主题管理: | | | | | | [
有谁看过D3D的Pick例子?不怎么懂啊,那位大哥指点一下
您尚未登录论坛,可以同通过
进行登录,如果您不是GameRes用户,可以点击这里
未经书面许可,请勿转载、链接本站内容,否则非法引用所造成的后果自负;
本站不对所提供的所有资讯正确性负责,若因资讯导致的任何损失本站概不负责,请自行斟酌。
Copyright
2001-2011
All Rights Reserved.谁有天晓得网络的那个双开工具连接麻烦发一下,不胜感激,D3D不能用了啊
谁有天晓得网络的那个双开工具连接麻烦发一下,不胜感激,D3D不能用了啊
(我是502)
当前离线
280822 帖子
3233 主题
306 精华
6809 威望
0 个 水滴
5141 滴 存在感
0 点 阅读权限
65 在线时间
2739 小时 注册时间
2010-1-3 跳转到
字体大小:
发表于 2010-3-23 13:37
谁有天晓得网络的那个双开工具连接麻烦发一下,不胜感激,D3D不能用了啊
。。。。
(我是502)
当前离线
280822 帖子
3233 主题
306 精华
6809 威望
0 个 水滴
5141 滴 存在感
0 点 阅读权限
65 在线时间
2739 小时 注册时间
2010-1-3 发表于 2010-3-23 13:39
我找到了。。。。
(大光头!我有姿势我自豪!)
当前在线
超威蓝猫
71595 帖子
35316 主题
378 精华
53355 威望
3 个 水滴
10619 滴 存在感
0 点 阅读权限
255 在线时间
10021 小时 注册时间
2008-8-29 发表于 2010-3-23 13:39
驱动加载表示毫无鸭梨
不晓得什么天晓得
只怪蒋公当年剿匪不力 http://115.com/invite/75dd42 (
GMT+8, 2011-7-31 06:45.
Powered by
2001-2009d3d9.dll,因此这个程序未能启动。这是什么意思阿?我重装了好几遍也不管用。谁能说说
回答:4 浏览:291 提问时间:
2006-09-05 21:37
提示重装可以解决问题
,可我装了好几遍也不管用,希望能人帮帮忙
条评论...
最佳***
此***由提问者自己选择,并不代表爱问知识人的观点
别忘了还要有Directx 9.0c 必须要有它,才行哟!
2006-09-05 23:39
提问者对***的评价:
条评论...
其它回答
共3条回答
我也出现过这种情况,重新下没有用,还是去别地方找客户端吧!
2006-09-05 21:48
条评论...
呵呵~~我和你的一样现在我在下Directx 9.0c 呢~`
你也去下吧~官方下载地址 http://popkart.tiancity.com/homepage/download/drivers.html
2006-09-07 22:46
条评论...
霸王大陆官方有下载我下过,全是盛大的***里问一下,系统应该会给你答安
2006-09-11 09:06
条评论...
欢迎登录知识人
会员名:
密 码:
记住我的登录状态
·新浪会员请直接登录
2011 Sina.com

参考资料

 

随机推荐