Panda3D基础实例

创建一个简单的Panda3D场景,加载一个模型并显示:

from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.scene = self.loader.loadModel("models/environment")self.scene.reparentTo(self.render)self.scene.setScale(0.25, 0.25, 0.25)self.scene.setPos(-8, 42, 0)app = MyApp()
app.run()

键盘控制实例

实现键盘控制模型移动:

from direct.showbase.ShowBase import ShowBase
from direct.actor.Actor import Actorclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.panda = Actor("models/panda-model", {"walk": "models/panda-walk"})self.panda.reparentTo(self.render)self.panda.loop("walk")self.accept("arrow_left", self.turnLeft)self.accept("arrow_right", self.turnRight)self.accept("arrow_up", self.moveForward)self.accept("arrow_down", self.moveBackward)def turnLeft(self):self.panda.setH(self.panda.getH() + 5)def turnRight(self):self.panda.setH(self.panda.getH() - 5)def moveForward(self):self.panda.setY(self.panda, -0.5)def moveBackward(self):self.panda.setY(self.panda, 0.5)app = MyApp()
app.run()

碰撞检测实例

实现简单的碰撞检测系统:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerQueue, CollisionRayclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.cTrav = CollisionTraverser()self.picker = CollisionRay()pickerNode = CollisionNode('mouseRay')pickerNode.addSolid(self.picker)self.pickerNP = self.camera.attachNewNode(pickerNode)self.pickerQueue = CollisionHandlerQueue()self.cTrav.addCollider(self.pickerNP, self.pickerQueue)self.accept("mouse1", self.handleClick)def handleClick(self):if self.pickerQueue.getNumEntries() > 0:self.pickerQueue.sortEntries()pickedObj = self.pickerQueue.getEntry(0).getIntoNodePath()print("Clicked on:", pickedObj.getName())app = MyApp()
app.run()

光照效果实例

添加多种光源到场景中:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import AmbientLight, DirectionalLight, PointLightclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.scene = self.loader.loadModel("models/environment")self.scene.reparentTo(self.render)# 环境光ambientLight = AmbientLight("ambientLight")ambientLight.setColor((0.2, 0.2, 0.2, 1))self.render.setLight(self.render.attachNewNode(ambientLight))# 方向光directionalLight = DirectionalLight("directionalLight")directionalLight.setColor((0.8, 0.8, 0.5, 1))directionalLight.setShadowCaster(True, 512, 512)dlnp = self.render.attachNewNode(directionalLight)dlnp.setHpr(45, -45, 0)self.render.setLight(dlnp)# 点光源pointLight = PointLight("pointLight")pointLight.setColor((1, 0.5, 0.5, 1))plnp = self.render.attachNewNode(pointLight)plnp.setPos(10, 10, 10)self.render.setLight(plnp)app = MyApp()
app.run()

粒子系统实例

创建简单的粒子效果:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import ParticlePool, ParticleSystem
from panda3d.core import PointParticles, SpriteParticleRenderer
from panda3d.core import BaseParticleEmitter, RingEmitterclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.particles = ParticleSystem()self.particles.setPoolSize(100)renderer = SpriteParticleRenderer("particle.png")self.particles.addRenderer(renderer)emitter = RingEmitter()emitter.setAngle(10)emitter.setRadius(1)emitter.setEmissionRate(20)emitter.setLitterSize(5)self.particles.addEmitter(emitter)self.particles.reparentTo(self.render)self.particles.setPos(0, 10, 0)self.particles.enable()app = MyApp()
app.run()

物理引擎实例

使用Bullet物理引擎创建物理场景:

from direct.showbase.ShowBase import ShowBase
from panda3d.bullet import BulletWorld, BulletPlaneShape
from panda3d.bullet import BulletBoxShape, BulletRigidBodyNode
from panda3d.core import Vec3class MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.world = BulletWorld()self.world.setGravity(Vec3(0, 0, -9.81))# 创建地面shape = BulletPlaneShape(Vec3(0, 0, 1), 0)node = BulletRigidBodyNode('Ground')node.addShape(shape)np = self.render.attachNewNode(node)np.setPos(0, 0, 0)self.world.attachRigidBody(node)# 创建盒子shape = BulletBoxShape(Vec3(0.5, 0.5, 0.5))node = BulletRigidBodyNode('Box')node.addShape(shape)node.setMass(1.0)np = self.render.attachNewNode(node)np.setPos(0, 0, 10)self.world.attachRigidBody(node)self.taskMgr.add(self.updatePhysics, 'updatePhysics')def updatePhysics(self, task):dt = globalClock.getDt()self.world.doPhysics(dt)return task.contapp = MyApp()
app.run()

GUI界面实例

创建简单的GUI界面:

from direct.showbase.ShowBase import ShowBase
from direct.gui.DirectGui import DirectButton, DirectLabelclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.label = DirectLabel(text="Panda3D GUI Demo", scale=0.1,pos=(0, 0, 0.8))self.button = DirectButton(text="Click Me",scale=0.1,pos=(0, 0, 0),command=self.buttonPressed)def buttonPressed(self):self.label["text"] = "Button was clicked!"app = MyApp()
app.run()

动画混合实例

混合多个动画序列:

from direct.showbase.ShowBase import ShowBase
from direct.actor.Actor import Actorclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.panda = Actor("models/panda-model", {"walk": "models/panda-walk","dance": "models/panda-dance"})self.panda.reparentTo(self.render)self.panda.setPos(0, 0, 0)# 混合动画self.panda.enableBlend()self.panda.setBlend(frameBlend=True)self.panda.setControlEffect("walk", 0.5)self.panda.setControlEffect("dance", 0.5)self.panda.loop("walk")self.panda.loop("dance")self.accept("w", self.setWalkWeight, [1.0])self.accept("d", self.setDanceWeight, [1.0])self.accept("s", self.setBothWeight, [0.5])

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Galera集群:高可用MySQL同步复制方案

目录 Galera Cluster 概述 核心架构与组件 WSREP API Group Communication System (GCP) 同步复制机制 复制流程详解 冲突检测算法 关键特性 多主架构实现 强一致性保障 自动成员管理 性能优化策略 并行复制实现 流控机制详解 批处理与压缩 部署与监控 详细配…

MybatisPlus-03.快速入门-常用注解

一.MP的原理 mp究竟是如何知道我们需要对哪个表进行操作,并且又是如何知道要操作哪些字段的呢?这是因为mp使用到了反射机制,我们在定义mapper接口时使其继承了BaseMapper接口,并指定了BaseMapper接口泛型为User,因此m…

ABAP+记录一个BDC的BUG修改过程

问题背景: 业务顾问反馈在使用BDC 进行MEQ1进行供应商配额时,由于以前录屏时用例只有3行数据,导致现在有5行数据的时候,代码仍然只获取了3行数据进行录入,现在需要更改代码,使其按照实际情况自动调整行数。…

github上传代码步骤(http)

github上传步骤(http) 之前github上传不了代码,总是报错。后面发现自己用的ssh上传需要秘钥,现在我介绍一个最简单的http上传方法(虽然没有ssh安全。。。但简单嘛~),现在我做个例子&#xff0c…

深入理解Nginx-以实际http通信例子改造带ssl配Nginx的实战-优雅草卓伊凡|麻子

深入理解Nginx-以实际http通信例子改造带ssl配Nginx的实战-优雅草卓伊凡|麻子 SSL/TLS在Nginx中的底层实现原理 Nginx的SSL模块架构 Nginx通过ngx_http_ssl_module模块实现SSL/TLS功能,该模块基于OpenSSL库构建。根据Nginx官方文档,SSL模块在Nginx架构…

AT6558R-5N32介绍

作为单芯片SOC方案,AT6558R在片上整合了射频前端、数字基带处理器与32位RISC CPU,并具备电源管理能力。该芯片兼容北斗、GPS、GLONASS三大卫星导航系统,可实现多模协同定位‌。 主要特征 支持 BDS/GPS/GLONASS 多系统联合定位 和单系统独立定…

“对象创建”模式之原型模式

目录 Prototype 原型模式动机 Motivation引例模式定义结构 Structure要点总结 Prototype 原型模式 动机 Motivation 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但…

Tomcat服务概述

前言: 作为Apache软件基金会Jakarta项目的核心成果,Tomcat凭借其轻量级、开源免费的特性,已成为Java Web应用服务的行业基准。它实现了完整的Servlet与JSP规范,通过模块化架构(Connector请求处理层与Container业务逻辑…

HarmonyOS应用开发高级认证知识点梳理 (一) 布局与样式

以下是 HarmonyOS 应用开发中 ‌布局与样式‌ 的核心知识点梳理(针对高级认证备考),结合官方文档与高频考点: 一、布局系统核心知识点 布局容器类型‌ 线性布局‌:Column(纵向)、Row&#xf…

【Ragflow】30.离线环境迁移方案

前言 之前的 Ragflow-Plus 在服务器上稳定运行一段时间后,接到任务,要把服务迁移到一台古老的,离线的windows台式机上。 起初认为,下载离线安装包,加载离线镜像,迁移下数据就可以了。 结果坑多得意想不到…

nrf52840蓝牙学习(定时器的应用)

和其他 MCU 处理器一样,在 nrf52840 中定时器的功能是十分强大的。其内部包含了 5 个定时 器 TIMER 模块 :TIMER0 、 TIMER1 、 TIMER2 、 TIMER3 、 TIMER4 ,如下表 10.1 所示。 1. 时钟源 首先定时器 TIMER 工作在高频时钟源&#xff08…

【Bluedroid】蓝牙启动之BTM_reset_complete源码解析

当蓝牙控制器完成硬件重置后,协议栈需通过一系列初始化操作恢复各模块状态。本文深入分析BTM_reset_complete核心函数及其调用链,详解 L2CAP 连接清理、安全模块重置、扫描参数恢复、BLE 隐私功能初始化等关键流程,揭示蓝牙设备在重置后如何通过标准化状态恢复确保互操作性、…

containerd 项目主要目录简要说明

containerd 项目结构清晰,核心代码分布在若干主目录下。以下是 client、cmd、core、internal、pkg、plugins 这六个主要包/目录的简要作用说明: 1. client 作用:封装与 containerd 守护进程通信的 Go 客户端 API,主要基于 gRPC。…

有线转无线工具,轻松创建WiFi热点

软件介绍 今天为大家推荐一款实用的无线网络共享工具——MyPublicWiFi。这款软件能够将电脑的有线网络转换为无线WiFi,方便其他设备连接使用。 安装与设置 该软件为安装版程序,安装完成后会自动识别当前电脑的IP地址。用户可在软件界面中自定义设…

Linux下,通过标准I2C驱动读取Sensor ID

sensor型号&#xff1a;OS04L10&#xff0c;sensor引脚以及时钟要先配置好&#xff0c;源码如下&#xff1a; #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include <stdint.h> #include <stdio.h> #include <sy…

人工智能基石:SVM支持向量机全解析(附Python实战)

大家好&#xff01;今天我们来深入探讨支持向量机&#xff08;Support Vector Machine, SVM&#xff09;——这个在​​图像识别、文本分类​​等领域广泛应用的强大算法。既能处理分类问题&#xff0c;又能解决回归任务&#xff0c;甚至在非线性数据面前也能游刃有余。本文将带…

mysql查看数据库

在 MySQL 中查看当前数据库的创建语句&#xff0c;使用 SHOW CREATE DATABASE 命令&#xff0c;以下是详细操作指南&#xff1a; 1. 查看当前数据库的创建语句 SHOW CREATE DATABASE database_name; 替换 database_name 为你的数据库名使用反引号 包裹特殊名称或保留字 2.…

ArrayList剖析

大家天天在用List&#xff0c;ArrayList一般来讲应该是程序员用的最多的集合类了。 我们今天研究一下ArrayList。 总体来讲&#xff0c;从底层数据结构或者源码的角度看&#xff0c;List比Map或者Set要简单。 底层数据结构 ArryList其实就是可变长数组。 初始化的时候&…

回顾JAVA中的锁机制

Java中的锁机制 在Java中&#xff0c;锁机制是多线程编程里保障数据一致性与线程安全的关键技术。 1. 内置锁&#xff1a;synchronized关键字 synchronized是Java的内置锁机制&#xff0c;能够保证在同一时刻&#xff0c;只有一个线程可以执行被其修饰的代码块或方法。 用法…

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目标检测论文精读(逐段解析)

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目标检测论文精读&#xff08;逐段解析&#xff09; 论文地址&#xff1a;https://www.arxiv.org/abs/2410.17725 Rahima Khanam and Muhammad Hussain Ultralytics公司发布 CVPR 2024 论文写的比较简单&#xff…