tkinter的开源微型3D引擎
tiny-3d-engine的Python项目详细描述
微型3D引擎
Tkinter是基于这个三维图形包的python引擎。 它使用Numpy进行数学处理。在
它在pipy上可用, 文档位于readtthedocs,源代码在gitlab.com上镜像
使用安装此
pip install tiny_3d_engine
它为bars
、tri
和quad
元素创建simle三维渲染,并以Ensight的ASCII.geo
格式存储场景。
一个简单的网格看起来像:
加载模型
在这个简单的例子中,一个.geo文件被加载到一个3D场景中。这个场景被赋予一个新的引擎对象Engine3D
。在渲染屏幕上的场景之前,我们应用一个旋转.rotate()
,然后将交互留给用户.mainloop()
。在
场景和引擎
场景是存储三维模型的对象。
空场景就是None
。可以使用.update()
方法更新场景。每个场景处理由一个名称标识的几个部分,一个看起来像-tag-
(例如"ceiling"
)或-family-.-tag-
(例如"house.ceiling"
)的字符串。在
引擎用于在2D屏幕上投影场景。
一旦启动,就可以通过.translate()
或.rotate()
等方法来控制视点,然后用.render()
刷新。场景可以用.update()
更新。如果您希望用户与结果交互,请使用典型的TK.mainloop()
完成。在
如果我已经有了顶点和多边形呢?在
在下面的示例中,使用方法scene.add_or_update_part
,将两个正方形附加到初始void ^{str1}$Scene3D对象。在
- 第一个是蓝色的,由边组成(2个顶点连接) 第_二_个_是_红色_的_ , _是_od_正方形_ ( _4_个_顶点_连通_ )_
此场景被传递到Engine3D对象,触发一个窗口。在
fromtiny_3d_engineimport(Scene3D,Engine3D)scene=Scene3D()SIZE=2LENGTH=200.points=list()conn=list()dx=LENGTH/foriinrange(SIZE):forjinrange(SIZE):index=len(points)points.append([i*dx,j*dx,0])points.append([(i+1)*dx,j*dx,0])points.append([i*dx,(j+1)*dx,0])points.append([(i+1)*dx,(j+1)*dx,0])conn.append([index,index+1])conn.append([index+3,index+1])scene.update("square1",points,conn,color="#0000ff")points=list()conn=list()foriinrange(SIZE):forjinrange(SIZE):index=len(points)points.append([i*dx,j*dx,LENGTH])points.append([(i+1)*dx,j*dx,LENGTH])points.append([i*dx,(j+1)*dx,LENGTH])points.append([(i+1)*dx,(j+1)*dx,LENGTH])conn.append([index,index+1,index+3,index+2])scene.update("square2",points,conn,color="#ff0000")test=Engine3D(scene)test.rotate("x",45)test.rotate("y",45)test.render()test.mainloop()
(在numpy中会更容易,但我想让非numpy程序员能够阅读它)
命令行
提供了一个小的命令行界面:
Usage: tiny_3d_engine [OPTIONS] COMMAND [ARGS]... --------------- TINY_3D_ENGINE -------------------- You are now using the Command line interface of Tiny 3D engine, a Python3 Tkinter lightweight 3D engine, created at CERFACS (https://cerfacs.fr). This package is likely as a dependency of other packages, to provide a light 3D feedback for small 3D scenes <100000 polygons. This CLI is given here for developers perusal and demonstrations. Find the script of these small tools in the /examples folder of the package. This is a python package currently installed in your python environement. See the full documentation at : https://tiny-3d-engine.readthedocs.io/en/latest/. DISCLAIMER: Tiny 3D engine is a brute force flat renderer. As it is NOT using your graphical card, do not excpect anything fancier than a 1980 video game. Options: --help Show this message and exit. Commands: bench Run a short benchmark on your machine. load Load a 3D scene from FILENAME. rabbit Run a demo with the Stanford Rabbit.
表演
不要期待超过90年代早期的电子游戏。在鼠标交互期间,每秒的帧数大约为30000/nb。多边形数(即2000个多边形为15 fps)。在
默认情况下,静态视图中的引擎限制为100000个多边形,在鼠标交互时限制为2000个多边形。如果模型超出了这些限制,引擎会在加载时迅速删除多边形,以保持窗口的响应。在
要求
现在的图书馆需要Numpy和Tkinter。 Tk方面仅限于screen对象。 将来我可能会为PyQT4 Canvas或Matplotlib编写扩展。。。或者不是。在
起源
这项工作源于我的一个纯Tcl/Tk引擎 pure TK 3d engine和henry HaefligerpyEngine3D的pyEngine3D主机的混合,因为我非常喜欢这个API。在
目前的一个允许加载多个部分,并使用numpy。 场景可以被转储或从Ensight.case/.geo文件中读取。在
- 项目
标签: