魔方吧·中文魔方俱乐部

标题: 3D魔方的源程序 [打印本页]

作者: 魏森    时间: 2010-6-8 09:41:05     标题: 3D魔方的源程序

我自己设计的魔方程序

[ 本帖最后由 魏森 于 2010-6-9 19:21 编辑 ]

附件: sf_200697152953.rar (2010-6-8 09:41:05, 334.42 KB) / 下载次数 117
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MTAwODIwfGExNDNhMzA2fDE3MjY3MTE5NDl8MHww
作者: 小明的马甲    时间: 2010-6-8 22:31:00

今天魔方吧什么情况。。。。。。
作者: chicksong    时间: 2010-6-8 23:00:16

这就叫好人啊。。。
作者: Paracel_007    时间: 2010-6-9 00:02:35

3D魔方是哪个程序?
作者: 魏森    时间: 2010-6-9 19:20:20     标题: 程序说明

         续接一楼     。。。

我觉得D3D的方面应该没什么好说的,而且我做的也很乱,效率不高,就不提了,下面画个图,说明下魔方的操作方面的构思吧。
关于魔方根据鼠标的移动而移动,我是把当前选定的小块局部坐标投影到投影平面上,再根据鼠标的移动方向的单位矢量和坐标轴的夹角来判断旋转方向。旋转时,是将要旋转的面统一设置一个父物体,只旋转父物体,省去了对单个物体的操作。在释放鼠标按键时,再判断要旋转的角度,然后根据角度改变模型的材质和魔方的结构数据(用做判断是否完成),其实每个小方块的位置在每次旋转结束后都会回到原位置。

http://bbs.gameres.com/upload/sf_200697164949.jpg


作者: 魏森    时间: 2010-6-9 19:22:22     标题: 程序中使用的外部文档结构

当时做这个程序时总觉得改变模型结构要重新编译很麻烦,就花了几天时间做了文件读取部分,因为以前接触的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一种,"#" 后的一行为注释,不做处理。
作者: 魏森    时间: 2010-6-9 19:52:23

自己给自己顶一个。。




欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) Powered by Discuz! X2