如何使用Pi3d绘制数组
how to use Pi3d to draw an array
我有一个包含 x、y 和 z 值的数组,如下所示:
-130.000000 735.000000 1.733333
-128.000000 735.000000 1.706667
-126.000000 735.000000 1.680000
-124.000000 735.000000 1.653333
-130.000000 736.000000 1.733333
-128.000000 736.000000 1.706667
-126.000000 736.000000 1.680000
-124.000000 736.000000 1.653333
-122.000000 736.000000 1.626667
.......
我已经搜索过如何绘制数组,但我没有幸运地找到
那么我如何使用 Pi3d 库绘制这个数组?
得到这样的结果 picture
这是 GitHub
上图书馆的 link
注意:我正在使用 Raspberry pi
你显然已经找到了制作图像的地方,看看你做了什么来达到你所拥有的,这将很有用。你能 post 你的代码或 link 吗?
在 pi3d 中,您必须将至少两个数组传递给 Buffer class 构造函数。根据您的 post,最小值是一个顶点数组,以及一个定义三角形面的数组。 (您还可以为每个顶点传递一个法向量数组和一个纹理坐标数组)。所以对于正方形:
pts = [[0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [1.0, 0.0, 0.0]]
faces = [[0, 1, 2], [0, 2, 3]]
shape = pi3d.Shape(...) # arguments as per docs
shape.buf[0] = pi3d.Buffer(shape=shape, pts=pts, texcoords=[], faces=faces)
您可以通过阅读其中的一些内容来更多地了解系统的工作原理 http://paddywwoof.github.io/pi3d_book/_build/html/GPUexplain.html
编辑我刚刚看了你关于 Whosebug 的其他三个问题,也许你想将顶点绘制为点或线而不是表面?如果是这种情况,那么您可以使用
创建形状
shape = pi3d.Lines(vertices=pts)
同样,您可以传递各种参数来控制线条的绘制方式,请参阅文档。
编辑 2,在更仔细地阅读你的问题后,我发现你还没有设法对 pi3d 做任何事情并且需要帮助开始。您需要阅读文档并查看演示程序;但这是你需要做的事情才能得到像你 posted:
这样的照片
import pi3d
import math
DISPLAY = pi3d.Display.create(x=100, y=100, w=600, h=600)
CAMERA = pi3d.Camera()
shader = pi3d.Shader("mat_flat")
verts = [[-130.000000, 735.000000, 1.733333],
[-128.000000, 735.000000, 1.706667],
[-126.000000, 735.000000, 1.680000],
[-124.000000, 735.000000, 1.653333],
[-130.000000, 736.000000, 1.733333],
[-128.000000, 736.000000, 1.706667],
[-126.000000, 736.000000, 1.680000],
[-124.000000, 736.000000, 1.653333],
[-122.000000, 736.000000, 1.626667]]
loop_verts = [[5 * math.sin(a / 57.3), 5 * math.cos(a / 57.3), 0.0] for a in range(360)]
line = pi3d.Lines(vertices=verts, material=[0.7, 0.7, 0.1], line_width=4, strip=True,
x=128, y=-735, z=8.0)
line.set_shader(shader)
loopx = pi3d.Lines(vertices=loop_verts, material=[1.0, 0.0, 0.0], strip=True, z=8.0)
loopx.set_shader(shader)
loopy = pi3d.Lines(vertices=loop_verts, material=[0.0, 1.0, 0.0], strip=True, z=8.0, rx=90)
loopy.set_shader(shader)
loopz = pi3d.Lines(vertices=loop_verts, material=[.0, 0.0, 1.0], strip=True, z=8.0, ry=90)
loopz.set_shader(shader)
CAMERA.position((-1.0, 1.0, 0.0)) # NB look at pi3d_demos for examples of using the mouse and keyboard
CAMERA.rotate(-5.0, -5.0, 0.0) # for camera positioning and closing the program down
while DISPLAY.loop_running():
line.draw()
loopx.draw()
loopy.draw()
loopz.draw()
我有一个包含 x、y 和 z 值的数组,如下所示:
-130.000000 735.000000 1.733333
-128.000000 735.000000 1.706667
-126.000000 735.000000 1.680000
-124.000000 735.000000 1.653333
-130.000000 736.000000 1.733333
-128.000000 736.000000 1.706667
-126.000000 736.000000 1.680000
-124.000000 736.000000 1.653333
-122.000000 736.000000 1.626667
.......
我已经搜索过如何绘制数组,但我没有幸运地找到
那么我如何使用 Pi3d 库绘制这个数组? 得到这样的结果 picture
这是 GitHub
上图书馆的 link注意:我正在使用 Raspberry pi
你显然已经找到了制作图像的地方,看看你做了什么来达到你所拥有的,这将很有用。你能 post 你的代码或 link 吗?
在 pi3d 中,您必须将至少两个数组传递给 Buffer class 构造函数。根据您的 post,最小值是一个顶点数组,以及一个定义三角形面的数组。 (您还可以为每个顶点传递一个法向量数组和一个纹理坐标数组)。所以对于正方形:
pts = [[0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [1.0, 0.0, 0.0]]
faces = [[0, 1, 2], [0, 2, 3]]
shape = pi3d.Shape(...) # arguments as per docs
shape.buf[0] = pi3d.Buffer(shape=shape, pts=pts, texcoords=[], faces=faces)
您可以通过阅读其中的一些内容来更多地了解系统的工作原理 http://paddywwoof.github.io/pi3d_book/_build/html/GPUexplain.html
编辑我刚刚看了你关于 Whosebug 的其他三个问题,也许你想将顶点绘制为点或线而不是表面?如果是这种情况,那么您可以使用
创建形状shape = pi3d.Lines(vertices=pts)
同样,您可以传递各种参数来控制线条的绘制方式,请参阅文档。
编辑 2,在更仔细地阅读你的问题后,我发现你还没有设法对 pi3d 做任何事情并且需要帮助开始。您需要阅读文档并查看演示程序;但这是你需要做的事情才能得到像你 posted:
这样的照片import pi3d
import math
DISPLAY = pi3d.Display.create(x=100, y=100, w=600, h=600)
CAMERA = pi3d.Camera()
shader = pi3d.Shader("mat_flat")
verts = [[-130.000000, 735.000000, 1.733333],
[-128.000000, 735.000000, 1.706667],
[-126.000000, 735.000000, 1.680000],
[-124.000000, 735.000000, 1.653333],
[-130.000000, 736.000000, 1.733333],
[-128.000000, 736.000000, 1.706667],
[-126.000000, 736.000000, 1.680000],
[-124.000000, 736.000000, 1.653333],
[-122.000000, 736.000000, 1.626667]]
loop_verts = [[5 * math.sin(a / 57.3), 5 * math.cos(a / 57.3), 0.0] for a in range(360)]
line = pi3d.Lines(vertices=verts, material=[0.7, 0.7, 0.1], line_width=4, strip=True,
x=128, y=-735, z=8.0)
line.set_shader(shader)
loopx = pi3d.Lines(vertices=loop_verts, material=[1.0, 0.0, 0.0], strip=True, z=8.0)
loopx.set_shader(shader)
loopy = pi3d.Lines(vertices=loop_verts, material=[0.0, 1.0, 0.0], strip=True, z=8.0, rx=90)
loopy.set_shader(shader)
loopz = pi3d.Lines(vertices=loop_verts, material=[.0, 0.0, 1.0], strip=True, z=8.0, ry=90)
loopz.set_shader(shader)
CAMERA.position((-1.0, 1.0, 0.0)) # NB look at pi3d_demos for examples of using the mouse and keyboard
CAMERA.rotate(-5.0, -5.0, 0.0) # for camera positioning and closing the program down
while DISPLAY.loop_running():
line.draw()
loopx.draw()
loopy.draw()
loopz.draw()