首页 > 其他分享 > UnityGLTF插件加载模型时,emissiveFactor解析报错

UnityGLTF插件加载模型时,emissiveFactor解析报错

时间:2023-09-27 12:00:36浏览次数:46  
标签:插件 JsonToken TokenType color UnityGLTF 报错 reader new emissiveFactor

项目中遇到使用 UnityGLTF插件加载GLTF模型时报错,如下图:

 根据报错信息,我们找到GLTF文件中,第[五]个材质的描述:

    {
      "name": "11_-_Default木质长廊1.bmp_alpha",
      "occlusionTexture": {
        "index": 0,
        "texCoord": 1
      },
      "pbrMetallicRoughness": {
        "baseColorFactor": [
          0.8470589,
          0.43921572,
          0.0,
          0.7
        ],
        "metallicFactor": 0.099999994,
        "roughnessFactor": 1
      },
      "alphaMode": "BLEND",
      "emissiveFactor": [
        0.799999952,
        0.799999952,
        0.799999952,
        1.0
      ]
    }

其中emissiveFactor的值是:

            "emissiveFactor": [
                0.799999952,
                0.799999952,
                0.799999952,
                1
            ]

然后,我们再看一下插件源码:

        public static Color ReadAsRGBColor(this JsonReader reader)
        {
            if (reader.Read() && reader.TokenType != JsonToken.StartArray)
            {
                throw new Exception(string.Format("Invalid vector value at: {0}", reader.Path));
            }

            var color = new Color
            {
                R = (float) reader.ReadAsDouble().Value,
                G = (float) reader.ReadAsDouble().Value,
                B = (float) reader.ReadAsDouble().Value,
                A = 1.0f
            };

            if (reader.Read() && reader.TokenType != JsonToken.EndArray)
            {
                throw new Exception(string.Format("Invalid color value at: {0}", reader.Path));
            }

            return color;
        }

可以看到Alpha直接用1.0f赋值,又由于emissiveFactor中有四个分量,就会导致下一个if中的

reader.TokenType != JsonToken.EndArray 是成立的,所以就抛出了异常

 

修改后的代码:

        public static Color ReadAsRGBColor(this JsonReader reader)
        {
            if (reader.Read() && reader.TokenType != JsonToken.StartArray)
            {
                throw new Exception(string.Format("Invalid vector value at: {0}", reader.Path));
            }

            var channels = new float[4] { 1f, 1f, 1f, 1f };

            for (int i = 0; i < 4; i++)
            {
                var readObject = reader.ReadAsDouble();
                if (reader.TokenType == JsonToken.EndArray)
                {
                    UnityEngine.Debug.LogError(string.Format("Irregular color value at: {0}", reader.Path));
                    break;
                }
                if (readObject.HasValue)
                {
                    channels[i] = (float)readObject.Value;
                }
            }

            if (reader.TokenType != JsonToken.EndArray && reader.Read() && reader.TokenType != JsonToken.EndArray)
            {
                throw new Exception(string.Format("Invalid color value at: {0}", reader.Path));
            }

            var color = new Color
            {
                R = channels[0],
                G = channels[1],
                B = channels[2],
                A = channels[3]
            };

            return color;
        }

 

 

 
 

标签:插件,JsonToken,TokenType,color,UnityGLTF,报错,reader,new,emissiveFactor
From: https://www.cnblogs.com/zerozabuu/p/17732323.html

相关文章

  • 【教程】VIM的使用第九章-成对编辑的插件vim-surround以及收尾一些好用的常用插件
    书接上回,我们继续讲剩下的一些插件内容,以及对剩余的一些内容进行补充,这也就是vim的教程最后一章了~大家可以脱离苦海了~~但是后期想用好vim还是需要大家积极的练习多用。插件vim-surround在日常开发中我们需要成对的修改,比如一次性将单引号改为双引号,就可以用到这个插件了地址......
  • UnityGLTF插件加载模型时,OcclusionTexture贴图显示错误的问题处理
    工作中遇到使用UnityGLTF插件加载GLTF模型时,贴图显示错误的问题,如下图 检查材质时发现,把OcclusionTexture去掉就看起来正常了  看来是插件对OcclusionTexture的解析出了问题, 那么我们来看一下,GLTF中对OcclusionTexture的描述片段,是这样:"name":"5木质长廊1.bmp","o......
  • playwright python环境运行报错 ImportError: DLL load failed
    网上建议网上好多文章介绍playwright的环境搭建,用以下两条语句即可完成pipinstallplaywrightplaywrightinstall安装完毕后,尝试执行一段经典的pythondemofromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch()page......
  • Idea配置热部署插件Jrebel
    Idea配置热部署插件Jrebel先从pulgins下载插件jrebelidea内配置jrebel百度下载reverseproxy_windows_amd64.exe,下载后直接打开。会显示一个终端控制台。之后不用管挂那做下一步(这个界面从Idea的help最下面有JRebel-Activation打开)teamURL第一行http://localhost:8888/......
  • 视频融合平台EasyCVR接入华为ivs3800平台提示400报错的原因及解决方法
    青犀视频平台的开源EasyDarwin视频监控解决方案EasyCVR在复杂网络环境中表现出色。它能够将分散的各类视频资源集中管理,实现统一汇聚和整合。EasyCVR支持多种画面窗口播放模式,包括1、4、9、16个画面窗口,同时可以播放多路视频流,并且支持视频定时轮播功能。此外,EasyCVR还兼容多种播......
  • VUE 3.0使用Tinymce编辑器JS报错解决
    接上篇文章写到的Tinymce编辑器,突然发现了,多点击几次编辑弹框内容就会变空白,而且JS报错了。如下图: 点开这个js就能发现错误的地方了改这两个文件就可以了,代码如下:if(typeofe.content!=='string'){e.content=e.content.innerHTML;}    这样......
  • Qt报错: variable has incomplete typte ‘QJsonObject’
    Qt常见运行失败的记录1.变量声明未实例化变量在头文件声明了,没new出来直接使用,导致程序运行崩溃2.定义变量时候下面出行红线,出现variblehasincompletetype‘QTextStream’variblehasincompletetype'QTextStream未添加QTextStream头文件3.Qt信号与槽连接失败的几......
  • odoo xml文件中&出现报错问题:Unescaped & or nonterminated character/entity referen
    解决方式1:将“&”改写为“&amp;” 解决方案2:使用CDATA区:当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低,这时应该使用CDATA段。在CDATA段中出现的“ < ”、“ > ”、“ " ”、“ ’ ”、“&”都无需使用转义字符,但CDATA段中不能包含“]]>”,......
  • 转!!java ssh远程服务器报错 解决方法 Key exchange was not finished, connection is c
    转自:https://blog.csdn.net/weixin_45266856/article/details/129754122是ssh中的key交换算法不兼容导致 ssh报错解决:vi/etc/ssh/sshd_configKexAlgorithmsdiffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-gro......
  • ls报错修改环境变量
    问题:系统找不到环境变量在终端输入:ls后显示:root@wei:/etc#lsCommand'ls'isavailablein'/bin/ls'Thecommandcouldnotbelocatedbecause'/bin'isnotincludedinthePATHenvironmentvariable.ls:commandnotfound解决办法:直接在终端输入:expor......