2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Panda3D如何加载obj格式的3D模型文件

Panda3D如何加载obj格式的3D模型文件

时间:2022-03-10 01:00:34

相关推荐

Panda3D如何加载obj格式的3D模型文件

​ 在上文中,讲了如何将max、obj、mb、fbx等主流格式的3D模型文件转换为egg、gltf格式,Panda3D可以加载的格式。在上文末尾,博主临时看到了一种方式,可以让Panda3d直接加载obj格式的文件,因此本文来专门看下如何实现。

​ 先来看下在Stack Overflow上看到的回答。

​ Panda3D在1.10版本后可以直接加载obj,那我们看下要如何进行配置修改。

​ 主要有两种方式来修改config.prc文件

1.在IDE中修改Config.prc文件

​ Panda3D的配置文件名称为 Config.prc,我们可以到这个文件里直接修改配置项。该文件可以通过PyCharm找到.

​ 具体路径为External Libraries–>site-packages–>panda3d–>etc–>Config.prc

​ 打开配置文件后,在最后一行添加上代码load-file-type p3assimp

​ 修改后,重新启动就可以生效。

2.去panda3d的安装路径中修改

​ 这个并不是指Panda3d SDK的安装路径,而是你使用的python环境,即通过pip安装的Panda3d。如果是使用的conda构建的虚拟环境,则需要到对应envs目录下。本文以conda虚拟环境的修改为例。

​ 文件路径如下:conda的安装目录–> envs --> xxx(虚拟环境名字) --> Lib --> site-packages --> panda3d–>etc–>Config.prc

​ 打开配置文件后,在最后一行添加上代码load-file-type p3assimp

3.示例

​ 添加好配置文件后,代码中尝试下,在爱给网上下载如下2个模型:

​ 加载代码如下:

from math import pi, sin, cosfrom direct.showbase.ShowBase import ShowBasefrom direct.task import Taskfrom direct.actor.Actor import Actorfrom panda3d.core import DirectionalLightclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.setBackgroundColor(r=0.2549, g=0.41176, b=0.88235, a=0.4)# 创建灯光--3D模型显示问题dlight = DirectionalLight('my dlight')self.dlnp = self.render.attachNewNode(dlight)# Load the environment model.self.scene = self.loader.loadModel("models/environment")# Reparent the model to render.self.scene.reparentTo(self.render)# Apply scale and position transforms on the model.self.scene.setScale(0.25, 0.25, 0.25)self.scene.setPos(-8, 40, 0)# Add the spinCameraTask procedure to the task manager.self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")self.submarine = self.loader.loadModel("submarine.obj")self.submarine.setScale(0.001, 0.001, 0.001)self.submarine.setHpr(90, 90, 0)self.submarine.setPos(10, 20, 5)self.submarine.reparentTo(self.render)self.submarine.setLight(self.dlnp)self.beauty = self.loader.loadModel("./assets/anika/anika.obj")self.beauty.setScale(5, 5, 5)self.beauty.setHpr(90, 90, -90)self.beauty.setPos(0, 0, 0)self.beauty.reparentTo(self.render)# self.beauty.setLight(self.dlnp)# Define a procedure to move the camera.def spinCameraTask(self, task):angleDegrees = task.time * 6.0angleRadians = angleDegrees * (pi / 180.0)self.camera.setPos(20 * sin(angleRadians), -20 * cos(angleRadians), 3)self.camera.setHpr(angleDegrees, 0, 0)return Task.contapp = MyApp()app.run()

​ 展示效果如下图所示:

​ 本文对应的3D模型文件下载链接如下:

3D模型:潜艇、人物obj模型-CSDN文库

​ 本文到这里也就结束了,这也是我在开发过程中遇到的问题。本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,因为才疏学浅,对3D建模很多知识都是了解皮毛,如果有什么错误,还请批评指正。

​ 如果本文能对你有所帮助,还请给点赞、收藏、关注,给博主一波三连。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。