零基础也能做3D游戏,Panda3D快速上手全流程详解

第一章:零基础入门Panda3D游戏开发

Panda3D 是一个功能强大且开源的跨平台 3D 游戏引擎,由迪士尼和卡内基梅隆大学共同开发,广泛应用于教育、模拟和独立游戏开发。即使没有任何编程经验,也可以通过 Python 快速上手 Panda3D。

安装与环境配置

首先确保系统已安装 Python(建议 3.7 及以上版本),然后通过 pip 安装 Panda3D:
# 安装 Panda3D
pip install panda3d

# 验证安装
python -c "from panda3d.core import *; print('Panda3D installed successfully')"
安装完成后,可使用任何文本编辑器编写 .py 脚本文件,运行后即可启动 3D 窗口。

创建第一个 3D 场景

以下代码展示如何初始化窗口并加载一个简单模型:
from direct.showbase.ShowBase import ShowBase

class MyGame(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        # 加载内置小熊模型
        self.model = self.loader.loadModel("models/panda")
        self.model.reparentTo(self.render)  # 将模型添加到渲染树
        self.model.setScale(0.5)            # 缩放模型
        self.model.setPos(0, 10, 0)         # 设置位置

app = MyGame()
app.run()
该脚本会打开一个 3D 窗口,显示一只位于前方的小熊猫模型。

核心模块概览

Panda3D 的主要组件包括:
  • ShowBase:提供窗口、任务管理器和渲染环境
  • loader:用于加载 3D 模型、纹理和音频资源
  • render:场景图根节点,所有可见对象需挂载于此
  • taskMgr:处理每帧更新逻辑
功能对应模块用途说明
窗口管理ShowBase初始化图形窗口与事件循环
模型加载loader.loadModel()支持 .egg 和 .bam 格式模型
场景渲染render存储所有可见 3D 对象的层级结构

第二章:Panda3D环境搭建与项目初始化

2.1 理解Panda3D架构与核心组件

Panda3D采用模块化设计,核心由渲染引擎、场景图管理器和任务调度系统构成。其架构以“场景图”为中心,所有可视对象均作为节点挂载其中,通过层次化结构实现高效渲染。
核心组件职责
  • NodePath:场景图中的节点引用,用于控制模型位置、旋转与缩放
  • ShowBase:提供默认窗口、相机和任务链,是应用运行的基础类
  • Task Manager:每帧执行注册任务,实现游戏逻辑的持续更新
基础代码结构示例

from panda3d.core import *
from direct.showbase.ShowBase import ShowBase

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        self.scene = self.loader.loadModel("models/environment")
        self.scene.reparentTo(self.render)
上述代码初始化ShowBase,加载环境模型并将其挂载到渲染场景图中。 self.render是根节点,所有可见对象必须连接至此树结构。

2.2 在Windows/macOS/Linux上安装Panda3D

Windows 安装步骤
在 Windows 上安装 Panda3D 最简单的方式是使用官方提供的预编译安装包。访问 Panda3D 官网下载页面,选择适用于 Windows 的 .exe 安装程序并运行。安装向导将自动配置 Python 环境与 Panda3D 模块。
macOS 与 Linux 安装方法
macOS 用户推荐使用 Homebrew 安装:
brew install panda3d
该命令会自动处理依赖项并注册模块到系统 Python 路径中。 Linux(Ubuntu/Debian)用户可通过 pip 安装:
pip install panda3d
此方式兼容大多数现代发行版,确保已安装 Python 开发包(如 python3-dev)以避免编译错误。
验证安装
安装完成后,执行以下代码测试环境是否正常:
from panda3d.core import PandaFramework
print("Panda3D installed successfully!")
若无导入错误并输出提示信息,则表明安装成功。

2.3 配置开发环境与IDE集成(VS Code/PyCharm)

安装Python与虚拟环境
首先确保系统已安装Python 3.9+,推荐使用 pyenv管理多版本。创建项目专属虚拟环境可避免依赖冲突:

python -m venv myproject_env
source myproject_env/bin/activate  # Linux/Mac
# 或 myproject_env\Scripts\activate  # Windows
该命令生成隔离环境, site-packages独立存储,提升项目可移植性。
IDE配置建议
在VS Code中安装Python扩展包,并设置解释器路径指向虚拟环境。PyCharm则自动识别 venv,可在 Project Interpreter中验证配置。
  • 启用语法高亮与自动补全
  • 配置Pylint或Flake8进行代码检查
  • 设置运行调试器断点支持

2.4 创建第一个Panda3D项目并运行“Hello World”场景

初始化项目结构
在本地工作目录中创建新文件夹作为项目根目录,例如 hello_panda。该目录将存放主程序脚本和资源文件。
编写Hello World场景
创建 main.py 文件并输入以下代码:

from panda3d.core import *
from direct.showbase.ShowBase import ShowBase

class HelloWorld(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        # 加载并显示文本模型
        self.text_node = TextNode('title')
        self.text_node.setText("Hello, Panda3D!")
        text_np = self.aspect2d.attachNewNode(self.text_node)
        text_np.setScale(0.1)
        text_np.setPos(-0.7, 0, 0.9)

app = HelloWorld()
app.run()
上述代码中, ShowBase 初始化图形窗口与任务管理器; TextNode 用于创建2D文本; aspect2d 是2D渲染容器,确保文本随窗口缩放自适应显示。位置通过 setPos(x, y, z) 在屏幕坐标系中调整。

2.5 项目目录结构解析与资源管理规范

良好的项目目录结构是保障团队协作效率和系统可维护性的基础。合理的分层设计有助于快速定位模块,提升代码复用率。
标准目录布局
典型的 Go 项目应遵循如下结构:

├── cmd/              # 主程序入口
│   └── app/          # 具体服务启动逻辑
├── internal/         # 内部业务逻辑
│   ├── service/      # 服务层
│   └── model/        # 数据模型
├── pkg/              # 可复用的公共组件
├── config/           # 配置文件
├── web/              # 前端资源或静态文件
└── go.mod            # 模块依赖定义
该结构通过 internal/ 实现封装隔离,确保核心逻辑不被外部包直接引用。
资源配置与加载策略
使用统一配置管理工具(如 Viper)集中处理环境变量、配置文件和默认值。资源文件按环境分离,避免硬编码路径,提升部署灵活性。

第三章:3D场景构建与基础对象操作

3.1 场景图原理与NodePath的使用

场景图(Scene Graph)是一种树形数据结构,用于组织和管理3D场景中的对象。每个节点代表一个实体,如模型、灯光或相机,通过父子关系构建层次化结构。
NodePath的作用
NodePath是Panda3D中操作场景图节点的核心类,提供对节点的引用及一系列操作方法,如位置设置、旋转、缩放和附加子节点。
基本用法示例

# 加载模型并绑定到场景图
model = loader.loadModel("cube")
model.reparentTo(render)
model.setPos(0, 10, 0)
上述代码中, loader.loadModel()加载模型资源, reparentTo(render)将模型挂载至渲染根节点, setPos()设置其世界坐标位置。
  • render:默认的顶层渲染节点
  • reparentTo:改变节点父级,实现动态场景重组
  • NodePath可链式调用:支持如 model.setHpr(0,90,0).setColor(1,0,0)

3.2 加载模型、设置材质与灯光实践

在三维场景中,加载模型是构建可视化效果的基础。现代WebGL框架如Three.js提供了简洁的API来导入外部模型,例如glTF格式文件。
模型加载实现

const loader = new THREE.GLTFLoader();
loader.load('model.gltf', (gltf) => {
  scene.add(gltf.scene); // 将模型添加到场景
});
该代码使用 GLTFLoader异步加载模型,回调函数中将解析后的场景图结构加入主场景。
材质与灯光配置
合理的材质和灯光能显著提升真实感。常用设置包括:
  • 使用MeshStandardMaterial支持PBR渲染
  • 添加DirectionalLight模拟太阳光
  • 启用阴影映射以增强空间感知
组件作用
环境光 (AmbientLight)提供全局基础照明
标准材质响应光照并表现质感

3.3 控制相机移动与视角变换技巧

在三维场景中,相机的移动与视角变换直接影响用户体验。通过监听用户输入事件,结合向量运算,可实现平滑的相机控制。
键盘控制相机前后左右移动

// 根据按键调整相机位置
if (keys['w']) camera.z -= speed;
if (keys['s']) camera.z += speed;
if (keys['a']) camera.x -= speed;
if (keys['d']) camera.x += speed;
上述代码通过监听 WASD 键,按方向更新相机坐标。speed 控制移动灵敏度,适用于第一人称视角基础移动。
鼠标控制视角旋转
使用欧拉角实现俯仰(pitch)和偏航(yaw)旋转:
  • 水平旋转(yaw)影响相机朝向左右
  • 垂直旋转(pitch)控制上下俯仰角度
  • 需限制 pitch 范围防止翻转异常

第四章:交互逻辑与游戏机制实现

4.1 键盘与鼠标事件监听与响应

在现代Web应用中,用户交互的核心依赖于对键盘和鼠标的精准监听。浏览器通过事件机制捕获用户操作,并触发相应的回调函数。
事件监听的基本方式
可通过 addEventListener 方法绑定特定事件类型,如 click、 keydown 等。
document.addEventListener('keydown', function(event) {
    console.log('按键码:', event.keyCode);
});
上述代码监听全局键盘按下事件, event.keyCode 表示被按下的键值(注意:该属性已废弃,推荐使用 key 或 code)。
常用事件类型对照表
事件类型触发条件
click鼠标单击
mousedown鼠标按钮按下
mousemove鼠标移动
keydown键盘键被按下

4.2 实现角色基本运动与碰撞检测

在游戏开发中,角色的移动与环境交互是核心机制之一。本节将实现基于物理引擎的角色基本运动控制,并集成碰撞检测逻辑。
角色移动逻辑实现
通过监听输入事件更新角色速度,结合物理系统进行位置变换:

// 更新角色速度
function updatePlayerMovement() {
  if (keys['ArrowLeft']) player.vx = -5;
  if (keys['ArrowRight']) player.vx = 5;
  if (keys['ArrowUp']) player.vy = -5;
  if (keys['ArrowDown']) player.vy = 5;

  player.x += player.vx;
  player.y += player.vy;
  player.vx *= 0.8; // 摩擦力减速
  player.vy *= 0.8;
}
上述代码通过键盘事件改变速度分量,利用衰减模拟惯性滑动效果。
轴对齐包围盒(AABB)碰撞检测
采用AABB算法判断角色与障碍物是否相交:
  • 每个实体定义边界框:x, y, width, height
  • 检测条件:两矩形在x轴和y轴均重叠
  • 响应方式:回退位置或修正速度

4.3 游戏状态管理与UI元素叠加显示

在复杂的游戏逻辑中,状态管理决定了当前场景的行为模式,如“主菜单”、“游戏中”或“暂停”。为实现清晰的控制流,常采用状态机模式统一管理。
游戏状态机设计

class GameStateMachine {
  constructor() {
    this.currentState = null;
  }

  setState(newState) {
    if (this.currentState) this.currentState.exit();
    this.currentState = newState;
    this.currentState.enter();
  }

  update() {
    if (this.currentState) this.currentState.update();
  }
}
该类通过 setState 切换状态,自动调用前一状态的 exit() 和新状态的 enter(),确保资源释放与初始化。
UI层级叠加策略
使用栈结构管理UI层,支持弹窗、提示等多层叠加:
  • 底层:主游戏界面
  • 中层:HUD信息(血量、分数)
  • 顶层:模态对话框
每层独立渲染,按顺序叠加,避免耦合。

4.4 音效播放与背景音乐集成

在现代应用开发中,音效与背景音乐的合理集成能显著提升用户体验。本节探讨如何在前端项目中实现高效的音频管理机制。
音频资源加载策略
为避免播放延迟,建议预加载关键音效。使用 AudioContext 可精确控制加载时机:

const audioContext = new (window.AudioContext || window.webkitAudioContext)();
fetch('sound/click.wav')
  .then(response => response.arrayBuffer())
  .then(data => audioContext.decodeAudioData(data))
  .then(buffer => clickSoundBuffer = buffer);
上述代码通过 Web Audio API 异步解码音频,确保播放时低延迟。buffer 存储解码后的音频数据,供后续快速调用。
音效与背景音乐分离管理
  • 音效:短促、高频触发,适合使用 AudioBufferSourceNode 播放
  • 背景音乐:长时循环,建议使用 <audio> 标签并启用自动循环
通过独立控制音量节点,可实现音效与背景音乐的独立调节,提升用户自定义体验。

第五章:从原型到发布——完整游戏打包与部署

构建跨平台可执行文件
使用 Unity 或 Unreal Engine 时,导出配置直接影响性能与兼容性。以 Unity 为例,在 Build Settings 中选择目标平台(如 Windows、macOS、WebGL),确保启用“Development Build”以便调试。
  • 检查 Player Settings 中的 Company Name 和 Product Name
  • 设置正确的压缩格式(LZ4 适合快速加载)
  • 启用 Strip Engine Code 减少包体大小
资源优化与依赖管理
大型纹理和音频文件应进行压缩处理。例如,将 WAV 转为 OGG,PNG 使用 Crunch 压缩。通过 AssetBundles 实现按需加载:

using UnityEngine;
public class BundleLoader : MonoBehaviour {
    IEnumerator Start() {
        var request = AssetBundle.LoadFromMemoryAsync(bundleData);
        yield return request;
        var loadedBundle = request.assetBundle;
        Instantiate(loadedBundle.LoadAsset("PlayerPrefab"));
    }
}
自动化部署流程
集成 CI/CD 工具如 GitHub Actions 可实现自动构建与上传。以下为 Unity 构建脚本示例:
步骤命令
启动构建unity-editor -batchmode -executeMethod BuildScript.BuildGame
上传至 CDNscp build/* user@cdn-server:/var/www/games/mygame
部署流程图:
代码提交 → 触发 Action → 拉取资源 → 执行 Build → 运行测试 → 部署至服务器 → 发送 Slack 通知
对于 WebGL 版本,需配置服务器支持 gzip 和 Brotli 压缩,并设置正确的 MIME 类型(如 .unityweb 使用 application/octet-stream)。移动端发布还需准备签名密钥(Android Keystore)或 Apple Developer 证书。

相关推荐

Python知识点:如何使用Panda3D进行3D游戏开发

通过以上步骤,你可以使用Panda3D搭建一个基本的3D游戏。Panda3D还支持复杂的着色器、音效、物理、网络、GUI等功能,这使得它成为一个强大的工具,可以用于制作复杂的3D游戏。进一步的学习和探索Panda3D文档将帮助你掌握更高级的功能和技巧。

杰哥在此的专栏 2955

如何用Panda3D打造专业3D游戏?开源引擎的完整入门指南

Panda3D是一款由知名企业和学术机构联合开发的开源跨平台3D游戏引擎,支持Python和C++编程语言,为开发者提供从简单2D游戏到复杂3D场景的全流程开发解决方案。作为成熟稳定的开源引擎,它既适合独立开发者快速原型开发,也能满足商业项目的性能需求。 ## ???? 为什么选择Panda3D?引擎核心优势解析 ### 跨平台部署无压力 Panda3D支持Windows、Linux、macOS等...

gitblog_00094的博客 1292

从零构建3D世界:Python用Panda3D引擎开发专业级3D游戏

本文介绍了使用Python和Panda3D引擎开发3D游戏的系统学习路径。主要内容包括: 环境搭建与基础认知(2-3天) 安装Panda3D引擎和配套工具 创建第一个3D场景程序 理解3D坐标系和核心概念 3D场景核心元素(5-7天) 掌握场景图管理和节点操作 学习相机系统和灯光设置 实现父子节点关系和简单动画 进阶开发(4-20天) 模型加载与纹理处理 用户交互实现 物理引擎与动画控制 完整项目开发与发布 文章提供了详细的代码示例和最佳实践,强调从基础到进阶的系统学习过程,适合Python开发者入门3D游

漫画之迷学编程 1414

panda3d,一个超强的 Python 库!

Panda3D 库是一个功能强大且易于使用的 3D 游戏引擎,能够帮助开发者在 Python 项目中高效地创建和管理 3D 应用程序。通过支持跨平台、高效渲染、物理模拟和丰富的工具集,Panda3D 能够满足各种复杂的 3D 应用开发需求。本文详细介绍了 Panda3D 库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握 Panda3D 库的使用,并在实际项目中发挥其优势。

涛哥聊Python 2159

Python 3D游戏开发实战:从Panda3D到性能优化全解析

3D游戏开发通常涉及图形渲染、物理模拟和实时交互等核心概念。其原理在于通过游戏引擎管理场景图、处理用户输入并逐帧更新状态,最终在屏幕上呈现立体图像。这项技术的价值在于能够创建沉浸式体验,广泛应用于游戏、教育仿真、数据可视化及科研原型构建等领域。对于希望快速验证创意或集成AI算法的开发者而言,Python凭借其简洁语法和丰富生态,成为实现轻量级3D应用的优选。通过Panda3D等引擎,开发者可以高效处理碰撞检测、资源管理等工程实践问题,但需注意性能优化与打包分发等常见挑战,例如避免内存泄漏和解决多平台部署时的

weixin_30781775的博客 351

Panda3d 介绍

Panda3D是一个3D引擎:一个用于3D渲染和游戏开发的子程序库。该库是带有一组Python绑定的c++。使用Panda3D进行游戏开发通常需要编写一个Python或c++程序来控制Panda3D库。 Panda3D是为商业游戏开发而创建的,并且仍然用于开发商业游戏。

u014077947的博客 4200

图解 Panda3D引擎开发入门

Panda3D 是一个 3D 渲染和游戏开发框架,可以在这个框架下使用 Python 和 C++ 。Panda3D 是开源软件, 它的许可证让它可以用于任何用途, 包括商业用途。本文使用Panda3D 1.7.0版本,其最新稳定版本是1.7.2。可在官网下载最新稳定版本。Panda3D包括Windows和Linux版本,本文基于Windows。 Panda3D 1.7.0 Windows

bcbobo21cn的专栏 2万+

Panda3d 教程

偶然之余看到了 Panda3d 这个3D引擎,觉得代码开源然后又比较轻量级,感觉还是比较好上手的,因此就想去学习一下,然后把学习过程记录下来。 网上也都找了不少关于Panda3d 方面的教程,但是感觉都不是很好,有的是简单的介绍,有的或者大部分都是文字的介绍,没有对应的例子或者动画来进行演示实际的效果,因此打算自己重新写这么一个相关的教程。

u014077947的博客 2757

掌握这7个技巧,用Panda3D+AI快速生成沉浸式3D游戏场景

掌握Panda3D与AI结合技巧,实现高效3D场景生成。本文围绕游戏开发技术升级:Pygame/Panda3D框架与AI场景生成实践,介绍7种实用方法,涵盖自动化布局、智能纹理生成等场景。提升开发效率,降低设计成本,打造沉浸式体验。值得收藏,点击了解完整实践方案。

AlgoPerch的博客 798

Panda3D游戏开发综合指南

Panda3D是一款开源的3D游戏引擎,它是基于Python语言和DirectX/OpenGL图形API的交叉开发。Panda3D以其高性能和易于上手的特性,在游戏开发和视觉效果领域中应用广泛。Panda3D的强项在于其简洁的API和强大的渲染引擎,这使得开发者可以专注于创意实现,而不必过度关注底层技术细节。在正式开发之前,进行环境搭建是必要的步骤。Panda3D的环境搭建流程包括了系统需求的确认、安装前的准备工作、开发工具的配置等。

weixin_33240461的博客 933

数据分析是什么?

说道“数据分析”一词,大家应该并不陌生,数据分析从字面上来理解,就是对数据做出分析然后得出一个结论,看起来浅显易懂,下面我们把这个词语分开得到的是“数据”与“分析”。“数据”的范围就很广泛了,小到一个计量数字,大到成亿级别的数据汇总,都可以称为数据;“分析”一词并不难理解,以智慧思维的方法对某一事物做出合理的解释,给出结论是为分析,一般会用到数学上的分析方法,比如统计学或者概率论等等。 1. 什么是数据分析 1) 数据分析发展背景 进入到 21 世纪以后,伴随着互联网的迅速发展,大数据应运而生,越来越多的数

MC_XY的博客 5433

用 Panda3D 打造 3D 世界:Python 游戏与可视化开发全指南

Panda3D:Python 3D游戏开发引擎指南 Panda3D是由迪士尼和卡内基梅隆大学联合开发的开源3D引擎,支持Python脚本开发,适用于游戏、仿真、VR等多种场景。该引擎具备实时渲染、动画系统、物理引擎、音效处理等专业功能,同时保持简洁易用的特点。 安装便捷,通过pip即可配置。开发以ShowBase类为基础,采用场景图管理3D对象,支持模型、纹理、音效资源加载。引擎提供相机控制、事件监听、任务系统等核心功能,并支持灯光材质、着色器编程、物理碰撞等高级特性。 文中包含多个实用示例,如3D角色控制

萧鼎的博客 2556

ensp VRRP+MSTP综合性实验

网络结构拓扑图 实验要求 要求: 1、全网互通,IP地址任意规划,路径最优,无环路。 2、AR1上面有一个loopback口,ip地址为1.1.1.1/24, 要求所有电脑能访问。 3、vlan10通过LSW1访问1.1.1.1,当LSW1出现问题即使 g0/0/1故障亦能通过lsw2访问。 vlan30通过LSW2访问1.1.1.1,当LSW2出现问题即使 g0/0/1故障亦能通过lsw1访问。 4、LSW1为vlan10的主根,vlan30的备根。 LSW2为vlan30的主根,vlan1

qq_45631844的博客 1万+

python可以做3d游戏吗_1.panda3d学习分享——用python编个3d游戏?p3d简介与相关环境搭建...

本人一直想编一个小游戏,奈何才疏学浅,又非计算机专业,更重要的是,本人懒癌晚期,只会python这个脚本语言,又不想学C(总是忘打";",自闭了),于是真的没有什么选择。比较有名的python游戏包应该就是pygame,但我总是感觉pygame官网界面有点丑(这算不算是理由),于是就选择了panda3d。当然,现在还是一个beginner,可能有诸多不懂和错误,写在这里也是为了将来回顾方便。简单说...

weixin_39752788的博客 1479

RK3588设备树节点实战:从零配置音频与显示模块(ES8388+DSI0)

本文详细介绍了在RK3588平台上配置音频编解码器ES8388和显示接口DSI0的设备树节点实战。通过具体案例拆解设备树节点的编写逻辑与调试技巧,包括音频路由与声卡配置、DSI控制器基础配置、视频通路路由配置以及电源管理与时钟树设计。文章还提供了调试工具与实战技巧,帮助开发者快速解决常见问题。

weixin_42525637的博客 354

【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤

Windows 11 安装 WSL2 和 Ubuntu 22.04 指南 本文详细介绍在 Windows 11 上安装 WSL2 和 Ubuntu 22.04 的完整步骤,包括: WSL2 与 VirtualBox 的性能对比优势 系统版本检查与升级方法 两种安装方式(一键安装和手动安装) Ubuntu 22.04 的安装与配置 存储位置管理及迁移技巧 常用 WSL2 命令速查表 文章还提供了性能优化建议和常见问题解决方案,适合开发者和 Linux 爱好者快速搭建高效的开发环境。

No8g攻城狮的博客 2万+

Panda3D 初学者教程(一)

Panda3D 初学者教程(一) 原文链接 原文 Lesson 1 Hello World In which we learn how to make and run a Panda3D instance, and how to load and manipulate models. At it’s most basic, running a Panda3D program is quite simple: create a “ShowBase” object, and tell it to run. Sp

ChirpTB的博客 4343

基于YOLOv26的卫星遥感环境监测系统

本文介绍了一个基于YOLOv26的卫星遥感环境监测系统。该系统采用分层架构设计,包含数据采集、预处理、目标检测、图像分析、变化检测等核心模块。技术栈包括YOLOv26、PyTorch、OpenCV等深度学习框架和图像处理工具,以及GDAL、rasterio等地理信息处理库。系统支持获取多种卫星数据源(如Sentinel、Landsat、MODIS)的遥感图像,并进行时间序列分析。通过代码示例展示了数据采集模块的实现,包括卫星图像获取和模拟生成功能。该系统可应用于环境要素检测、变化监测等场景,为环境监测提供智

一键难忘的博客 936

3D游戏物理开发引擎Panda3D基础

文章目录Panda3D场景安排模型加载渲染属性任务任务链事件处理主循环视角相机阴影环境灯方向灯控制key-eventsDirectGui碰撞检测后续 Panda3D场景安排 ​ Panda3D将其对象存储在场景图中,从本质上讲,这是一个对象的层次结构,称为节点。 ​ 给定节点的状态(位置与旋转等状态)与其父级的状态是相对的,例如”0“的表示值表示与其父级位于同一位置。因此,每个节点都会影响其儿童节点及其子女,依次影响儿童节点。 ​ 但通常情况下我们不直接操作节点,而是操作”NodePath“,"NodeP

Rosen的博客 4564

038、OIS 光学防抖原理与调试:陀螺仪数据融合、Lens Shift OIS 的闭环控制

本文分享了OIS光学防抖系统的调试经验和关键技术要点。作者通过一个"呼吸感"Bug案例,揭示了陀螺仪数据融合和闭环控制的重要性。系统介绍了OIS的三个关键层次:传感器层(陀螺仪特性)、控制层(复合算法)和执行层(闭环控制)。重点讲解了陀螺仪数据融合的互补滤波实现、Lens Shift闭环控制的PID优化策略(包括积分抗饱和和微分滤波),以及前馈补偿的应用。最后总结了调试中的关键问题:数据同步、霍尔校准、温度补偿和性能评估方法,并给出实用建议:平衡算法复杂度与性能、预留带宽余量、重视产线校准等。文章强调OIS

sundong_81的博客 265

Stanford Dogs 犬类识别实战:基于 YOLOv8 的 120 类目标检测与图形界面实现

本项目通过YOLOv8实现了Stanford Dogs数据集的目标检测功能,完整包含了数据准备、模型训练、检测推理、图形界面四大模块。初学者使用YOLOv8n(nano版)加速训练,熟悉流程后可切换到YOLOv8s/m。图像上传与检测可进一步增强,例如显示识别框、标注标签。可以添加模型选择、检测阈值调整等功能,提升实用性。通过网盘分享的文件:基于yolov8的狗类品种识别系统链接: https://pan.baidu.com/s/1UYV4h2WnK1RxWWKoPrS-RA?

FJN110的博客 86

Panda3D入门指南:快速掌握Python游戏开发基础

想要快速上手Python游戏开发吗?Panda3D作为一款由迪士尼和卡内基梅隆大学共同开发的开源跨平台游戏引擎,为初学者提供了完美的学习平台。这个强大的3D引擎专门为Python和C++设计,让你能够轻松创建令人惊叹的游戏世界。 ## 🎮 什么是Panda3D游戏引擎? Panda3D是一个功能强大且成熟的游戏开发框架,它提供了完整的3D渲染管线、物理引擎、音频系统和网络功能。无论你是想开发

gitblog_00073的博客 442

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran‘s I,LISA聚类地图,显著性地图

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran's I,单变量莫兰指数,双变量莫兰指数计算,LISA聚类地图,显著性地图,Geoda双变量莫兰指数是一种强大的地理空间数据分析工具。

智慧空间实验室 6052

Python Panda3D【 3D 游戏引擎和框架】 全面讲解

Panda3D 是一个开源的、免费的 3D 游戏引擎和框架,由迪士尼互动工作室开发并维护,后来开源。它使用 Python 和 C++ 编写,主要面向游戏开发、模拟、可视化和其他 3D 应用。

记录点滴 1950

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【亲测免费】 Panda3D:开源3D游戏引擎的强大选择

Panda3D 是一款功能强大的开源游戏引擎,专为 Python 和 C++ 程序设计,适用于3D渲染和游戏开发。Panda3D 不仅免费,而且其宽松的 [BSD 许可证](https://www.panda3d.org/license/) 允许用户在任何商业项目中自由使用。无论你是游戏开发者、教育工作者,还是3D爱好者,Panda3D 都能为你提供丰富的工具和资源。 ## 项目技术分析 Pa...

gitblog_00337的博客 1347

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python也能做3A游戏?Panda3D高性能框架搭建全解析

auto-generated

AlgoPerch的博客 1171

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 【医保数据分析黄金法则】:Python高手都在用的7种数据可视化技巧
下一篇: 从零构建合规爬虫系统,电商数据采集不再踩雷
DevPath
博客等级 码龄1年 179粉丝 2176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值