作业1
作业描述
以N-Body和Galaxy为基础,使用metaprogramming和OOP练习实现了一套代码实现一个简单的2D or 3D N-Body系统,并加入了对某些变量和对GGUI中camera的探索控制窗。
效果展示
2D N-Body System
3D N-Body System
快捷键说明:
- SPACE:开始/暂停运行
- r:初始化重置所有星体
- c:初始化重置3D系统中的camera
- ESC:退出
问题
- Taichi kernel中,若一个field涉及不同维度下的不同长度,无法直接使用if-else通过判断分支使其长度不同。比如
if dim == 2: vel=[0, 0]; elif dim == 3: vel=[0,0,0];
就会报错,在程序中我使用了赋值过程内的if-else解决,但是感觉不是很灵活和漂亮。这是由于kernel编译时,会同时检查所有分支中变量的长度,会出现不一致的情况。这个问题或许需要等到Taichi支持在kernel内部临时定义field才能解决? - 3D camera中,track_user_inputs方法改变的只是对当前scene渲染到canvas的图像的camera,并非改变camera的pos和lookat值?应如何获取旋转后camera的pos、lookat等数值呢?以及程序中右键拖拽导致的图案变形比较严重,这种变形应该如何改善?
代码链接
请大家的作业使用我们提供的Github代码模板,使用模板会有惊喜哟!