魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
查看: 398726|回复: 6
打印 上一主题 下一主题

3D魔方的源程序 [复制链接]

粉魔

瀦№篼

Rank: 5Rank: 5

积分
3763
帖子
3208
精华
1
UID
107238
性别

两年元老

跳转到指定楼层
1#
发表于 2010-6-8 09:41:05 |只看该作者 |倒序浏览
我自己设计的魔方程序

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

sf_200697152953.rar

334.42 KB, 下载次数: 117

╭︿︿︿╮   一种有关爱情的智力游戏,
   {/ o o /}         是一个可以变换拼装的正方体,
   ( (oo) )         由若干块小正方体组成,
   ︶ ︶︶        六个平面故事不同!

铜魔

QQ群打乱机器人

Rank: 8Rank: 8

积分
24444
帖子
678
精华
0
UID
99999
性别
保密

两年元老

2#
发表于 2010-6-8 22:31:00 |只看该作者
今天魔方吧什么情况。。。。。。

使用道具 举报

Rank: 2

积分
336
帖子
44
精华
0
UID
11084
性别
3#
发表于 2010-6-8 23:00:16 |只看该作者
这就叫好人啊。。。

使用道具 举报

铜魔

007

Rank: 8Rank: 8

积分
13803
帖子
13083
精华
2
UID
101677
性别

四年元老 八年元老 十年元老

4#
发表于 2010-6-9 00:02:35 |只看该作者
3D魔方是哪个程序?
魔方收藏群 123380874

使用道具 举报

粉魔

瀦№篼

Rank: 5Rank: 5

积分
3763
帖子
3208
精华
1
UID
107238
性别

两年元老

5#
发表于 2010-6-9 19:20:20 |只看该作者

程序说明

         续接一楼     。。。

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

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

╭︿︿︿╮   一种有关爱情的智力游戏,
   {/ o o /}         是一个可以变换拼装的正方体,
   ( (oo) )         由若干块小正方体组成,
   ︶ ︶︶        六个平面故事不同!

使用道具 举报

粉魔

瀦№篼

Rank: 5Rank: 5

积分
3763
帖子
3208
精华
1
UID
107238
性别

两年元老

6#
发表于 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一种,"#" 后的一行为注释,不做处理。
╭︿︿︿╮   一种有关爱情的智力游戏,
   {/ o o /}         是一个可以变换拼装的正方体,
   ( (oo) )         由若干块小正方体组成,
   ︶ ︶︶        六个平面故事不同!

使用道具 举报

粉魔

瀦№篼

Rank: 5Rank: 5

积分
3763
帖子
3208
精华
1
UID
107238
性别

两年元老

7#
发表于 2010-6-9 19:52:23 |只看该作者
自己给自己顶一个。。
╭︿︿︿╮   一种有关爱情的智力游戏,
   {/ o o /}         是一个可以变换拼装的正方体,
   ( (oo) )         由若干块小正方体组成,
   ︶ ︶︶        六个平面故事不同!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-5-1 23:35

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部