Panda3D渲染立方体异常:显示红矩形且无法调整的问题求助
问题描述
在Panda3D中渲染红色立方体时,窗口仅显示红色矩形。调整相机位置(self.camera.setPos())、立方体位置(self.cube.setPos())均无效,缩放立方体(self.cube.setScale())会使其消失,即使设置self.cube.setScale(0,99999, 1, 1)也没用。
目标是实现一个旋转的红色立方体,已尝试修改Blender导出的Cube.glb模型的UV映射、调整相机PerspectiveLens()参数、更换IDE运行等方法,均未解决。
代码示例
import ctypes from panda3d.core import SceneGraphAnalyzerMeter from panda3d.core import loadPrcFileData from panda3d.core import PerspectiveLens from direct.showbase.ShowBase import ShowBase def screen_resolution(): u32 = ctypes.windll.user32 screen_width = u32.GetSystemMetrics(0) screen_height = u32.GetSystemMetrics(1) string_result = str(screen_width) + " " + str(screen_height) return string_result loadPrcFileData("", "load-display pandagl") loadPrcFileData("", "window-title Wild Space Residents") #loadPrcFileData("", "win-size " + screen_resolution() + "x24") loadPrcFileData("", "color-bits 24") #loadPrcFileData("", "fullscreen 1") #loadPrcFileData("", "framebuffer-hardware 1") class WSR(ShowBase): def __init__(self): ShowBase.__init__(self) self.lens = PerspectiveLens() self.lens.setAspectRatio(1920 / 1080) self.lens.setFov(120) self.lens.setNear(1) self.lens.setFar(50) self.cam.node().setLens(self.lens) self.camera.setPos(10, -10, 0) self.cube = self.loader.loadModel("\\models\\cube\\Cube.glb") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(0, 0, 0) self.cube.setHpr(0, 0, 0) self.cube.setColor(1, 0, 0, 1) # self.scene_graph() def scene_graph(self): self.setFrameRateMeter(False) self.messenger.toggleVerbose() self.render.analyze() app = WSR() app.run()
设备配置
- CPU: AMD Ryzen 5 2600 Six-Core Processor
- GPU: Nvidia GTX 1660ti (6GB显存)
- RAM: 16GB
- 分辨率: 1920x1080
解决方法
1. 修正模型坐标系与加载路径
- Panda3D以Y轴为前向轴,Blender默认Z轴为前向,导出GLB时需勾选Forward: Y Forward、Up: Z Up,匹配Panda3D坐标系,避免模型轴向错位导致显示异常。
- 模型路径改用正斜杠
/或原始字符串r"\models\cube\Cube.glb",避免转义错误导致模型加载失败。
2. 调整相机参数
- 120度FOV过大,会引发严重透视畸变甚至挤出视野,建议改为75度左右:
self.lens.setFov(75) - 当前相机位置
(10, -10, 0)可能导致立方体处于相机侧/背面,调整到正对模型的位置并添加看向逻辑:self.camera.setPos(0, -5, 0) self.camera.lookAt(self.cube)
3. 修复缩放参数错误
self.cube.setScale(0,99999, 1, 1)参数格式错误,setScale仅需传入3个轴向缩放值或单个统一缩放值,正确写法示例:
self.cube.setScale(2, 2, 2)
4. 添加旋转逻辑实现目标
在__init__中添加任务实现立方体旋转:
self.taskMgr.add(self.rotate_cube, "RotateCubeTask") def rotate_cube(self, task): self.cube.setHpr(self.cube.getH() + 1, self.cube.getP() + 1, self.cube.getR() + 1) return task.cont
5. 验证模型加载状态
添加加载验证代码,确认模型是否正确读取:
if not self.cube: print("模型加载失败!检查路径是否正确") else: print("模型加载成功")
内容的提问来源于stack exchange,提问作者gamer_072008
相关产品推荐
相关产品推荐

