草庐IT

Panda3D 是一个用于 Python 和 C++ 程序的 3D 渲染和游戏开发框架。

KENYCHEN奉孝 2023-04-05 原文

Panda3D 是一个用于 Python 和 C++ 程序的 3D 渲染和游戏开发框架。

Panda3D 是一个用 C++ 编写的强大的 3D 引擎,具有一套完整的 Python 绑定。与其他引擎不同,这些绑定是自动生成的,这意味着它们始终是最新的和完整的:引擎的所有功能都可以通过 Python 进行控制。所有主要的 Panda3D 应用程序都是用 Python 编写的,这是使用该引擎的预期方式。

Panda3D 现在支持自动着色器生成,这意味着您现在可以使用法线贴图、光泽贴图、发光贴图、HDR、卡通着色等,而无需编写任何着色器。

Panda3D 是一个现代引擎,支持着色器、模板和渲染到纹理等高级功能。Panda3D 的不同寻常之处在于它强调学习曲线短、开发速度快、稳定性和鲁棒性极强。Panda3D 是在 Windows、Linux 或 macOS 下运行的免费软件。

Panda3D 团队非常关心让新用户可以访问引擎。我们提供了详细的手册、完整的 API 参考和大量示例程序来帮助您入门。我们有活跃的论坛,有许多乐于助人的用户,开发人员定期在线回答问题。

Panda3D 手册

欢迎来到 Panda3D 文档!Panda3D 是一个开源、免费使用的 3D 引擎,专为开发实时 3D 游戏、可视化、模拟、实验而设计 - 应有尽有!它包含一个可与 Python 或 C++ 编程语言一起使用的子例程库,以及一些有助于开发和调试的工具。

该手册有两种版本:一种适用于 Python 用户,另一种适用于 C++ 用户。使用侧边栏中的链接在版本之间切换。您当前正在查看Python用户手册。

本手册分为几个部分,如下所列。您可以随时使用左侧的侧边栏在不同部分及其包含的页面之间导航。

介绍

我们建议初学者从阅读 介绍部分开始,介绍安装 Panda3D 的过程,最后以“Hello World”教程解释如何创建一个非常小的 Panda3D 程序,以了解使用引擎的外观喜欢。

Panda3D 简介

Panda3D 基础知识

Panda3D 是一个 3D 引擎:一个用于 3D 渲染和游戏开发的子程序库。该库是带有一组 Python 绑定的 C++。使用 Panda3D 进行游戏开发通常包括编写控制 Panda3D 库的 Python 或 C++ 程序。

Panda3D 是为商业游戏开发而创建的,并且仍然用于开发商业游戏。正因为如此,引擎需要强调四个方面:功率、速度、完整性和容错性。每个人都知道什么是力量和速度。但是完整性和容错性值得一些额外的评论。

完整性意味着 Panda3D 包含许多平淡无奇但必不可少的工具:场景图浏览、性能监控、动画优化器等。

容错是关于所有游戏开发人员都会创建错误的事实。当你这样做时,你希望你的引擎给你一个清晰的错误信息并帮助你找到错误。如果您将错误的值传递给函数,太多的引擎只会崩溃。Panda3D 几乎从不崩溃,很多代码专门用于跟踪和隔离错误的问题。

最后,回到功能和速度:要衡量 Panda3D 的能力,您可以查看示例程序。这些是演示 Panda3D 功能样本的简短程序。屏幕截图的右上角有帧速率,是在 Radeon X700 上拍摄的。请注意,有些示例是旧的并使用占位符艺术,因此不是 Panda3D 视觉功能的好例子。

Panda3D 是由迪士尼为他们的大型多人在线游戏 Toontown Online 开发的。它于 2002 年作为免费软件发布。卡内基梅隆大学的娱乐技术中心目前负责托管网站和其他 Panda3D 服务,它积极参与了 Panda3D 开源项目的开发。它现在由迪士尼和来自世界各地的贡献者共同开发。

您可以阅读更多关于 Panda3D 的功能

Panda3D 不是初学者的工具或玩具

要成功使用 Panda3D,您必须是一名熟练的程序员。如果您不知道“API”是什么,或者如果您不知道“树”是什么,您可能会发现 Panda3D 势不可挡。这不是点击式游戏制造商:这是专业人士的工具。虽然指出这一点很重要,这样您才能有准确的期望,但同样重要的是要意识到 Panda3D 是您将使用的最简单、最强大的引擎之一,我们欢迎您的参与。

如果您刚刚开始编程,我们建议您最好的选择是从编程课程开始。或者,您可以尝试使用来自 CMU的Alice等培训工具自学。

Panda3D 支持现代引擎应具备的全部功能:它为法线贴图、光泽贴图、HDR、卡通着色和墨迹、光晕以及许多其他事物提供了方便的支持。它还允许您编写自己的着色器。

人们有时会误以为 Panda3D 是用 Python 编写的,这会使其非常慢。但是 Panda3D 不是用 Python 编写的;它是用 C++ 编写的。Python 仅用于编写脚本。开发人员通常使用 C++ 或类似的 Cython编写性能密集型位(如果有) 。要了解小型 Panda3D 程序通常会获得什么样的帧速率,请查看示例程序的屏幕截图。这些是使用旧的 Radeon x700 拍摄的。当然,只有示例程序可以像这样以 400 fps 运行,但对于真正的游戏来说,60 fps 是完全可以达到的。不过需要注意的是:要获得这​​种性能,您需要了解 3D 卡和 3D 性能优化。它不会自动发生。Panda3D 包括您需要达到 60 fps 的分析工具。

Panda3D 的软件许可证

从 1.5.3 版开始,Panda3D 已在所谓的“修改后的 BSD 许可证”下发布,这是一种免费软件许可证,使用限制很少。在 1.5.2 及之前的版本中,它使用了与 BSD 和 MIT 许可证非常相似的专有许可证,尽管对于其中两个条款的自由性存在一些分歧。旧许可证仍可在此处访问。

虽然引擎本身是完全免费的,但它附带了各种非免费软件的第三方库。其中一些(如 FMOD)甚至限制您在商业游戏中使用它们,除非您拥有许可副本。由于这个原因,Panda3D 可以很容易地禁用或删除这些受限制的第三方库,并且大多数时候它提供了替代方案。例如,它还带有 OpenAL,您可以使用它来代替 FMOD。

你可以阅读Panda3D 的许可证

谁在研究 Panda3D

商业和开源社区中有许多开发人员。目前,除了开源社区的积极贡献外,开发社区最活跃的成员是迪士尼。迪士尼对 Panda3D 的主要兴趣是商业用途。Panda3D 正被用于开发许多迪士尼游戏和游乐园展品。为了满足迪士尼的需求,Panda3D 必须是一个功能齐全的引擎,能够提供任何“A 级”商业游戏所期望的所有性能和质量。

最受支持的语言是 Python。尽管您也可以使用 C++,但该文档主要针对 Python 的使用。

使用 Panda3D 编程

手册的这一部分解释了 Panda3D 的各种功能以及支持该库的各种概念。它充满了示例代码和API 参考链接,应与手册一起研究,以全面了解如何操作各种类。

调试

本节记录了可用于在 Panda3D 程序中查找问题的各种方法。

性能优化

性能优化通常是制作 3D 游戏的必要步骤,以使游戏在尽可能广泛的计算机硬件上运行。本节介绍如何使用 Panda3D 提供的强大性能分析工具查找和修复性能问题。

分配

本节介绍如何将完成的 Panda3D 应用程序编译成可执行文件并将其打包以进行分发。

工具

本节列出了许多支持使用 Panda3D 进行编程的工具,包括用于将模型导入 Panda3D 的 3D 建模程序的各种导出器。

API 参考

本节包含作为 Panda3D API 一部分的所有类和函数的完整列表。

更多资源

除了本手册之外,还有许多其他资源可能对学习 Panda3D 有用,包括书籍、示例程序和用户提供的教程。本节包含指向这些其他资源的链接。

获得帮助

如果您在理解或使用 Panda3D 方面遇到困难,请随时向社区提问!Panda3D 周围有一个充满热情的社区,可以为您提供帮助。您可以在 论坛上发布问题,访问我们的 Discord 服务器或访问Libera.Chat IRC 服务器#panda3d 上的频道。

有关Panda3D 是一个用于 Python 和 C++ 程序的 3D 渲染和游戏开发框架。的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  9. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  10. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

随机推荐