社区
游戏开发
帖子详情
鼠标拾取
yydaoxwj
2009-09-03 12:23:53
在游戏开场中,放四个mesh在x,z的四个方向,摄相机不断旋转
我想用鼠标来拾取其中一个mesh
但实现不了
高手指导下 <小弟用dx>
...全文
165
5
打赏
收藏
鼠标拾取
在游戏开场中,放四个mesh在x,z的四个方向,摄相机不断旋转 我想用鼠标来拾取其中一个mesh 但实现不了 高手指导下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gameice
2009-09-04
打赏
举报
回复
以上是对动态物体拾取的参考 比如 汽车 人物 等等
静态物体考虑的要少些
gameice
2009-09-04
打赏
举报
回复
if (m_MouseState.rgbButtons[0])
{
//获取客户区的坐标
POINT Pt={0,0};
GetCursorPos(&Pt);
ScreenToClient(m_hWnd,&Pt);
//计算射线
D3DVIEWPORT9 vp;
m_pDevice->GetViewport(&vp);
D3DXMATRIX proj;
m_pDevice->GetTransform(D3DTS_PROJECTION, &proj);
float px = ((( 2.0f*Pt.x) / vp.Width) - 1.0f) / proj(0, 0);
float py = (((-2.0f*Pt.y) / vp.Height) + 1.0f) / proj(1, 1);
Ray ray;
ray._origin = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//这个0,0,0是视图空间下的,也就是世界空间下摄像机的位置
ray._direction = D3DXVECTOR3(px, py, 1.0f);
D3DXMATRIX matView,matInvView;
m_pDevice->GetTransform(D3DTS_VIEW,&matView);
D3DXMatrixInverse(&matInvView,0,&matView);
// transform the ray's origin, w = 1.
D3DXVec3TransformCoord(&ray._origin,&ray._origin,&matInvView);
// transform the ray's direction, w = 0.
D3DXVec3TransformNormal(&ray._direction,&ray._direction,&matInvView);
// normalize the direction
D3DXVec3Normalize(&ray._direction, &ray._direction);
BOOL hit;
DWORD index;
float tu,tv;
D3DXIntersect(m_pGround->GetMesh(),&ray._origin,&ray._direction,&hit,&index,&tu,&tv,NULL,NULL,NULL);
if(hit)
{
m_pGround->GetTerrainVertex(&vMouseCross,index,tu,tv);
m_bHeroMove=TRUE;
m_fCoeffient=0.0f;
}
}
//以下代码写在物体绘制之前
if(m_bHeroMove)
{
D3DXVECTOR3 vStartPos= m_pHero->m_vPos;//每次差值时候的起始位置,也就是上一次物体的位置
//求得开始点到结束点两点间的距离
float fTemp = sqrtf((vMouseCross.x-vStartPos.x)*(vMouseCross.x-vStartPos.x)
+(vMouseCross.z-vStartPos.z)*(vMouseCross.z-vStartPos.z));
if(m_fCoeffient >= 1.0)//这个1.0不能改变,改变之后拾取就不准确了
{
m_bHeroMove=FALSE;
m_fCoeffient=0.0f;
}
m_fCoeffient += 0.5f/fTemp;//这里的0.5能够控制球移动的快慢值越大,移动的越快
//根据两点间的距离算取移动的速度
D3DXVec3Lerp(&m_pHero->m_vPos,&vStartPos,&vMouseCross,m_fCoeffient);
m_pHero->SetAnimationName("walk");//让物体播放“走动”动作的函数
}
m_pHero->Render(fElapsedTime,m_pHero->m_vPos,1.0f,m_pHero->Rota);//在Render中绘制物体的那个函数
//在game.h中还需要定义如下的变量:
D3DXVECTOR3 vMouseCross;//相交点坐标
float m_fCoeffient;//差值参数
bool m_bHeroMove;//物体是否移动
//如果物体要考虑旋转问题:
float facetoface()
{
float angle=0.0f;
angle=atan((x2-x1)/(z2-z1));
if(x2-x1<=0.0f&&z2-z1<0.0f)
{
angle+=0.0f;
}
if(z2-z1>=0.0f&&x2-x1<0.0f)
{
angle += D3DX_PI;
}
if(z2-z1>0.0f&&x2-x1>=0.0f)
{
angle += D3DX_PI;
}
if(x2-x1>0.0f&&z2-z1<=0.0f)
{
angle += 2*(D3DX_PI);
}
return angle;
}
张赐
2009-09-03
打赏
举报
回复
这个例子就是拾取mesh的
张赐
2009-09-03
打赏
举报
回复
dx
picking的例子不是很多吗,dx自带的sdk就有一个
xingzhe2001
2009-09-03
打赏
举报
回复
http://topic.csdn.net/u/20090818/04/b64adb49-e5e9-438f-ae15-ae76e05db7a4.html
看这个帖子,有关d3d拾取的讨论。
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
鼠标
拾取
游戏引擎-场景编辑器
1.采用Qt作为界面库,通过该项目可以学习到Qt跨平台界面库...实现复杂的摄像机操作,可以旋转,缩放以及通过
鼠标
移动整个场景. 6.实现Ray方式
拾取
场景中的节点,模型. 7.实现模型的配置以及显示. 8.实现包围盒的计算和显示.
Unity3D
鼠标
拾取
物体2
Unity3D
鼠标
拾取
物体 Posted on 2013年03月26日 by U3d / Unity3D脚本/插件/被围观 352 次 Unity3D
鼠标
拾取
物
OPENGL
鼠标
拾取
与选择
OPENGL
鼠标
拾取
与选择
游戏开发
8,304
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章