Home Forums Games202-高质量实时渲染 作业0 结果不稳定,有时模型显示不全

Tagged: 

Viewing 8 reply threads
  • Author
    Posts
    • #11147 Score: 0
      刀客塔
      Participant

      我这里作业0 有的时候只会显示202和光源,不会显示模型(如图)。有的时候显示正常模型。
      每次刷新有一定概率正常,一定概率不正常,大概三七开,只显示202的时候多一些。
      我在 Windows 和 Mac 上都尝试过,都是这样的。
      有人遇到过类似的问题吗?

      这样的话怕之后出错不知道是代码有问题还是随机的浏览器问题。

      Attachments:
      You must be logged in to view attached files.
    • #11153 Score: 0
      xiexuefeng
      Participant

      +1,不知道是啥问题,反正只能看到202和光源(我是Mac + Chrome/Safari);不过我自己用Three.js(npm包)加载就好了;

    • #11180 Score: 0
      爱登堡
      Participant

      我也遇到一样的问题,用官方的three.js,直接替换项目中的three.js,然后就会出现其他问题。

    • #11200 Score: 0
      Misaka Mahiru
      Participant

      踢踢lz,找到解决方案了嘛Orz

    • #11201 Score: 0
      刀客塔
      Participant

      暂时有了一个折衷的解决办法(这很图形学)。因为这个事情可以通过刷新解决,所以我只要想办法知道是模型加载出了问题,还是我写的代码有问题即可。如果代码没问题,那么多刷新几次就可以了。

      那怎么样知道是不是模型加载出了问题呢?我看了一下 three.js 的 OBJLoader 的文档,发现作业0中的 onError 函数实现的有问题,将至改成

      function onError(err) {
      console.error( ‘An error happened:’ , err);
      }

      即可。

      在渲染时打开 Console,如果有 err 就是模型加载的问题,如果没有 err,应该就是预期的结果了。

      这个 err 我也具体看了一下,是 material 的 img 没有加载出。但具体为什么没有加载出,还没有研究出来。图形学新手。

      • This reply was modified 1 month, 2 weeks ago by 刀客塔.
      • #11203 Score: 0
        Misaka Mahiru
        Participant

        根据大佬方法,onError函数正常报错了。但是也没有研究出来为什么会有TypeError: Failed to execute ‘texImage2D’ on ‘WebGLRenderingContext’: Overload resolution failed.这个错误。
        不过大佬是怎么刷新出来的呢?我用的win10+edge+vs环境,一直只能看到光源和202.换了chrome直接两眼一黑只有UI了。。

        • #11204 Score: 0
          刀客塔
          Participant

          差不多,不过我是用的 Chrome。两眼一黑只有UI还有一个可能性是 three.js 没下载下来,因为这个是从 cloudflare 上下载的,需要挂代理。

          刷新就是CTRL+R多按几次……

          • #11205 Score: 0
            Misaka Mahiru
            Participant

            谢谢!挂梯子+刷新好几次终于出来了。。那我也不去管那些报错了Orz

    • #11207 Score: 0
      刀客塔
      Participant

      芭比Q了,作业1我刷了好久也没刷出来……
      看来没办法是要学习一下 three.js 了……

    • #11218 Score: 0
      刀客塔
      Participant

      研究了一下,知道了为什么会刷不出来模型,从原理上讲,应该大部分人都刷不出来才对。

      loadOBJ.js 中,materials.preload(); 其实是一个异步方法,这个方法会去 load mtl文件,image 文件的路径也在其内,然而在这步方法之后紧接着就去 load object 并且使用了 mtl 文件中的 image,因为前一步是异步的,这个时候 material 其实还没有load 完成,导致了 object load 时的报错。

      如果使用 Promise 方法可能会比较优雅,不过代码改动量比较大。我也是JS小白。

      一个比较 tricky 的方法就是在 load object 的前等一等,最后这段代码如图所示,我用一个函数wrap了一下load object 的过程,然后使用 setTimeout 等了100ms。

      Attachments:
      You must be logged in to view attached files.
    • #11301 Score: 0
      loong
      Participant

      加载不稳定原因楼上说的挺清楚了,可以在index.html中<head>中最上面(21行)加<link rel=”preload” href=”/assets/mary/MC003_Kozakura_Mari.png” as=”image” type=”image/png” crossorigin/>让材质图片预先加载

      • #11337 Score: 0
        鲤鱼王
        Participant

        如果提示请使用有效的as值,或者不支持的type值,可以删掉type属性

    • #11324 Score: 0
      雅各布
      Participant

      预加载的方案比较优雅,实操有效,谢谢了。

Viewing 8 reply threads
  • You must be logged in to reply to this topic.