1说明: 1。1画3d正方体cube,用python编程,需要几行代码呢?今天就来看看简洁的python和其强大的库文件。 1。2相关包安装,建议采用pip法,用国内源安装较好。pipinstallihttps:mirrors。aliyun。compypisimple软件名本机采用sudopip3。8installihttps:mirrors。aliyun。compypisimple软件名 1。3环境: 华为笔记本电脑、深度deepinlinux操作系统、python3。8和微软vscode编辑器。 2示例: 排行榜 2。1第9名: panda3d法,65行代码,迪士尼公司开源项目。 2。1。19panda3d法65。py代码:fromdirect。showbase。ShowBaseimportShowBasefromdirect。showbase。DirectObjectimportDirectObjectfrompanda3d。coreimportGeomVertexFormat,GeomVertexDatafrompanda3d。coreimportGeom,GeomTriangles,GeomVertexWriterfrompanda3d。coreimportGeomNode,PerspectiveLens,LVector3baseShowBase()base。disableMouse()base。camera。setPos(0,10,0)defnormalized(args):myVecLVector3(args)myVec。normalize()returnmyVecdefmakeSquare(x1,y1,z1,x2,y2,z2):formatGeomVertexFormat。getV3n3cpt2()vdataGeomVertexData(square,format,Geom。UHDynamic)vertexGeomVertexWriter(vdata,vertex)normalGeomVertexWriter(vdata,normal)colorGeomVertexWriter(vdata,color)texcoordGeomVertexWriter(vdata,texcoord)ifx1!x2:vertex。addData3(x1,y1,z1)vertex。addData3(x2,y1,z1)vertex。addData3(x2,y2,z2)vertex。addData3(x1,y2,z2)normal。addData3(normalized(2x11,2y11,2z11))normal。addData3(normalized(2x21,2y11,2z11))normal。addData3(normalized(2x21,2y21,2z21))normal。addData3(normalized(2x11,2y21,2z21))else:vertex。addData3(x1,y1,z1)vertex。addData3(x2,y2,z1)vertex。addData3(x2,y2,z2)vertex。addData3(x1,y1,z2)normal。addData3(normalized(2x11,2y11,2z11))normal。addData3(normalized(2x21,2y21,2z11))normal。addData3(normalized(2x21,2y21,2z21))normal。addData3(normalized(2x11,2y11,2z21))color。addData4f(1。0,0。0,0。0,1。0)texcoord。addData2f(0。0,1。0)texcoord。addData2f(0。0,0。0)texcoord。addData2f(1。0,0。0)texcoord。addData2f(1。0,1。0)trisGeomTriangles(Geom。UHDynamic)tris。addVertices(0,1,3)tris。addVertices(1,2,3)squareGeom(vdata)square。addPrimitive(tris)returnsquaresquare0makeSquare(1,1,1,1,1,1)square1makeSquare(1,1,1,1,1,1)square2makeSquare(1,1,1,1,1,1)square3makeSquare(1,1,1,1,1,1)square4makeSquare(1,1,1,1,1,1)square5makeSquare(1,1,1,1,1,1)snodeGeomNode(square)snode。addGeom(square0)snode。addGeom(square1)snode。addGeom(square2)snode。addGeom(square3)snode。addGeom(square4)snode。addGeom(square5)cuberender。attachNewNode(snode)cube。hprInterval(1。5,(360,360,360))。loop()cube。setTwoSided(True)base。run() 2。1。2效果图: 2。2第8名: pygame法,42行代码,配合OpenGL 2。2。18pygame法42。py代码:importpygamefrompygame。localsimportfromOpenGL。GLimportfromOpenGL。GLUimportpygame。init()pygame。display。setmode((640,480),OPENGLDOUBLEBUF)元组定义定义正方体的xyz坐标点CUBEPOINTS((0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5),(0。5,0。5,0。5))定义RGB颜色CUBECOLORS((1,0,0),(1,1,0),(0,1,0),(0,0,0),(1,0,1),(1,1,1),(0,0,1),(0,1,1))定义面,四个点构成一个面CUBEQUADVERTS((0,1,2,3),(3,2,7,6),(6,7,5,4),(4,5,1,0),(1,5,7,2),(4,0,3,6))定义线,两个点构成一个线CUBEEDGES((0,1),(0,3),(0,4),(2,1),(2,3),(2,7),(6,3),(6,4),(6,7),(5,1),(5,4),(5,7),)defdrawcube():allpointslist(zip(CUBEPOINTS,CUBECOLORS))glBegin(GLQUADS)forfaceinCUBEQUADVERTS:forvertinface:pos,colorallpoints〔vert〕glColor3fv(color)glVertex3fv(pos)glEnd()glColor3f(0,0,0)glBegin(GLLINES)forlineinCUBEEDGES:forvertinline:pos,colorallpoints〔vert〕glVertex3fv(pos)glEnd()defmain():glEnable(GLDEPTHTEST)glMatrixMode(GLPROJECTION)gluPerspective(45。0,640480。0,0。1,100。0)glTranslatef(0。0,0。0,3。0)glRotatef(25,1,0,0)whileTrue:eventpygame。event。poll()ifevent。typeQUITor(event。typeKEYDOWNandevent。keyKESCAPE):breakglClear(GLCOLORBUFFERBITGLDEPTHBUFFERBIT)glRotatef(1,0,1,0)drawcube()pygame。display。flip()ifnamemain:main() 2。2。2效果图: 2。3第7名: vispy法,30行代码。 2。3。17vispy法30。py代码:fromvispyimportapp,gloo,visualsfromvispy。visuals。transformsimportMatrixTransformclassCanvas(app。Canvas):definit(self):窗口大小app。Canvas。init(self,keysinteractive,size(1300,1200))self。boxvisuals。BoxVisual(width1,height1,depth1,edgecolorb)self。thetaself。phi0self。transformMatrixTransform()self。box。transformself。transformself。show()self。timerapp。Timer(connectself。rotate)self。timer。start(0。016)defrotate(self,event):self。theta。5self。phi。5self。transform。reset()self。transform。rotate(self。theta,(0,0,1))self。transform。rotate(self。phi,(0,1,0))self。transform。scale((100,100,0。001))self。transform。translate((200,200))self。update()defonresize(self,event):vp(0,0,self。physicalsize〔0〕,self。physicalsize〔1〕)self。context。setviewport(vp)self。box。transforms。configure(canvasself,viewportvp)defondraw(self,ev):背景颜色设置gloo。clear(colorblack,depthTrue)self。box。draw()winCanvas()app。run() 2。3。2效果图: 2。4第6名: vtk法,19行代码。 2。4。16vtk法19。py代码:importvtk实例化cubecubevtk。vtkCubeSource()定义三边长10,长宽高cube。SetXLength(10)cube。SetZLength(10)cube。SetYLength(10)cubeMappervtk。vtkPolyDataMapper()cubeMapper。SetInputConnection(cube。GetOutputPort())cubeActorvtk。vtkActor()cubeActor。SetMapper(cubeMapper)cube表面为白色1。0,1。0,1。0cubeActor。GetProperty()。SetColor(0。1,0。7,0。1)cube表面为草绿色渲染器设置:实例化renvtk。vtkRenderer()ren。AddActor(cubeActor)将正方体加入渲染器中ren。SetBackground(0。1,0。2,0。4)窗口背景颜色:蓝色定期渲染器窗口renWinvtk。vtkRenderWindow()renWin。AddRenderer(ren)创建窗口交互器irenvtk。vtkRenderWindowInteractor()iren。SetRenderWindow(renWin)iren。Initialize()iren。Start() 2。4。2效果图: 2。5第5名 matplotlib法,16行代码 2。5。15matplotlib法16。py代码:frommatplotlibimportpyplotaspltfrommpltoolkits。mplot3dimportAxes3Ddefplotlinearcube(x,y,z,dx,dy,dz,colorred):figplt。figure()axAxes3D(fig)xx〔x,x,xdx,xdx,x〕yy〔y,ydy,ydy,y,y〕kwargs{alpha:1,color:color}ax。plot3D(xx,yy,〔z〕5,kwargs)ax。plot3D(xx,yy,〔zdz〕5,kwargs)ax。plot3D(〔x,x〕,〔y,y〕,〔z,zdz〕,kwargs)ax。plot3D(〔x,x〕,〔ydy,ydy〕,〔z,zdz〕,kwargs)ax。plot3D(〔xdx,xdx〕,〔ydy,ydy〕,〔z,zdz〕,kwargs)ax。plot3D(〔xdx,xdx〕,〔y,y〕,〔z,zdz〕,kwargs)plt。show()plotlinearcube(0,0,0,100,100,100) 2。5。2效果图: 2。6第4名: visvis法,14行代码 2。6。14visvis法14。py代码:importvisvisasvvclassCustomWobject(vv。Wobject):definit(self,parent):vv。Wobject。init(self,parent)defGetLimits(self):x1,x20,1y1,y20,1z1,z20,1returnvv。Wobject。GetLimits(self,x1,x2,y1,y2,z1,z2)avv。cla()cCustomWobject(a)a。SetLimits()xyz相等appvv。use()app。Run() 2。6。2效果图: 10行代码以内的 3第3名: pyqtgraph法,8行代码。 3。13pyqtgraph法8。py代码:frompyqtgraph。QtimportQtGuiimportpyqtgraph。openglasglappQtGui。QApplication(〔〕)wgl。GLViewWidget()w。show()bgl。GLBoxItem()默认大小w。addItem(b)app。instance()。exec() 3。2效果图: 4第2名: pyvista法,5行代码。 4。12pyvista法5。py代码:importpyvistaaspv实例化boxcube正方体boxpv。Box()实例化一个画布ppv。Plotter()将box添加在画布p上进行渲染p。addmesh(box,colortan,showedgesTrue)显示p。show() 4。2效果图: 5第1名: 冠军,vpython法,2行代码搞定。 5。11vpython法2。py代码:fromvpythonimportbox() 5。2操作和效果图: 怎么样? python厉害不? 看似无聊,但是都是在国外大神原创性无聊的基础上无聊的。 记住,python就是一个无聊的大神无聊时发明的,加油,中国人。 科技创新,让科技创新的思维进入我们无聊时的大脑。 自己整理并分享出来 喜欢的人,请点赞、关注、评论、转发和收藏。