You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:07:03