Ggui的显示区域可以扩大或改变吗?

大家好。我在使用ggui画图时,发现显示区域只能是[0,1]*[0,1],在之外的图像都显示不出来。例如下面这个代码想画出一个矩形:

import taichi as ti
import numpy as np

ti.init(arch=ti.cpu)

point = ti.Vector.field(3,dtype=ti.f32,shape=4)
point[0] = ti.Vector([-0.2,-0.3,0.0])
point[1] = ti.Vector([0.2,-0.3,0.0])
point[2] = ti.Vector([0.2,0.3,0.0])
point[3] = ti.Vector([-0.2,0.3,0.0])

edge = ti.Vector.field(2,dtype=ti.i32,shape=4)
edge[0] = ti.Vector([0,1])
edge[1] = ti.Vector([1,2])
edge[2] = ti.Vector([2,3])
edge[3] = ti.Vector([3,0])

window = ti.ui.Window('square',(800,600))
while window.running:
    canvas = window.get_canvas()
    canvas.circles(point,radius=0.01,color = (1.0,0.0,0.0))
    canvas.lines(point,0.01,edge,color = (1.0,1.0,0.0))
    window.show()

最后显示出的图像是这样:


只显示出了在[0,1]*[0,1]区域的部分。请问有没有什么办法可以改变显示范围,让这个矩形正常显示出来呢?

Hi @shiki , 欢迎来到Taichi论坛。

Taichi提供了两个GUI系统,一个是跨平台的GUI,一个是在GPU上的GGUI。所以你如果用GGUI,可以将 arch设置成 ti.gpu

GGUI中canvas(画布),顾名思义就是一个2D的平面。如果想要画三维的内容:particls, mesh等可以参考:A New UI system: GGUI | Taichi Docs

对于canvas,我们一般就是根据一般的图形学渲染管线中来做的,最后渲染的坐标会归一化到屏幕坐标系,也就是[0,1] * [0,1],如下图,Reference:here。所以在canvas上画东西,需要手动做Local space → Screen Space的操作。当然,你其实可以用画三维内容的方式来画图,不过需要设置相机位置(决定View Space)等等