文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用Python 3D技术制作元宵节走马花灯

2023-06-27 10:15

关注

这篇文章主要讲解了“怎么用Python 3D技术制作元宵节走马花灯”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python 3D技术制作元宵节走马花灯”吧!

效果图:

怎么用Python 3D技术制作元宵节走马花灯

二、原材料

2.1 花灯纸

可以加上自己喜欢的图案、文字等。

2.2 Python环境和模块

一台安装了 Python 环境的电脑,Python 环境需要安装以下模块。

如果没有上述模块,请参考下面的命令安装。

pip install numpypip install pillowpip install wxgl

NumPy 和 pillow 是 Python 旗下最常用的科学计算库和图像处理库,属于常用模块。WxGL 是一个基于 PyOpenGL 的三维数据可视化库,以 wx 为显示后端,提供 Matplotlib 风格的交互式应用模式,同时,也可以和 wxPython 无缝结合,在 wx 的窗体上绘制三维模型。

三、制作工序

花灯制作工序非常简单,只需要三十行代码,可以直接在 Python IDLE 中以交互方式逐行执行。

3.1 导入模块

>>> import numpy as np>>> from PIL import Image>>> import wxgl.wxplot as plt

3.2 打开花灯纸图像

>>> fn = r'D:\temp\light0115\res\paper.png'>>> im = np.array(Image.open(fn))/255>>> im.shape(400, 942, 3)

fn 定义的是图像存储路径,请据实修改。Image.open(fn)打开文件,返回一个 PIL 对象,np.array() 将 PIL 对象转成 numpy.ndarray 数组对象。除以255,将图像数据从 0 到 255 的值域范围变成0到1,适应 WxGL 的接口要求。查看数组的 shape,显示图像分辨率为400 像素高、942 像素宽,每个像素有三种颜色(此处为RGB)。

3.3 根据花灯纸的大小制作龙骨

纸长 942 像素,卷成圆筒,半径就是 149.9 像素,如果把半径视为1个单位,则高度 400 像素相当于 2.668 个单位。

>>> rows, cols, deep = im.shape>>> cols/(2*np.pi)149.9239563925654>>> r = 1>>> h = 2*np.pi*rows/cols>>> h2.6680192387174464

接下来需要制作半径1个单位、高度2.668个单位的圆筒状龙骨了。

>>> theta = np.linspace(0, 2*np.pi, cols)>>> x = r * np.cos(theta)>>> y = r * np.sin(theta)>>> z = np.linspace(0, h, rows)>>> xs = np.tile(x, (rows,1))>>> ys = np.tile(y, (rows,1))>>> zs = z.repeat(cols).reshape((rows,cols))

这里的 xsyszs 就是圆筒状龙骨上各个点的x坐标、y坐标、z坐标。下面的代码,每隔10个点抽取1个点,用 mesh 的方法画出龙骨形状。当然,也可以画出全部的点,那样顶点就会连成一片。

>>> plt.mesh(xs[::10,::10], ys[::10,::10], zs[::10,::10], mode='FLBL')>>> plt.show()

3.4 给龙骨贴上花灯纸

有了龙骨,接下来就可以把花灯纸贴在龙骨上了。继续操作之前,记得先把刚才弹出的3D龙骨窗口关闭。

>>> plt.mesh(xs, ys, zs, im)>>> plt.show()

不过,你会立刻发现,花灯纸上下方向贴反了。没关系,我们可以像下面这样反转方向。

>>> plt.mesh(xs, ys, zs, im[::-1])>>> plt.show()

3.5 制作旋转叶轮

走马灯之所以能够转动,是因为里面有蜡烛加热形成上升气流,推动顶部的叶轮旋转,从而带动花灯旋转。当然,这里的叶轮仅仅是个样子,花灯旋转依赖另外的机制实现。

>>> theta = np.linspace(0, 2*np.pi, 18, endpoint=False)>>> x = r * np.cos(theta)>>> y = r * np.sin(theta)>>> x[2::3] = x[1::3]>>> x[1::3] = 0>>> y[2::3] = y[1::3]>>> y[1::3] = 0>>> z = np.ones(18) * h * 0.9>>> vs = np.stack((x,y,z), axis=1)>>> plt.mesh(xs, ys, zs, im[::-1])>>> plt.surface(vs, color='#C03000', method='T', mode='FCBC', alpha=0.8)>>> plt.show()

叶轮设计有6片,用三角形模拟,颜色深红,透明度0.8,整体效果略显粗糙了一点。

3.6 加上照明灯和提系

照明灯用一个白色的圆球表示,提系则是红色的一条直线,兼做照明灯的电源线。

>>> plt.mesh(xs, ys, zs, im[::-1])>>> plt.surface(vs, color='#C03000', method='T', mode='FCBC', alpha=0.8)>>> plt.sphere((0,0,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')>>> plt.plot((0,0), (0,0), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')

3.7 让花灯转起来

花灯旋转的实现非常简单,只需要给 show 方法一个 rotation 参数就可以。

plt.show(rotation='h-')

四、完整源代码

有了上面的解说,完整的源代码就不用注释了。全部代码三十余行,各位可自行扩展,制作出更多的花灯来。

# -*- coding: utf-8 -*-import numpy as npfrom PIL import Imageimport wxgl.wxplot as pltim = np.array(Image.open('res/paper.png'))/255rows, cols, deep = im.shaper, h = 1, 2*np.pi*rows/colstheta = np.linspace(0, 2*np.pi, cols)x = r*np.cos(theta)y = r*np.sin(theta)z = np.linspace(0, h, rows)xs = np.tile(x, (rows,1))ys = np.tile(y, (rows,1))zs = z.repeat(cols).reshape((rows,cols))theta = np.linspace(0, 2*np.pi, 18, endpoint=False)x = r*np.cos(theta)y = r*np.sin(theta)x[2::3] = x[1::3]x[1::3] = 0y[2::3] = y[1::3]y[1::3] = 0z = np.ones(18) * h * 0.9vs = np.stack((x,y,z), axis=1)plt.mesh(xs, ys, zs, im[::-1])plt.surface(vs, color='#C03000', method='T', mode='FCBC', alpha=0.8)plt.sphere((0,0,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')plt.plot((0,0), (0,0), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')plt.show(rotation='h-')

感谢各位的阅读,以上就是“怎么用Python 3D技术制作元宵节走马花灯”的内容了,经过本文的学习后,相信大家对怎么用Python 3D技术制作元宵节走马花灯这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯