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

Ursina(基于Panda3D)添加GLSL着色器时出现“does not contain #version”错误的求助

Ursina(基于Panda3D)添加GLSL着色器时出现“does not contain #version”错误的求助

看起来你遇到的问题是典型的「明明在着色器里加了#version,但系统却报错说找不到」的情况,我之前折腾Panda3D和Ursina着色器的时候也踩过类似的坑,给你几个排查和解决的方向:

  • 先排查着色器文件的加载问题
    有时候Ursina的Shader类直接传入文件路径时,可能会因为工作目录不匹配(比如你从IDE的非脚本根目录运行代码)导致没读到正确的文件内容,相当于传入了空的着色器代码,自然会触发#version缺失的错误。你可以试试手动读取文件内容再传入Shader,替换原来的着色器初始化代码:

    # 替换原来的testShader定义部分
    with open("testVertexShader.glsl", "r", encoding="utf-8") as vf:
        vertex_code = vf.read()
    with open("testFragShader.glsl", "r", encoding="utf-8") as ff:
        frag_code = ff.read()
    
    testShader = Shader(Shader.GLSL, vertex=vertex_code, fragment=frag_code)
    

    这种方式能确保你传递给Ursina的是着色器文件的完整内容,绕开路径解析可能带来的问题。

  • 检查#version行的格式是否绝对合规
    GLSL对#version的位置要求非常严格:它必须是着色器代码的第一行,前面不能有任何空白字符(空格、换行、制表符),甚至不能有UTF-8文件的BOM头(有些编辑器保存UTF-8时会自动添加)。你可以用Notepad++这类编辑器打开着色器文件,开启「显示所有字符」的功能,确认#version是真正的第一行,没有任何隐藏字符在它前面。

  • 升级Ursina和依赖的Panda3D
    旧版本的Ursina在处理GLSL着色器文件加载时可能存在底层bug,导致文件内容没有正确传递给Panda3D。你可以执行下面的命令升级到最新版本,说不定问题直接就消失了:

    pip install --upgrade ursina
    
  • 尝试兼容更低版本的GLSL
    如果你用的#version 150对应OpenGL 3.2,要是前面的方法都没用,可以试试换成#version 120(兼容更多老环境),不过要注意对应的GLSL语法也要匹配这个版本的要求,避免出现新的语法错误。

你可以按照这个顺序一步步排查,大概率是文件加载或者格式的问题,先试试手动读取文件内容的方案,应该能解决大部分情况。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:54:35