游戏开发图形学【免费下载链接】panda3dPowerful, mature open-source cross-platform game engine for Python and C, developed by Disney and CMU项目地址https://gitcode.com/gh_mirrors/pa/panda3d点击查看免费下载Panda3D 是一个完全依赖社区志愿者维护的开源游戏引擎。本文基于仓库根目录的 CONTRIBUTING.md 展开完整覆盖官方贡献流程的全部要求——先提 Issue 讨论、构建引擎、遵守编码规范、准备与提交 PR——并结合 cmake/README.md、doc/CODING_STYLE.md 与 tests/README.md 等仓库文档补充可直接复制执行的构建命令、测试命令与源码级依据帮助你在提交代码前就满足维护者的验收标准。一、动手实现之前先讨论再写码官方贡献文档的第一条原则是在实现任何改动之前强烈建议先提交一个 GitHub Issue。Issue 不仅用于跟踪 bug 和功能请求也是与设计者讨论设计方案、实现策略的渠道。两个值得注意的细节来自 CONTRIBUTING.md 原文good first issue标签项目维护了一批适合新手的 Issue难度不大但足以让新贡献者学习 Panda3D 的工作方式。官方明确提示这类 Issue 的价值在于你本人动手获得的经验与技能不要提交由 LLM 代笔的good first issue代码——用 Agent 代写会浪费社区评审时间且经验无法传递。对生成式代码的总体要求如果你使用任何代码生成手段尤其是随手可得的 LLM必须逐行审查自己提出的每一处改动并确保你真正理解对引擎做了什么修改。所有改动无论以何种方式产生都必须达到质量标准。文档同时指明任何改动都必须与 Panda3D API 的整体设计原则以及团队的优先事项一致且必须与其他开发者讨论后再实现。讨论渠道包括 GitHub Issues 和 Discord 服务器的#development频道后者能提供更多的帮助与指导。二、前置条件先把 Panda3D 构建起来贡献文档明确要求如果你还没有构建过 Panda3D必须先理解 CMake 或 makepanda 两套构建系统的使用方法并且团队计划逐步过渡到以 CMake 作为首选构建系统不确定时用哪个就选 CMake。用 CMake 构建当前推荐cmake/README.md 给出的最快构建流程是安装第三方依赖后执行mkdir build cd build cmake .. cmake --build . --config Standard --parallel 4 [sudo] cmake --build . --config Standard --target install几个对贡献者重要的细节Windows 上针对 64 位编译时首次调用需要cmake -A x64 ..CMake 本身不直接编译 Panda它生成 IDE 或构建工具的工程文件。Linux 上强烈建议cmake -G Ninja ..可选的构建配置configuration为StandardSDK 默认、Release、MinSizeRel、RelWithDebInfo、Debug以及仅在 Clang/Clang/GNU 编译器下出现的Coverage类似 Debug但开启代码覆盖率插桩供开发者使用——这可以直接在源码中验证根 CMakeLists.txt 中Coverage配置只有在编译器匹配(AppleClang|Clang|GNU)时才会被追加第三方库的开关约定为HAVE_LIBRARYYES/NO如USE_JPEG子包开关为BUILD_SUBPACKAGEYES/NO如BUILD_DTOOL、BUILD_PANDA。构建测试运行器根 CMakeLists.txt 中有option(BUILD_TESTS Build unit test runner. ON)即默认开启当BUILD_TESTS为真时CMakeLists.txt 会add_subdirectory(tests)引入测试子项目。这意味着贡献者默认构建即包含测试设施符合贡献文档第 4) 步确认改动被测试套件覆盖并运行测试的要求。另外当前仓库的版本号由根 CMakeLists.txt 从 setup.cfg 的version字段当前为1.11.0读取project(Panda3D VERSION ...)直接使用该值。makepanda 构建系统cmake/README.md 对应的旧系统是 doc/INSTALL 描述的 makepanda。该文档明确声明makepanda 构建系统的变动比这份文档更频繁其中部分信息可能已过时。它在 Windows 下通过makepanda\makepanda.bat调用Linux/OSX 下在源码根目录调用makepanda/makepanda.py。由于团队已计划向 CMake 迁移新贡献者建议直接使用 CMake。三、必须熟悉的编码风格与设计模式贡献文档规定任何风格不一致之处在改动被接受之前都必须修正因此提交前就应达到 doc/CODING_STYLE.md 的标准。该风格指南虽自述并不严格但明确了代码库的偏好风格核心规则包括命名约定对象规则示例形式类CamelCaseFirstUpperMyClass文件名lowerCamelCase.h/lowerCamelCase.cxx所有头文件必须唯一命名统一安装到同一路径函数lower_snake_case_without_prefixfunction_name局部变量lower_snake_case_without_prefix成员变量_lower_snake_case_with_initial_score_a枚举常量SE_前缀 小写类型 SomeEnumSE_enum_value枚举类常量全大写下划线ENUM_VALUE缩进与空格一律两个空格缩进C 文件中禁止出现 Tabpublic/private等访问修饰符相对类体不缩进控制关键字后、条件括号前留一个空格if (x y) {函数名后不加空格参数逗号后加空格二元运算符两侧加空格行尾不留空白。函数定义范式JavaDoc 注释 返回类型与类名同行 函数名另起一行 左大括号同行/** * String documenting the function, in JavaDoc style. */ void ClassName:: function_name(int x, int y) const { ... }构造函数带初始化列表时:与构造函数名同行初始化项每项一行、缩进两空格这是左大括号换行的唯一例外。注释注释应为格式规范的英文大小写与标点正确句间两空格除注释掉的代码外//与首词之间留空格//优先于/*。行宽80 列为软限制注释必须折行续行按优先顺序选择断行位置参数列表逗号后 二元运算符后运算符留在行尾 返回类型后 日志语句的前 字符串字面量自然词界 赋值后 函数调用(后。现代语言特性项目是C14见 doc/CODING_STYLE.md 末尾Modern language features一节鼓励使用nullptr、std::move与移动语义、range-based forauto用于迭代器等场景可以接受能用模板函数直接接 lambda 时避免std::function的额外开销暂时避免使用 C17 特性。四、提交改动的标准流程PR 六步法所有来自核心贡献者之外的改动都通过 Pull RequestPR进行。CONTRIBUTING.md 给出的六步流程原文可归纳为Fork Panda3D 仓库为你的改动创建一个分支将改动推送到该分支自查改动符合风格指南、设计模式与工程约定版权归属清晰你拥有所提交代码的全部权利且不会破坏现有 Panda3D API 的使用方式确认在需要处有测试套件覆盖并实际运行测试发起合并请求。每个 PR 都由维护者评审并自动进行回归测试与单元测试覆盖检查按维护者意见修改把新提交追加到同一分支可能需要进行 force push达到可接受状态后由维护者合并到上游相应分支。提交前的三项准备工作文档同时要求清晰、简洁的 PR 描述并链接该 PR 所解决的 Issue——方便维护者评审编写单元测试为改动不破坏既有行为提供高置信度拆分 PR一个 PR 只覆盖一个改动是强烈建议我们很少接受更大的 PR。此外进行中的改动请标记为draft PR——这可以避免每次推送都向全体贡献者发送邮件也便于展示在研工作并获取方向性反馈如果你不确定自己是否走在正确方向上一定要把 PR 标为 draft。五、运行与编写测试让covered by the test suite落到实处贡献文档第 4) 步要求建立改动已被测试套件覆盖并运行测试。仓库的 tests/README.md 说明了测试体系的组织方式Python 测试package/test_*.py用 pytest 运行测试引擎通过 interrogate 生成的对外 API 表现出的行为C 测试package/test_*.cxx编译进统一的run_cxx_tests二进制使用 vendored 在 tests/catch2/ 的 Catch2 框架测试无法通过对外 API 触达的内部 C 机制。两套测试均自动发现——只需在包目录下新增test_*.py或test_*.cxx文件即可无需额外注册。这与 tests/CMakeLists.txt 的实现一致file(GLOB cxx_test_sources CONFIGURE_DEPENDS */test_*.cxx)收集所有 C 测试源链接panda目标后构建run_cxx_testsCMake ≥ 3.19 且非交叉编译时catch_discover_tests会把每个 Catch2 用例注册为独立的 ctest 测试并以标签区分包名从而ctest -L express可行。运行命令# Python 套件会自动顺带收集并运行 C 套件 python -m pytest tests # C 套件单独运行 built/bin/run_cxx_tests # 全部 built/bin/run_cxx_tests [express] # 某个包的测试 built/bin/run_cxx_tests --list-tests # 查看用例在 sanitizer 插桩或静态构建中则使用构建目录下的run_pytest二进制它内嵌了 Python 解释器——见 tests/CMakeLists.txt该目标由tests/main.c构建并链接panda与Python::Python。CMake 构建下ctest也是运行两套测试的替代方式。运行 Python 套件所需依赖见 requirements-test.txtpytest3.9.0、pytest-cov、Pmw-py32.1、setuptools15.2。Python 与 C 测试的边界tests/README.mdWriting tests一节只要被测行为能通过对外 API 观测新测试必须用 Python 编写——它测试的是用户实际编程所依赖的契约且对最多贡献者可读可运行。仅当满足以下条件之一时才允许写 C 测试(1) 代码未公开且公开它除测试外毫无意义不要为了可测而添加显著膨胀接口的 interrogate 绑定(2) 被测语义在 Python 层不存在重载解析、移动语义、模板实例化、隐式转换、对象生命周期与引用计数转移、内存布局、编译期行为(3) 测试需要绑定无法提供的控制力精确交错流水线阶段/线程、栈与堆构造、运行中向内部注入失败。仓库中可看到该规则的实例如 tests/express/test_hashval.py 等 Python 契约测试与 tests/dtoolutil/test_small_vector.cxx、tests/express/test_ordered_vector.cxx 这类只能靠 C 验证的容器/模板行为测试并存。六、版权声明提交即接受 Modified BSDCONTRIBUTING.md 末节的版权条款是硬性法律要求Panda3D 仓库中的代码版权归Carnegie Mellon University所有以Modified BSD License授权与根 LICENSE 及 setup.cfg 中license Modified BSD License一致。提交改动即表示你同意你的代码置于同一许可之下除个别事先约定的情况外项目不接受其他许可证下的代码贡献。七、贡献者自检清单综合以上各节提交 PR 前可对照检查是否已提交 Issue 并与其他开发者含 Discord#development频道讨论过设计改动是否符合 doc/CODING_STYLE.md 的命名、缩进、注释与 C14 特性约束是否用 CMake默认BUILD_TESTSON完整构建并运行了pytest tests/run_cxx_tests新增行为是否有测试覆盖且测试语言Python 优先选择符合 tests/README.md 的边界规则PR 是否只含一个改动、描述清晰并链接了相关 Issue、未完成的已标记 draft代码权利归属是否清晰、是否接受 Modified BSD 许可条款官方还建议通过项目网站的 Get Involved 页面了解更完整的参与方式本文涉及的所有文档与构建脚本均可在当前仓库中直接查看CONTRIBUTING.md、cmake/README.md、doc/INSTALL、doc/CODING_STYLE.md、tests/README.md。赞分享游戏开发图形学【免费下载链接】panda3dPowerful, mature open-source cross-platform game engine for Python and C, developed by Disney and CMU项目地址https://gitcode.com/gh_mirrors/pa/panda3d点击查看免费下载相关推荐Starlette 贡献指南从提交 Issue 到合并 PR 的完整开发者工作流Starlette 贡献指南从提交 Issue 到合并 PR 的完整开发者工作流 Starlette 是一个轻量级 ASGI 框架它的演进离不开社区贡献。本后端Web框架Easegress 开源贡献指南从 Issue 提交到 PR 合并的完整贡献工作流Easegress 开源贡献指南从 Issue 提交到 PR 合并的完整贡献工作流 本文基于 Easegress 仓库根目录的 CONTRIBUTING.md云原生API网关微服务服务网格Rapier 物理引擎贡献指南从 Issue 到合并 PR 的完整工作流Rapier 物理引擎贡献指南从 Issue 到合并 PR 的完整工作流 本文是 Rapier 开源物理引擎仓库 gh_mirrors/ra/rapier物理引擎游戏开发机器人上一篇终极指南如何用LAV Filters让老旧电脑秒变专业媒体播放中心下一篇3步让老旧电脑流畅播放4K视频LAV Filters完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考