3D中如何 使用一点旋转。就是第3人称视角。 如题。我想知道让摄像机跟据某一点的Z轴旋转。请问下有什么方法?可知道camera的坐标以及camera的四元数,,,就是camera根据x,y,z轴旋转的角度。我设的是camera根据x轴旋转15度,z轴旋转45度。然后camera会看某一点。我想camera对着这个点旋转的功能~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是想做个第3人称视角。跟3d mmorpg一样的camera.只不过焦点不一定只是人。有可能是草了。花了等等。 具体给你看段代码够具体了吧以下代码是基于OpenGL实现类似Maya的旋转场景的关键代码void CAnimationView::RotateScene(float fOffsetX, float fOffsetY){ float fVectorX, fVectorZ; CVector vtrSightLine; //设置视线矢量 vtrSightLine.SetVector(m_glfTargetPosX, m_glfTargetPosY, m_glfTargetPosZ, m_glfViewPosX, m_glfViewPosY, m_glfViewPosZ); //旋转视线矢量及参考坐标轴 vtrSightLine.Rotate(-m_glfCamDirectY*fOffsetX/360, CVector(0, 1, 0)); m_vtrCamHor.Rotate(-m_glfCamDirectY*fOffsetX/360, CVector(0, 1, 0)); //保存视线矢量与x轴,z轴夹角 fVectorX = vtrSightLine.m_fVectorX; fVectorZ = vtrSightLine.m_fVectorZ; vtrSightLine.Rotate(-fOffsetY/360, m_vtrCamHor); //重置视点 m_glfViewPosX = m_glfTargetPosX+vtrSightLine.m_fVectorX; m_glfViewPosY = m_glfTargetPosY+vtrSightLine.m_fVectorY; m_glfViewPosZ = m_glfTargetPosZ+vtrSightLine.m_fVectorZ; //修正相机指向 if(fVectorX*vtrSightLine.m_fVectorX<0 || fVectorZ*vtrSightLine.m_fVectorZ<0) m_glfCamDirectY = -m_glfCamDirectY; //刷新窗口 Invalidate();} dx或者opengl中都有具体的函数可以实现楼主的想法,随你怎么旋转,只要保证摄像机的视角方向一直对着改点就可以了 MFC开发ActiveX控件的问题 用一张大图片做背景, 上面添加若干个小图片 请问谁知道vc 中的string table的作用吗? 动态加载与静态加载有区别??? 哪个晓得用户输入数据之后得出一张二维表格让用户填,是怎么弄得 两个简单的小问题! 来拿分啊,简单! 在VC中如何使用静态库(lib)? 我用vc + access 做了一个程序,把信息显示在listview中的listctrl中,现在怎么把这些记录打印出来 急死人了!!!救命哪!!!!!! 大家使用界面库GuiLib的时候,他原本的UNICODE大家怎么处理的 请问如何在界面上指定位置单击触发事件(像单击按钮一样)
给你看段代码够具体了吧
以下代码是基于OpenGL实现类似Maya的旋转场景的关键代码
void CAnimationView::RotateScene(float fOffsetX, float fOffsetY)
{
float fVectorX, fVectorZ;
CVector vtrSightLine; //设置视线矢量
vtrSightLine.SetVector(m_glfTargetPosX, m_glfTargetPosY, m_glfTargetPosZ, m_glfViewPosX, m_glfViewPosY, m_glfViewPosZ); //旋转视线矢量及参考坐标轴
vtrSightLine.Rotate(-m_glfCamDirectY*fOffsetX/360, CVector(0, 1, 0));
m_vtrCamHor.Rotate(-m_glfCamDirectY*fOffsetX/360, CVector(0, 1, 0));
//保存视线矢量与x轴,z轴夹角
fVectorX = vtrSightLine.m_fVectorX;
fVectorZ = vtrSightLine.m_fVectorZ;
vtrSightLine.Rotate(-fOffsetY/360, m_vtrCamHor); //重置视点
m_glfViewPosX = m_glfTargetPosX+vtrSightLine.m_fVectorX;
m_glfViewPosY = m_glfTargetPosY+vtrSightLine.m_fVectorY;
m_glfViewPosZ = m_glfTargetPosZ+vtrSightLine.m_fVectorZ; //修正相机指向
if(fVectorX*vtrSightLine.m_fVectorX<0 || fVectorZ*vtrSightLine.m_fVectorZ<0)
m_glfCamDirectY = -m_glfCamDirectY; //刷新窗口
Invalidate();
}