import taichi as ti
import math
ti.init(arch=ti.gpu)#
fps=60.0
dt=1.0/fps#首先设置一个窗口
res = (1920,1280)
pixels = ti.Vector.field(n=3,dtype=float,shape=res)#设置像素的参数#world space varibles
grid_size = 100
z_near,z_far = 200,3200
N=(res[0]//grid_size,res[1]//grid_size,(z_far-z_near)//grid_size)
pos=ti.Vector.field(n=3,dtype=float,shape=N)
color=ti.Vector.field(n=3,dtype=float,shape=N)
vel=ti.Vector.field(n=3,dtype=float,shape=())#camera related varibles
fov=120
tan_half_fov=math.tan((fov/360)*math.pi)@ti.func
def rand3():return ti.Vector([ti.random(),ti.random(),ti.random()])@ti.func
def spawn(I):pos[I]=(I+rand3())*grid_sizecolor[I]=rand3()+ti.Vector([1.0,2.0,1.0])#init the stars
@ti.kernel
def init():for i,j,k in pos:I=ti.Vector([i,j,k])spawn(I)#step
@ti.kernel
def step():for I in ti.grouped(pos):pos[I] += vel[None] * dtif pos[I].z < z_near:pos[I].z+=z_far-z_near#projections
@ti.func
def project(pos_3d):center=ti.Vector(res)/2w=tan_half_fov*pos_3d.zrel_pos=(ti.Vector([pos_3d.x,pos_3d.y])-center)/wscreen_space_pos=rel_pos*res[1]+centerreturn screen_space_pos#画
@ti.func
def draw_particle(c,rad,color):x_range=(ti.max(int(c.x-rad-1),0)),ti.min(int(c.x+rad+1),res[0])#使得遍历元素少了y_range=(ti.max(int(c.y-rad-1),0)),ti.min(int(c.y+rad+1),res[1])for I in ti.grouped(ti.ndrange(x_range,y_range)):dist=(I-c).norm()if dist<rad:pixels[I]=color@ti.func
def draw_line(p1,p2,rad,color):x_range=(ti.max(int(ti.min(p1.x,p2.x)-rad-1),0),ti.min(int(ti.max(p1.x,p2.x)+rad+1),res[0]))y_range=(ti.max(int(ti.min(p1.y,p2.y)-rad-1),0),ti.min(int(ti.max(p1.y,p2.y)+rad+1),res[1]))for I in ti.grouped(ti.ndrange(x_range,y_range)):dist=ti.min((I-p1).norm(),(I-p2).norm())p1I=I-p1p1p2_normalized=(p2-p1).normalized()p=p1+p1I.dot(p1p2_normalized)*p1p2_normalizeddist2=(I-p).norm()if 0< p1I.dot(p1p2_normalized)<(p2-p1).norm():dist=dist2if dist<rad:pixels[I]=color@ti.kernel
def paint():for i ,j in pixels:pixels[i,j]=ti.Vector([0.0,0.0,0.0])for I in ti.grouped(pos):p_current=pos[I]p_previous=pos[I]-vel[None]*dtrad =2.0*(1.0-pos[I].z/z_far)**2col=color[I]*(1.0-pos[I].z/z_far)**0.5col *=1.0-(2*((pos[I].x/res[0]-0.5)**2+(pos[I].y/res[1]-0.5)**2))**0.2# draw_particle(project(pos[I]),rad,color[I])draw_line(project(p_current),project(p_previous),rad,col)#main
init()
gui = ti.GUI("happy 1025",res,fast_gui = True)
t=0.0
while gui.running:t+=dtvel[None].z=-1000*(1+math.cos(t*math.pi))step()paint()gui.set_image(pixels)gui.show()

用Taichi(python)实现星际穿越特效相关推荐

  1. 星际穿越-网易python(简单数学公式)

    题目描述 航天飞行器是一项复杂而又精密的仪器,飞行器的损耗主要集中在发射和降落的过程,科学家根据实验数据估计,如果在发射过程中,产生了 x 程度的损耗,那么在降落的过程中就会产生 x2 程度的损耗,如 ...

  2. Python爬虫-爬取电影《星际穿越》评论并提取关键词

    我的个人博客:https://jmbaozi.top/ 这次选择了我最喜欢的电影<星际穿越>的短评,共爬取了500条评论,并且用jieba分词提取了100个关键词.程序文件点我查看 100 ...

  3. 【转】恶评《星际穿越》

    恶评<星际穿越> <img src="http://www.yinwang.org/images/interstellar.png" height=400> ...

  4. 《星际穿越》:一手烧脑一手催泪

    <星际穿越>:一手烧脑一手催泪 http://www.chinadaily.com.cn/hqcj/xfly/2014-11-14/content_12714364.html [提要]   ...

  5. 星际穿越|跟天文学家共度一天

    导言:天文学家绝对是现存最炫酷神秘的职业之一,他们是什么样的一群人?他们的工作是什么样的?他们在工作之外还会做什么?5月30日,小编带着对这群人深深的好奇心深入了地处河北承德兴隆的中科院国家天文台兴隆 ...

  6. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 27  Solved: 11 [Submit][Statu ...

  7. 《星际穿越》初解析——一部空前绝后的史诗科学巨作

    http://movie.douban.com/review/7188759/ 星际穿越通篇没有一句多余的对白,也没有多余的一个镜头,169分钟超大信息量填满整部电影.这里我打算从两个方面去分析这部电 ...

  8. 星际穿越+降临+明日边缘?星际拓荒重新定义星际探索题材游戏

    丨重新定义星际探索题材游戏 当我们说起"星际探索游戏", 我们会想起精英:危险,会想起坎巴拉太空计划,会想起那个灾难开场但终于修好的无人深空,还有那个耗资几亿还没弄完的星际公民-- ...

  9. SpaceVR真的要上天,让你星际穿越不是梦

    世界首枚VR人造卫星明年将升空,在VR中体验星际穿越指日可待. 用VR体验游戏已经不算什么了,对于SpaceVR来说,他们的征途是浩瀚天空中的星辰大海.据了解,SpaceVR已经和NanoRacks( ...

  10. Python实现图像八大特效(毛玻璃、浮雕、油画、马赛克等)

    Python实现图像八大特效:毛玻璃.浮雕.油画.马赛克.素描.怀旧.流年.卡通.可自由切换调用.程序运行截图(毛玻璃特效): ![在这里插入图片描述](https://img-blog.csdnim ...

最新文章

  1. python用途与前景-Python 未来发展前景怎么样?
  2. java将数据封装为树结构_JAVA代码实现多级树结构封装对象
  3. 一文读懂Java 11的ZGC为何如此高效
  4. 【BUG解决】使用body-parser失效的实例解决
  5. linux中export与source的作用
  6. jQuery学习笔记--目录
  7. 原创 通过PEB获得进程路径 (附完整工程)
  8. discuz精仿OPPO社区主题模板
  9. ROS : 修改ROS源代码(overlaying package)
  10. 【转】linux shell 逻辑运算符、逻辑表达式详解
  11. mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作...
  12. 【语音增强】基于matlab iir带阻滤波器语音增强【含Matlab源码 613期】
  13. (转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
  14. 计算机科学类单独分区,2020年中科院JCR分区升级版和基础版区别大解析
  15. python菜鸟教程 | 素数
  16. 使用Keepalived实现负载均衡
  17. R 回归 虚拟变量na_【R语言进阶】Logistic回归及哑变量设置
  18. termux python 打开摄像头_python+opencv 电脑调用手机的摄像头
  19. Linux eBPF内核源码sample/bpf全网最细解析(一)
  20. python 获取股票的交易数据

热门文章

  1. 相差天数时分秒_PHP 小方法之 计算两个时间戳之间相差的日时分秒
  2. ERNIE-Enhanced Language Representation with Informative Entities 阅读笔记
  3. 《微积分:一元函数微分学》——高阶导数
  4. e1载波的数据速率是_Wi-Fi 6(802.11ax)解析25:DCM双载波调制技术
  5. iOS-百度地图之——POI检索失败BMK_SEARCH_PERMISSION_UNFINISHED
  6. Android默认时区大全
  7. linux用户和组的权限管理
  8. python高阶知识之——列表推导式(63)
  9. 【异常检测】【SPADE】论文简单梳理与代码实现
  10. [No0000134]C#中的委托,匿名方法和Lambda表达式