magicCube

所属分类:DirextX编程
开发工具:Visual C++
文件大小:19KB
下载次数:19
上传日期:2010-10-27 21:21:16
上 传 者q125520208
说明:  自己写的一个魔方,用DX9写的.实现旋转,重置,返回上一步等功能
(Write a Rubik' s cube, written with DX9. Realizing rotation, reset, go back and so)

文件列表:
magicCube.sln (893, 2010-08-21)
使用说明.txt (499, 2010-10-10)
magicCube\camera.cpp (1975, 2010-10-09)
magicCube\camera.h (459, 2010-10-09)
magicCube\cube.cpp (2602, 2010-10-08)
magicCube\cube.h (914, 2010-10-17)
magicCube\cube.X (11126, 2010-08-02)
magicCube\cubes.cpp (12280, 2010-10-10)
magicCube\cubes.h (1687, 2010-10-14)
magicCube\d3dUtility.cpp (9586, 2010-10-06)
magicCube\d3dUtility.h (4246, 2010-08-09)
magicCube\magicCube.vcproj (4252, 2010-10-23)
magicCube\magicCube.vcproj.CHENFEI-PC.fei.user (1417, 2010-08-27)
magicCube\magicCube.vcproj.fei-PC.fei.user (1409, 2010-10-23)
magicCube\main.cpp (2229, 2010-10-14)
magicCube (0, 2010-10-27)

两个类: Cube:单个方块的类 公有方法: void draw(); //方块的绘制 void setMatrix(D3DXMATRIX* matrix); //设置方块的变换矩阵 void changeMatrix(D3DMATRIX* matrix); //改变方块的变换矩阵 void rollMatrix(D3DMATRIX* matrix); //对方块进行旋转 void setPickState(bool picked); //设置方块的拾取状态 bool getPickState(); //得到方块的拾取状态 D3DXVECTOR3 getPosition(); //得到方块的位置 D3DXMATRIX getMatrix(); //得到方块的变换矩阵 私有变量: IDirect3DDevice9* _device; ID3DXMesh* _mesh;//X网格 std::vector _textures;//纹理 std::vector _mtrls;//方块材质 D3DXMATRIX _matrix;//方块的变换矩阵 D3DXMATRIX _rollMatrix;//方块的旋转矩阵 bool _picked;//方块的拾取状态 Cubes:组织和管理27个方块使之成为一个魔方 公有方法 void draw( D3DXVECTOR3 camPosition, float timeDelta);//绘制所有方块 void reset();//重设方块矩阵 void back();//返回上一步 void pick( UINT msg, LPARAM lParam );//拾取 私有方法 void calcPickingRay( int x, int y );//计算拾取射线 void transformRay( D3DXMATRIX* T );//对射线进行与摄像机逆矩阵变换 bool raySphereIntTest( D3DXVECTOR3 origin );//拾取测试 void pickAfterWork();//对拾取进行后期处理,使只拾取到一个方块 void exchangeCubeMatrix(int i, int j);//交换两个方块的变换矩阵 void getRollState(int &kind, int &level, int &direction);//通过拾取到的方块计算取得旋转数据 void updateCubeMatrix( float timeDelta, int kind, int level, int direction );//对面块进行旋转变换. kind和level分别代表三种面块(上0,前1,左2)和其中的三个面块(0,1,2)。direction(1或-1),正转或逆转 私有变量 IDirect3DDevice9* _pDevice; std::vector _cube;//魔方各方块 std::vector _rollHistory;//旋转记录,用于返回上一步.用栈 Ray _ray;//拾取射线 D3DXVECTOR3 _vecRayOrigin;//拾取射线原点 int _iFaceDate[3][3][9];//面块数据 UINT _iFirstPickedCube;//第一次被拾取到的方块 UINT _iSecondPickedCube;//第二次被拾取到的方块 基本操作: 按键: 1.按住鼠标右键可拖动魔方 2.点击鼠标左键对魔方的方块进行拾取,通过拾取到的两个方块到魔方进行操作 3.按鼠标中键键打乱魔方 4.按'F8'重置魔方,使其恢复原来状态 5.按'B'返回上一步 方法: 1.若按住鼠标进行拖动时鼠标离开窗口则失效,在窗口外松开右键会持续保持拖动状态,点击一下右键即可正常 2.点击的两个方块必须是相邻的,否则将重新拾取 3.若两次点击同一个方块,则第二次为取消拾取 4.点击空白区可取消原来的拾取 5.打乱后一直按'B'可返回到重置状态 6.本魔方的拾取有一定误差 有任何疑问可以地e_mail给我:chenfei627@qq.com

近期下载者

相关文件


收藏者