如何使用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()