Threejs - 案例学习 - fps game - 碰撞检测模板。

960 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

学习链接

Threejs 官网的案例

  • 主要学习内容
  • 模型纹理 - 如何给模型添加纹理。
  • 加载模型 - 处理图片。

three.js examples (threejs.org)

02.gif

简介

学习内容来源,Threejs官网案例,

  • 可以在场景中移动,
  • 有碰撞检测系统,
  • 点击屏幕,锁定视角,可以跟随鼠标左右移动,
  • 在场景中点击,可以发射小球,小球也带有碰撞检测功能。
  • 按WASD,可以实现移动

整个场景的基本交互功能已经有了,一个场景,一些交互!而且模型细节也很到位!

代码细节

其他代码保持不动,修改的位置主要有两点,

  • helper.visible = true, 这样我们就能看出,碰撞检测是怎么检测的了。。

  • 修改模型路径,用我们自己的模型,碰撞检测的模板就出来了!!

  • image.png

  • image.png

设置为true的效果,这里的黄色的线就是各个位置的分界线!

02.gif

模型修改

整个案例当作模板用,这里主要修改一下模型。。

新建一个平面

在Blender中打开案例的模型

image.png

新建一个平面,试试灵不灵。。

image.png

导出为gltf格式,保存到threejs官网源码 模型的文件夹下。。

image.png

效果如下!可以看到,我们的模型,成功运行在场景里了!

02.gif

修改材质

可以看出案例给出的模型,材质平铺的很均匀

image.png

Blender中点击UV Editing面板 - 查看UV

image.png

可以看到整个纹理都是通过一张贴图,然后平铺而成的。这里的重点就是各个位置的比例关系,平铺后,每个部分都是一样的大小,需要对模型进行UV展开

image.png

我们新建几个模型,使用和案例模型同样的材质。。

image.png

image.png

把模型合并到一个图层,进入编辑模式,按U,选中Smart UV Project,智能展开。

image.png

展开后的结果

image.png

我们把图形整体放大(比贴图大,它会自动平铺的!) - 效果还不错。。

image.png

导出为gltf,把原本的模型文件覆盖掉,或者改个名字,设置 - helper.visible = false;

  • 碰撞检测效果挺好,整体贴图感觉还行。。

02.gif

模型下载

自己建的模型,可以运行,现在我们下载模型试试,提升视觉效果!

  • 在Sketchfab上下载模型。

image.png

在Blender中打开,然后导出为gltf格式,程序中运行一下!

02.gif

效果还不错,就是文件有点大。。有14M,,我们压缩一下模型文件。。

image.png

主要修改图片的大小

image.png

image.png

现在有1M了,可以接受。。(时间也好长。。)

image.png

加载时间比较

  • 加载压缩后的时间 - 1M - 12.59s

image.png

  • 加载模型源文件 - 14M - 12.61s

image.png

。。额。好像,,不压缩的还好一点,,场景图片还清楚一点。。。

官方案例执行时间 - 96KB - 1.47s

image.png

差距好大。。问题在哪里????。。。

总结

主要是修改了模型文件,学习了如何通过一张贴图,平铺整个模型,还有下载后的模型,通过压缩图片,来改变模型的大小。执行时间倒是没有变快。。问题出在哪里,待研究。。

这个案例是在games之下的,可以快速加载场景,当作碰撞检测的模板使用,结合射线点击,即可实现简单的互动小游戏了,增加一些div,当作文字提示,还有音视频,案例就完整多了。。

祝大家夏至快乐!