Panda3D實戰:從入門到精通

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…