Python WebGL 3D应用开发快速入门

news2024/12/28 18:53:01

在本文中,我们将学习如何在Python中使用three.js库,而无需编写任何一行 JavaScript。我们将使用PyWeb3D,这是一个额外的层,旨在与Brython的three.js轻松交互。
在这里插入图片描述

1、什么是PyWeb3D?

简单地说,PyWeb3D是一个使用Python语法的three.js库。这是一个用Brython和three.js构建的开源项目,它旨在扩展three.js,同时使用python语法与库进行交互。

本文是系列的第一篇,因此我们将保持简单。以下是我们将在本文中创建的内容的示例 ,一个旋转的立方体:

在这里插入图片描述

2、开发环境安装

无需安装任何东西即可使用 PyWeb3D。

将必要的库和包添加到 HTML 文件的 标记中:

<script src="https://cdn.jsdelivr.net/npm/brython@3.10.7/brython.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/brython@3.10.7/brython_stdlib.js"></script>
<script src="https://unpkg.com/three@0.145.0/build/three.js"></script>
<script src="https://www.pyweb3d.org/pyweb3d/v1.0.0/pyweb3d.brython.js"></script>

3、需要的准备工作

创建一个文件夹并将其命名为 spinning_cube。 这将是我们的工作目录。

在工作目录中,创建一个 index.html 文件。 这是我们所有代码的存放位置。

将以下代码粘贴到index.html 文件中:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>My first pyWeb3D app</title>
	<script src="https://cdn.jsdelivr.net/npm/brython@3.10.7/brython.min.js"></script>
	<script src="https://cdn.jsdelivr.net/npm/brython@3.10.7/brython_stdlib.js"></script>
	<script src="https://unpkg.com/three@0.145.0/build/three.js"></script>
	<script src="https://www.pyweb3d.org/pyweb3d/v1.0.0/pyweb3d.brython.js"></script>
	<style>
	    body { margin: 0; }
	</style>
 </head>
 <body onload="brython(1)">
	<script type="text/python">
		from browser import document, window
		from  pyweb3d.pyweb3d import *
		...
	</script>
 </body>
</html>

让我们看一下 HTML 文件,特别是 标签和 标签。

  • head标签

前两个 <script> 标签将加载 Brython — Brython 是用于客户端 Web 编程的 Python 3 实现,旨在取代 JavaScript 作为 Web 脚本语言。

第三个 <script> 标签将加载 three.js(Three.js 是一个易于使用、轻量级、跨浏览器的通用 JavaScript 3D 库)。

最后一个 <script> 标签将加载 pyweb3d — PyWeb3D 是 three.js,使用 python 语法。

  • body标签

请注意开始 <body> 标记中的 onload 属性。 这就是我们告诉浏览器在页面加载时调用 brython() 函数的方式。

最后是我们的 python 代码所在的 <script type=”text/python”> </script> 标签

4、用Python创建旋转立方体

这就是乐趣的开始。 使用感觉自然的语言。

将以下代码粘贴到 <body> 内的 <script type="text/python"> </script> 中:

from browser import document, window
from  pyweb3d.pyweb3d import *


scene = Scene()
camera = PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 )
renderer = WebGLRenderer()

renderer.setSize( window.innerWidth, window.innerHeight )
document.body.appendChild( renderer.domElement )

geometry = BoxGeometry( 1, 2, 1 )
material = MeshBasicMaterial( { 'color': 0x0000ff } )
cube = Mesh( geometry, material )
scene.add( cube )

camera.position.z = 5

def animate(time):
    window.requestAnimationFrame( animate )

    cube.rotation.x += 0.11
    # cube.rotation.y += 0.01

    renderer.render( scene, camera )

animate(0)

让我们看一下 Python 代码。

首先导入必要的模块和函数:

from browser import document, window
from  pyweb3d.pyweb3d import *

第一行从 Brython 导入 window和 document实例。

第二行从 pyWeb3D 模块导入所有 three.js 类和函数,这消除了额外的输入和格式化,并使与 three.js 库的交互变得简单。

其余内容说明如下:

  • 从第 5-7 行开始,我们创建了一个场景、相机和渲染器
  • 在第 9 行,我们设置要在其上绘制形状的窗口或屏幕的大小
  • 在第 10 行,我们将渲染器添加到HTML 正文中
  • 从第 12–15 行开始,我们创建了一个盒子形状并将其添加到第 15 行的场景中
  • 在第 17 行,我们将相机的位置向后移动,以便我们可以从透视图中看到形状
  • 从第 19 到 27 行,我们创建了一个动画循环并在第 27 行调用它。注意传递给动画函数的参数和自变量了吗? 这对于动画工作很重要

5、运行代码

在浏览器中打开 index.html,你应该会看到一个美丽的旋转立方体 !

在这里插入图片描述


原文链接:Python Web 3D开发入门 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代JavaScript,你应该使用的10件事

javascripttip&#xff08;3 部分系列&#xff09;1现代 JavaScript&#xff0c;你应该使用的 10 件事&#xff0c;从今天开始2了解如何在 JavaScript 中使用循环3如何在 JavaScript 中学习足够多的 RegEx 才能变得危险您可能对 JavaScript 完全陌生&#xff0c;也可能多年来只…

文件学习笔记

删除线格式 ## 文件描述符 1.文件文件内容文件属性。 2.文件操作文件内容的操作文件属性的操作。 3.所谓的“打开”文件&#xff0c;是指将文件的属性或内容加载到内存中—这是由冯诺依曼决定。 4.所以文件不全打开&#xff0c;不打开的文件放在磁盘存储。 5.内存文件&#xff…

在线教育-谷粒学院学习笔记(三)

文章目录1 搭建前端项目环境2 前端页面框架介绍3 讲师管理前端开发4 后台系统登录功能改造到本地5 前端框架开发过程6 讲师列表前端实现7 讲师分页前端实现8 讲师条件查询前端实现9 讲师删除功能前端实现10 讲师添加前端实现11 讲师修改前端实现12 前端路由切换问题解决1 搭建前…

Linux工具学习之【gdb】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…

【HTML】一款可交互的响应式登陆注册表单,你确定不来看看嘛(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

2022年五一杯数学建模C题火灾报警系统问题求解全过程论文及程序

2022年五一杯数学建模 C题 火灾报警系统问题 原题再现&#xff1a; 二十世纪90年代以来&#xff0c;我国火灾探测报警产业化发展非常迅猛&#xff0c;从事火灾探测报警产品生产的企业已超过100家&#xff0c;年产值达几十亿元&#xff0c;已经成为我国高新技术产业的一个组成…

Docker之Nginx部署前端项目

目录 创建nginx容器 nginx.conf讲解 ①所有配置必须以“;”结尾 ②nginx发布java项目 nginx发布静态vue项目 nginxtomcat实现反向代理及均衡 nginxhtml静态服务器 创建nginx容器 docker run –name mynginx -d -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/ngin…

6款强烈推荐的 SD卡/内存卡数据恢复软件

SD卡/内存卡在 21 世纪的作用比以往任何时候都更加重要。众所周知&#xff0c;SD卡/内存卡具有高数据传输率并且是便携式设备&#xff0c;大多数摄影师甚至智能手机用户主要依靠它们来保存所有个人或项目照片和视频。此外&#xff0c;SD 卡还因其与各种设备的兼容性而广受欢迎。…

JUC并发编程学习笔记——AQS个人理解

1. AQS引出 1.1 前置知识&#xff1a; 线程创建的四种方式&#xff1a;Thread、Runnable、callable、线程池 LockSupport的使用&#xff1a;park()和unpark()方法 LockSupport是一个工具类&#xff0c; 提供了基本的线程阻塞和唤醒功能&#xff0c;它是创建锁和其他同步组件的…

使用 NVIDIA NeuralVDB优化大规模稀疏

使用 NVIDIA NeuralVDB优化大规模稀疏 基于 OpenVDB 过去十年的发展&#xff0c;NVIDIA NeuralVDB 的推出对于处理极其庞大和复杂的数据集的开发人员和研究人员来说是一个游戏规则的改变者。 NVIDIA NeuralVDB 的预发布版本为 OpenVDB 带来了 AI 和 GPU 优化&#xff0c;将烟雾…

【OpenCV】:OpenCV人脸识别项目杂记

项目目标&#xff1a; 1.图片人脸识别 2.视频人脸识别 3.ESP32Cam摄像头网页视频人脸识别 项目效果视频&#xff1a; ESP32Cam摄像头人脸识别OpenCV本地视频人脸识别ESP32Cam摄像头人脸检测项目基础代码内容&#xff1a; 一、读取图片 # 导入cv模块 import cv2 as cv# 读取图…

如何设置Excel表格以“只读模式“打开

设置Excel表格以“只读模式”打开&#xff0c;可以防止意外修改表格内容&#xff0c;因为“只读模式”下的Excel无法直接保存&#xff0c;这样就不用担心表格意外修改&#xff0c;关闭时又不小心保存了。 这个模式我们可以通过“另存为”的方法来设置。 打开Excel表格后&…

【学习笔记之Linux】工具之gcc/g++

背景知识&#xff1a; gcc/g是一个编译器&#xff0c;注意区分编译器和编辑器&#xff0c;vim是是编辑器。简单的说&#xff0c;编辑器是我们敲代码的工具&#xff0c;我们在编辑器上写出我们需要实现的功能&#xff1b;编译器负责实现功能&#xff0c;把我们写的高级语言编译成…

马蹄集 古人的剩余定理

古人的剩余定理 难度&#xff1a;白银 ©时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 今有物不知其数&#xff0c; 三三数之剩二&#xff0c; 五五数之剩三&#xff0c; 七七数之剩二。 问物最少几何&#xff1f; #include <bits/stdc.h> using nam…

使用Paddle飞桨重写波士顿房价预测案例

1.Paddle飞桨设计之“道” 当读者使用飞桨框架编写多个深度学习模型后&#xff0c;会发现程序呈现出“八股文”的形态。即不同的程序员、使用不同模型、解决不同任务的时候&#xff0c;他们编写的建模程序是极其相似的。虽然这些设计在某些“极客”的眼里缺乏精彩&#xff0c;…

XJar加密工具java打的包jar包加密运行,防止反编译

XJar功能特性 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动&#xff0c;动态解密运行的方案&#xff0c;避免源码泄露以及反编译。支持Maven插件加密过程需要Go环境&#xff1b;加密后生成Go启动器&#xff0c;保护密码不泄露GitHub: GitHub - core-l…

JSP SSM网上预约挂号系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSPSSM网上预约挂号系统 是一套完善的系统源码&#xff0c;对理解JSP java SrpingMVC mybiats 框架 MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档 &#xff0c;系统主要采用B/S模式开发。研究的基本内容…

马蹄集 非常大的N

非常大的N 难度&#xff1a;白银 时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 编写程序求11/2-21/231/2-41/251/2..N1/2。 格式 输入格式&#xff1a;输入为正整数 输出格式&#xff1a;输出为浮点型&#xff08;保留六位小数&#xff09;。 #include <bits/stdc.h…

系统排障掉坑背锅?亚马逊云科技要为开发者研发提效了

出品 | CSDN 云计算任何中大型企业里的 IT 系统&#xff0c;都会有多个业务应用、多种开发语言、技术栈并存。尤其要进入云上现代化应用开发的企业和开发者&#xff0c;将面对云原生庞杂的技术分支。开发者的苦与痛&#xff1a;非功能性研发、故障排查被甩锅然而&#xff0c;IT…

深夜修复Linux桌面无法启动

玩了很久了&#xff0c;突然想学习一下&#xff0c;想做一个KDE任务栏的网速插件。 Netspeed Widget - KDE Store GitHub - dfaust/plasma-applet-netspeed-widget: Plasma 5 widget that displays the currently used network bandwidth deepin15 注销切换到 KDE Ctrl Alt …