太极图形学中的面向对象编程
太极图形学编程过程
1.init 导入库和初始化太极
2.data 对数据进行处理,包括顶点,边,面的坐标和索引
3.computation 取出数据后对数据的运算
4.visualization 可视化 归部分
这种过程可以认为是面向过程的编程DOP
而面向对象的编程的是重点是你所声明的类是自带方法和内部的数据处理的
例如定义一个轮子
class Wheel:
def __init__(self,radius,width,rolling_fric): #data
self.radius = radius
self.width = width
self.rolling_fric = rolling_fric
def Roll(self): #method
pass
w1 = Wheel(5,1,0.1)
其中有数据和方法,这个方法是单独的对这个对象的应用,做的是内部的数据处理
最后再实例化出来轮子用来进行组装
优点就是继承性
太极的类是怎么样的
增加一个修饰符即可 @ti.data_oriented(ODOP)
这样做的意义在于此时我们就可以在类定义成员变量的时候定义场
同时在定义方法的时候可以使用计算核的修饰符了
例如
class pythonCelestialobject:
def __init__(self):
self.pos = ...
self.vel = ...
self.force = ...
@ti.data_oriented
class CelestialObject:
def __init(self):
self.pos = ti.Vector(2,ti.f32,shape = N)
self.vel = ti.Vector(2,ti.f32,shape = N)
self.force = ti.Vector(2,ti.f32,shape = N)
好处是可以提高效率
@ti.data_oriented
class CelestialObject:
def __init(self):
self.pos = ti.Vector(2,ti.f32,shape = N)
self.vel = ti.Vector(2,ti.f32,shape = N)
self.force = ti.Vector(2,ti.f32,shape = N)
@ti.kernel
def updata(self,h:ti.f32):
for i in self.vel:
self.vel[i] +=h*self.force[i]/self.Mass()
self.pos[i] +=h*self.vel[i]
这样做还有的好处就是写成不同的py文件,提高可读性
继承的关系以及多态和python中是一样的
使用注意
尽量使用ti.field()来组织变量