Home › Forums › Games202-高质量实时渲染 › 作业0 结果不稳定,有时模型显示不全
Tagged: 作业0
- This topic has 15 replies, 7 voices, and was last updated 1 month ago by
鲤鱼王.
-
AuthorPosts
-
-
xiexuefeng
Participant+1,不知道是啥问题,反正只能看到202和光源(我是Mac + Chrome/Safari);不过我自己用Three.js(npm包)加载就好了;
-
刀客塔
Participant能麻烦分享一下具体步骤吗?
-
xiexuefeng
Participant其实就是用three.js的OBJLoader加载课程给的obj模型就是了,没啥特别的;
https://threejs.org/docs/?q=OBJ#examples/zh/loaders/OBJLoader
-
Misaka Mahiru
Participant大佬,我把作业0里的OBJLoader用官方文件换掉了之后依然两眼一黑。。js小白。。具体操作是什么可以指点一二嘛,,Orz
-
-
-
-
爱登堡
Participant我也遇到一样的问题,用官方的three.js,直接替换项目中的three.js,然后就会出现其他问题。
-
Misaka Mahiru
Participant踢踢lz,找到解决方案了嘛Orz
-
刀客塔
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
刀客塔.
-
Misaka Mahiru
Participant根据大佬方法,onError函数正常报错了。但是也没有研究出来为什么会有TypeError: Failed to execute ‘texImage2D’ on ‘WebGLRenderingContext’: Overload resolution failed.这个错误。
不过大佬是怎么刷新出来的呢?我用的win10+edge+vs环境,一直只能看到光源和202.换了chrome直接两眼一黑只有UI了。。-
刀客塔
Participant差不多,不过我是用的 Chrome。两眼一黑只有UI还有一个可能性是 three.js 没下载下来,因为这个是从 cloudflare 上下载的,需要挂代理。
刷新就是CTRL+R多按几次……
-
Misaka Mahiru
Participant谢谢!挂梯子+刷新好几次终于出来了。。那我也不去管那些报错了Orz
-
-
-
This reply was modified 1 month, 2 weeks ago by
-
刀客塔
Participant芭比Q了,作业1我刷了好久也没刷出来……
看来没办法是要学习一下 three.js 了…… -
刀客塔
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. -
loong
Participant加载不稳定原因楼上说的挺清楚了,可以在index.html中<head>中最上面(21行)加<link rel=”preload” href=”/assets/mary/MC003_Kozakura_Mari.png” as=”image” type=”image/png” crossorigin/>让材质图片预先加载
-
鲤鱼王
Participant如果提示请使用有效的as值,或者不支持的type值,可以删掉type属性
-
-
雅各布
Participant预加载的方案比较优雅,实操有效,谢谢了。
-
AuthorPosts
- You must be logged in to reply to this topic.