XHLin-gamer / RT_in_one_weekend_with_taichi

a naive ray tracer with taichi
6 stars 0 forks source link

代码建议 #1

Closed neozhaoliang closed 2 years ago

neozhaoliang commented 2 years ago
  1. 你的球面采样函数是错的,纬度角的范围应该是 [0, pi],所以会出现 banding 的问题。
  2. ray 这个类的构造函数是 python scope 的。可以改成 struct_class。
@ti.struct_class
class Ray:
    ...

不要在 Ray 内部做 normalize 了,放到外面做。

XHLin-gamer commented 2 years ago

谢谢issue. 1.那个球面采样函数是weekend里面写的,当时确实感觉是错的,回头改改 2.ray的struct_class的构造函数造成了很大的麻烦,不清楚如何在构造ray类的同时,自动调通构造函数。目前已经将ray类修改为struct_class尝试了用@ti.func修饰构造函数,但是无法调用。

XHLin-gamer commented 2 years ago

已经放到外部了,感谢

neozhaoliang commented 2 years ago

你试试这样:

import taichi as ti
from taichi.math import vec3
ti.init()

vec3_t = ti.types.vector(3, float)

@ti.struct_class
class Ray:

    ro: vec3_t
    rd: vec3_t

    @ti.func
    def at(self, t):
        return self.ro + self.rd * t

@ti.kernel
def main():
    ray = Ray(ro = vec3(0), rd = vec3(1))
    print(ray.ro, ray.rd)

main()
XHLin-gamer commented 2 years ago

这个taichi.math自带的vec3雀食方便,每次创建vector的时候,按小数点总是误触逗号,这下省事了。谢谢茄子