3D魔方的源程序
我自己设计的魔方程序[ 本帖最后由 魏森 于 2010-6-9 19:21 编辑 ] 今天魔方吧什么情况。。。。。。 这就叫好人啊。。。mf02 mf02 3D魔方是哪个程序?
程序说明
续接一楼 。。。我觉得D3D的方面应该没什么好说的,而且我做的也很乱,效率不高,就不提了,下面画个图,说明下魔方的操作方面的构思吧。
关于魔方根据鼠标的移动而移动,我是把当前选定的小块局部坐标投影到投影平面上,再根据鼠标的移动方向的单位矢量和坐标轴的夹角来判断旋转方向。旋转时,是将要旋转的面统一设置一个父物体,只旋转父物体,省去了对单个物体的操作。在释放鼠标按键时,再判断要旋转的角度,然后根据角度改变模型的材质和魔方的结构数据(用做判断是否完成),其实每个小方块的位置在每次旋转结束后都会回到原位置。
http://bbs.gameres.com/upload/sf_200697164949.jpg
程序中使用的外部文档结构
当时做这个程序时总觉得改变模型结构要重新编译很麻烦,就花了几天时间做了文件读取部分,因为以前接触的VRML,所以决定以它为例。做着做着才发现我以前的想法有些太简单了,后来总算凑和着做了出来,用了以前觉得没什么用的堆栈,才发现解释型的文件用堆栈做很简单。
举个例子:
object
{
#
盒子一
box
{
#尺寸 长 宽 高 以空格或逗号分隔
size{1 3 15}
#平移 x y z 轴分量 以空格或逗号分隔
translate {-2.0 0.0 0.0}
#旋转 x y z 轴弧度分量 以空格或逗号分隔
rotate {0.0 1.0 0.0}
#缩放 x y z 轴比例分量 1为不缩放 以空格或逗号分隔
scale {1.0 0.5 1.0}
#box名称
box name {wallmf1}
#环境色 r g b 分量
0到1浮点数 以空格或逗号分隔
ambient color {1.0 0.0 1.0}
#漫反射色 r g b 分量
0到1浮点数 以空格或逗号分隔
diffuse color {1.0 1.0 1.0}
}
#
盒子二
box
{
size{1 3 15}
translate {2.0 0.0 0.0}
rotate {0.0 1.0 0.0}
scale {1.0 1.0 1.0}
box name {wallmf1}
ambient color {1.0 0.0 1.0}
diffuse color {1.0 1.0 1.0}
}
}
我的方法是以"{" 和 "}" 为界定符,遇到"{" 就将缓冲内的字符做为操作符进行处理,然后把操作状态压入堆栈,清除缓冲。遇到"}"就将缓冲内的字符作为参数进行处理,根据堆栈内的状态,处理完后,将堆栈内的状态弹出一个,清除缓冲。
你可以将上面那一段存入任意文件名的文件(因为是文本,存入文本文件修改起来更简单),然后将文件拖到magicube主程序上执行,就可以显示根据文件构造的模型。关键字全为小写,暂时只支持box一种,"#" 后的一行为注释,不做处理。 自己给自己顶一个。。
页:
[1]