找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4360|回复: 13

【VB】VB编写的一个超简单的2D物理引擎

[复制链接]

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2014-4-16 16:44:43 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
我编写这个只是为了研究物理引擎的算法。先用VB写一个。等以后我会完成它的C语言版,提供一个漂亮的接口,供有需求者使用。
往后我要开发出3D的物理引擎。目前先用2D的做研究。
Bullet、PhysX、Havok都是C艹的,我写个C的出来雷一下大家。
20140416160744.png
图形方面,我让它自动保留运动轨迹。摩擦力方面的处理还是有点问题,但是总体上很成功了已经。
标题栏上显示的是角速度。
操作说明:【WASD】移动,【QE】转动,【空格】乱动,点住鼠标左键然后拖动是施加作用力,点住鼠标右键是设置物体的位置。
其它方面的说明:

1、常量:
Radius:半径,可以改。决定物体的大小。
Gravity:重力加速度。可以改。
Accel:键盘加速度。控制WASDQE这几个键的效果。
PI:圆周率。不要改。总之圆周率不要改。圆周率约等于3.1415926535897932384626433832795就行。
Density:密度。物体的质量是按照圆面积(通过半径求出)乘密度计算出来的。随你改。
MouseForce:鼠标拉力的倍数。影响鼠标点住左键拉动的拉力。太小的话,鼠标左键效果不明显。太大的话,鼠标左键太鬼畜。
BorderRestitution:窗体边框的弹力参数。取值范围是0.5到1,超过1的话物体每次撞到边上动能都会增加,很不科学。低于0.5的话,物体撞到边上虽然物体没有陷进边里面,但是还是很不科学。
FricFac:动摩擦因数。为0的话毫无摩擦力。为0.5比较正常。为1的话,就像弹力球打在橡胶地面一样。这个值过大就会让物理模拟变得很不稳定,各种不科学。

2、全局变量:
SW&、SH&:窗口的客户区域的宽度和高度。像素。
X!, Y!, A!, XV!, YV!, AV!:物体的中心(重心)的位置,物体的朝向,物体的线速度,角速度。
Mass!, Iner!:物体的质量,转动惯量。
ElaspedTime As Double:弹性时间。每一帧渲染所需时间。
Paused As Boolean:是否已暂停。在点住鼠标左键尝试给物体施加作用力的时候,暂停。Paused = True的时候一切都是静止的。
Dragging As Boolean:是否正在点住鼠标右键拖动。如果Dragging = True,那么物体的中心就被强制设置为(DragX, DragY)处,线速度强制归零。
MouX!, MouY!, DragX!, DragY!:鼠标X,鼠标Y,拖动X,拖动Y,主要用于计算点住鼠标左键给物体施加的作用力的大小和方向。
HitPoints(99) As HitPoint:物体用于碰撞判断的点。每个元素的值是一个二维向量,碰撞点相对于物体中心的相对坐标。
Key(255) As Boolean:键盘状态。按下按键以后,Key(按键值) = True

3、函数:
Draw:画物体。
GetAbsPos:根据相对坐标计算出绝对坐标。用于计算碰撞判断点在屏幕上的真实位置。
HitTest:判断某绝对坐标是否“撞到边上了”。是的话进行受力分析。
ApplyForceRel:从相对坐标处给物体施加作用力。
ApplyForce:从绝对坐标处给物体施加作用力。
GetPointAngVel:取得某绝对坐标处假定是物体上的点相对于物体中心的线速度。
GetPointRelAngVel:取得某相对坐标处假定是物体上的点相对于物体中心的线速度。
GetPointVel:取得某绝对坐标处假定是物体上的点的线速度。
GetPointRelVel:取得某相对坐标处假定是物体上的点的线速度。
ProcHit:碰撞的受力分析处理。

EXE下载:
SimPhyEXE.7z (6.05 KB, 下载次数: 18, 售价: 1 个宅币)
源码下载:
SimPhy.7z (9.04 KB, 下载次数: 13, 售价: 10 个宅币)

本帖被以下淘专辑推荐:

回复

使用道具 举报

55

主题

275

回帖

9352

积分

用户组: 管理员

UID
77
精华
16
威望
237 点
宅币
8217 个
贡献
251 次
宅之契约
0 份
在线时间
254 小时
注册时间
2014-2-22
发表于 2014-4-16 17:02:25 | 显示全部楼层
LZ你这么屌你家里人知道么!
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 2014-4-18 00:36:48 | 显示全部楼层
好有趣啊,不过不知道为什么有时碰壁时会突然快速旋转。(还有,你考虑E=mc^2了吗?
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2014-4-18 00:40:41 | 显示全部楼层
Jack 发表于 2014-4-17 16:36
好有趣啊,不过不知道为什么有时碰壁时会突然快速旋转。(还有,你考虑E=mc^2了吗?) ...

我没考虑E=mc²(那个也不重要吧?)
碰壁突然快速旋转是因为碰撞处理不科学。
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 2014-4-18 00:48:16 | 显示全部楼层
0xAA55 发表于 2014-4-18 00:40
我没考虑E=mc²(那个也不重要吧?)
碰壁突然快速旋转是因为碰撞处理不科学。 ...

其实我在夸你已经考虑的很周全了!能不能再弄个有弹性的,皮球和海绵的效果对比一定很有趣。哎,动能定理动量守恒什么的全忘了!
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2014-4-18 00:50:04 | 显示全部楼层
Jack 发表于 2014-4-17 16:48
其实我在夸你已经考虑的很周全了!能不能再弄个有弹性的,皮球和海绵的效果对比一定很有趣。哎,动能定理 ...

那是柔体引擎……
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 2014-4-18 00:53:14 | 显示全部楼层
0xAA55 发表于 2014-4-18 00:50
那是柔体引擎……

啊,那不属于物理引擎吗?是不是太复杂了。。
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2014-4-18 00:55:17 | 显示全部楼层
Jack 发表于 2014-4-17 16:53
啊,那不属于物理引擎吗?是不是太复杂了。。

是属于物理引擎。。。只是不知道2D的柔体引擎是个什么心态。。。
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 2014-4-18 00:58:00 | 显示全部楼层
0xAA55 发表于 2014-4-18 00:55
是属于物理引擎。。。只是不知道2D的柔体引擎是个什么心态。。。

玩的心态。。。
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2014-4-18 02:08:18 | 显示全部楼层
Jack 发表于 2014-4-17 16:58
玩的心态。。。

交给你了。其实超简单的。
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 2014-4-18 11:42:56 | 显示全部楼层
0xAA55 发表于 2014-4-18 02:08
交给你了。其实超简单的。

可要加上物体形变就不简单了吧
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2014-4-18 15:27:26 | 显示全部楼层
Jack 发表于 2014-4-18 03:42
可要加上物体形变就不简单了吧

其实只是改变了计算模型而已。柔体的质点弹簧法。
回复 赞! 靠!

使用道具 举报

1

主题

159

回帖

624

积分

用户组: 大·技术宅

UID
7535
精华
0
威望
0 点
宅币
464 个
贡献
0 次
宅之契约
0 份
在线时间
71 小时
注册时间
2021-10-16
发表于 2022-5-10 16:34:49 | 显示全部楼层

感谢楼主分享~~~
回复 赞! 靠!

使用道具 举报

0

主题

20

回帖

45

积分

用户组: 初·技术宅

UID
6382
精华
0
威望
2 点
宅币
22 个
贡献
0 次
宅之契约
0 份
在线时间
21 小时
注册时间
2020-11-9
发表于 2023-3-8 17:04:18 | 显示全部楼层
感谢楼主分享~~~
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-20 10:10 , Processed in 0.053624 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表