魔方吧·中文魔方俱乐部
标题:
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