Skip to content

niushuqing123/final-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

太极图形课S1- final project

这是太极图形第一季的大作业

背景简介

做这个东西主要是因为对物理引擎比较感兴趣,正好学了sph,再加上自己以前写过的小玩意,就尝试把他们结合起来,可能物理上并不太正确,但是效果还可以接受。 对于sph部分,由于自己实现的时候遇到了许多的障碍,所以最终还是借用不少了助教sph的写法。 参考资料,百度随便看了看,找了一点点灵感,比如对于边界粒子设置权重,其他的都是摸索着写的

成功效果展示

论坛gif是随便搭的一个样例,实际操作的自由度还是比较高的

整体结构

结构嘛。。。 对于python我习惯于把代码都写在一个文件里了,简单描述一下,第一大部分是sph的计算,第二大部分是耦合进来的圆形,第三大部分是弹簧质点系统,之后有不少函数是对于粒子的增删改,最后一大部分是交互的部分,由于我希望把它做的完善一些,更像个沙盒,所以交互代码写了不少

-README.MD
-xixi.py

操作手册

p:暂停开关

鼠标左键按住:可以吸引一个被选择的圆形

ctrl+鼠标左键点击:添加一个不连接弹簧的圆形

shift+左键点击:选择一个圆形,之后可以拉动它,或者改变固定状态

鼠标右键点击:添加一个自动链接弹簧的圆形(链接距离,弹簧长度可调)

ctrl+鼠标右键点击:添加一个固定位置的,自动连接弹簧的圆形,

shift+C:之后生成的圆形半径增大(除了轮子上的圆)

ctrl+C:之后生成的圆形半径减小

shift+E:之后单独生成的圆形弹簧的长度增大

ctrl+E:之后单独生成的圆形弹簧的长度减小

shift+D:之后单独生成的圆形弹簧的探测距离增大

ctrl+D:之后单独生成的圆形弹簧的探测距离减小

F:切换被选择的圆的固定状态,可以将活动的圆形设置为固定,将固定的圆设置为可活动

H:在鼠标的位置,生成一个由圆组成的弹性体矩形,参数可调

shift+W:弹性矩形宽度增加

ctrl+W:弹性矩形宽度减小

shift+S:弹性矩形高度增加

ctrl+S:弹性矩形高度减小

M+鼠标右键:生成一个构造好的弹性轮子(参数可调)

N:让上一个生成的轮子开始转动

shift+X:轮子中,圆的链接距离增大,轮子架子变大

ctrl+X:轮子中,圆的链接距离减小,轮子架子变小

shift+0:轮子上的圆形,半径增大

ctrl+0:轮子上的圆形,半径减小

按住J+鼠标右键:在屏幕上点击两点,生成一个首尾被固定的圆形链子(参数可调)

shift+T:链子粒度增大

ctrl+T:链子粒度减小

shift+G:链子的弹簧半径比增大,等于硬度减小

ctrl+G:链子的弹簧半径比减小,等于硬度增大

R:清除所有的圆形,包括弹性物体

O:生成一个液体矩形(参数可调)

shift+W:液体矩形宽度增加

ctrl+W:液体矩形宽度减小

shift+S:液体矩形高度增加

ctrl+S:液体矩形高度减小

ctrl+1:打开或关闭一号水龙头

按住1+鼠标右键:在屏幕上点击两点,设置水龙头姿态和流速

ctrl+2:打开或关闭二号水龙头

按住2+鼠标右键:在屏幕上点击两点,设置水龙头姿态和流速

按住L+鼠标右键:在屏幕上点击两点,画出一条固定的边界,粒子构成的线

按住V+鼠标右键:将一定范围内作为边界的粒子变为流体,起到擦除画线的作用

shift+V:橡皮擦的半径增大

ctrl+V:橡皮擦的半径减小

B:所有作为边界的粒子变为流体

ctrl+B:上一个画出来的线变为流体

Y:切换之后添加的液体为重力向下,或者反重力的液体

Z:删除上一个圆形

ctrl+Z:开始清除流体粒子

shift+Z:删除上一个用边界粒子画出来的线

操作技巧: 对于第一次运行,可以查看main函数末尾,有一段被注释的画线代码,第一次玩可以解开注释看看弹簧是怎么构造的,但是弹簧一多,会严重拖累性能

Ctrl左键放一个圆形,按住shift左键去点击它,可以选中,之后鼠标左键可以吸引它,可以在一堆圆中选择想要的那个。

m加右键放一个轮子,轮子的中心点可以被选中,然后解除固定,也可以通过右键往轮子上加新的结构。

L加右键画边界,画得不好可以shift+z撤销

普通z可以撤销上一个圆

多次按z可以去除弹性矩形或者轮子

o键放水最好不要与其他东西重合,否则会崩出来很多高速粒子

水龙头不用关闭即可,可以重复更新姿态

对于橡皮擦功能的用法,可以画一条长线,然后用橡皮擦开孔,扣出想要的形状

运行方式

直接运行xixi.py即可

About

一个尝试固液耦合的沙盒玩具

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages