大佬教程收集整理的这篇文章主要介绍了c – 如何将鼠标移动转换为相机平移,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我将鼠标移动到屏幕上时,我必须在XY中查看我的视图. LMB紧迫.
我想我需要将鼠标移动中的delta添加到我的VIEW空间,这样它相对于我的视图在X和Y中平移,而不是世界X和Y.
但是,对于这个新手,我不知道如何将我的VIEW坐标转换回WORLD坐标.
我希望我遵守所有的格式规则,因为我没有在这里发布足以完全记住它们的所有内容.
任何帮助,将不胜感激.下面是我的代码片段.也许还有更好的方法.
if ( m_Input->RMBPressed() == true && m_Input->LMBPressed() == true ) // Pan View { if ( curX != mouseX || curY != mouseY ) { //Get Target Coordinates in View Space D3DXVECTOR3 targetView = (D3DXVECTOR3 ( mView(2,0),mView(2,1),2) ); //Add mouse XY delta vector to target View Coordinates D3DXVECTOR3 delta ( (float)curX-(float)mouseX,(float)curY-(float)mouseY,zdelta ); targetView += delta; //Convert BACk to World Coordinates } }
我正在尝试一种不同的方法,我认为这是正确的方法,但它似乎仍然没有正常工作.
当鼠标移动时,我从屏幕上得到X和Y的增量,并将它们存储在变量“xdelta”和“ydelta”中.
然后我创建一个转换矩阵
D3DXMATRIX mTrans;
然后我填充矩阵中的值
// Rotation mTrans(0,0) = delta.x; mTrans(1,1) = delta.y; // Translation mTrans(0,3) = delta.x; mTrans(1,3) = delta.y;
现在要获得相应的View坐标,我想我应该将它乘以View矩阵,我称之为mView.
@H_821_17@mTrans= mTrans*mView;
现在将这些翻译的值添加到我的当前目标X和Y,它由变量“target_x”和“target_y”确定,它应该相对于我的视图坐标X和Y(即与我当前视图正交)移动我的目标矢量.
target_x += mTrans(0,3); target_y += mTrans(1,3);
但事实并非如此.它沿着世界X和Y轴移动我的目标,而不是我的视图X和Y轴.
更多的SNIPPETS
我确实使用了D3DXMatrixLookAtLH函数,但我正在尝试根据我的鼠标移动来计算目标位置的变化,以获得新的目标来输入该函数.我在一些代码片段中添加了:
if ( m_Input->RMBPressed() == true && m_Input->LMBPressed() == true ) // Pan View { if ( curX != mouseX || curY != mouseY ) { //Get mouse XY delta vector D3DXVECTOR3 delta ( (float)curX-(float)mouseX,zdelta ); //Create Transformation Matrix D3DXMATRIX mTemp; // Rotation mTemp (0,0) = delta.x; mTemp (1,1) = delta.y; mTemp (2,2) = delta.z; // Translation mTemp (0,3) = delta.x; mTemp (1,3) = delta.y; mTemp (2,3) = delta.z; //Convert to View Coordinates mTemp = mTem@L_384_14@mView; xdelta += mTemp(0,3); ydelta += mTemp(1,3); // Convert Spherical to Cartesian coordinates: mPhi measured from +y // and mTheta measured counterclockwise from z. float height = mRadius * cosf(mPhi); float sideRadius = mRadius * sinf(mPhi); float x = xdelta + sideRadius * cosf(mTheta); float z = zdelta + sideRadius * sinf(mTheta); float y = ydelta + height; // Build the view matrix. D3DXVECTOR3 pos(x,y,z); D3DXVECTOR3 target(xdelta,ydelta,zdelta); D3DXVECTOR3 up(0.0f,1.0f,0.0f); // Y Axis is up. Looking down Z. D3DXMatrixLookAtLH(&mView,&pos,&target,&up);
首先,感谢您提供所有信息.它帮助我慢慢了解DirectX矩阵.
我在下面的逻辑中是否正确?
假设我的鼠标在X屏幕上变化为5.0,在Y屏幕上变为5.0.那是我的三角洲. Z总是0.0.
我可以找到如下的视图坐标.
D3DXVECTOR3 up(0.0f,0.0f); // Y Axis is up. Looking down Z. D3DXVECTOR3 delta ( 5.0f,5.0f,0.0f ); D3DXVECTOR3 origin ( 0.0f. 0.0f,0.0f ); D3DMATRIX mTemp; D3DXMatrixIdentity (&mTemp); D3DXMatrixLookAtLH (&mTemp,&delta,&origin,&up );
我现在应该在mTemp视图矩阵中存储XY delta的视图坐标?
如果是这样,最好的方法是,通过将XY delta视图坐标添加到mView XY坐标,然后转换回世界坐标,以获得实际的XY世界值,我必须将目标设置为?
以上是大佬教程为你收集整理的c – 如何将鼠标移动转换为相机平移全部内容,希望文章能够帮你解决c – 如何将鼠标移动转换为相机平移所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。