2024年Go最新google glb 模型的 webXR 演示_dom overlay(1),最详细的docker中安装并配置redis

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 场景:场景就像虚拟空间,具有坐标信息并设置渲染的内容和位置。因此,我们可以添加多个对象(3D 模型)、灯光并移除它们。
  • 渲染器:它显示/绘制场景。Threejs 使用 webGL 进行渲染和图像处理。
  • 相机:有多种类型的相机。我们将使用透视相机,它可以根据您的观察点工作并根据观察位置改变对象大小。
// inside BeagleARView component 
  const initScene = (gl, session) => {
    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera(
      75, // fov (angle, field of view)
      window.innerWidth / window.innerHeight, // aspect
      0.1, // frustum near length
      1000, // frustum far length
    );

现在在这个 initScene 函数中,我们将加载我们的 3D 模型

//add this at top below threejs import
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const Beagle = require('./beagle.glb')


//continue now in init function
    // load our gltf model
    var loader = new GLTFLoader();
    loader.load(
      Beagle,
      gltf => {
        model = gltf.scene;
        model.scale.set(1.8, 1.8, 1.8);
        model.castShadow = true;
        model.receiveShadow = true;

        mixer = new THREE.AnimationMixer(model);
        action = mixer.clipAction(gltf.animations[0]);
        action.setLoop(THREE.LoopRepeat, 15);
      },
      () => {},
      error => console.error(error),
    );
// we have only loaded the object haven't added that in scene now. 
// we will do it later

在同一个 fnc 中,我们现在需要在我们的 3D 模型上添加一些光。我们将使用聚光灯来正确聚焦对象并获得投射阴影功能。

spotLight = new THREE.SpotLight(lightSpotColor, lightSpotIntensity);
spotLight.position.set(1, 1,  -9);
spotLight.target = scene;
//spotLight.castShadow = true; // for now we will not work on shadows
scene.add(spotLight);

我们已经完成了场景、灯光和 3D 模型加载部分,现在我们将添加最后一个 threejs 设置部分,即渲染器。

  // create and configure three.js renderer with XR support
    renderer = new THREE.WebGLRenderer({
      antialias: true,
      alpha: true,
      autoClear: true,
      context: gl,
    });
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.xr.enabled = true;
    renderer.xr.setReferenceSpaceType('local');
    renderer.xr.setSession(session);

    // simple sprite to indicate detected surfaces
    reticle = new THREE.Mesh(
      new THREE.RingBufferGeometry(0.12, 0.15, 20).rotateX(-Math.PI / 2),
      new THREE.MeshPhongMaterial({ color: 0x0fff00 }),
    );
    // we will update it's matrix later using WebXR hit test pose matrix
    reticle.matrixAutoUpdate = false;
    reticle.visible = false;
    scene.add(reticle);
}
// closing intiScene

在上面的代码中,我们添加了矩形对象,这将有助于识别我们指向相机的表面区域。


reticle image

在 initScene 中设置完所有 threejs 之后,我们现在将开始做与 webxrSession 相关的事情,我们称之为 initScene。

如果没有用户交互,我们将无法启动 webxrSession 我们将首先在我们的 jsx 返回中添加一个按钮

const xrButton = useRef(null);

return (
// id xrOverlay will be used later
<div id="xrOverlay">
  <button id="xrbutton"  ref={xrButton} onClick={onXRButtonClick}> 
    Start experience
  </button>
</div> )

  function checkXR() {
    if (!window.isSecureContext) {
      // show message to use secure connection, 
      // webXR need https for giving device permission
    }
    if (navigator.xr) {
     xrButton?.current?.disabled = false;
    } else {
     xrButton?.current?.disabled = true
      // show message that this device or browser does not support webXR
    }
}

  React.useEffect(() => {
    checkXR();
  }, []);

我们添加了检查是否支持 XR 的功能。现在我们将处理启动 webXR 会话的主要部分,其中包含我们需要的命中和放置功能所需的功能。

我们将要求immersive session提供dom-overlay, local, and hit-test功能。

  • dom-overlay:它允许我们在会话时在屏幕上添加 html DOM 内容。
  • local:在会话开始时启用您的设备作为视图位置。
  • hit-test:它提供了我们击中并想要放置我们的 3D 模型的表面信息。

我们可以根据我们的需要请求更多功能,例如hand-tracking, depth sensing等。

 let xrSession = null;
  let xrRefSpace = null;
  let xrHitTestSource = null;

  function onXRButtonClick() {
    if (!xrSession) {
      navigator.xr
        .requestSession('immersive-ar', {
          optionalFeatures: ['dom-overlay'],
          requiredFeatures: ['local', 'hit-test'],
          domOverlay: { root: document.getElementById('xrOverlay') },
        })
        .then(onSessionStarted, onRequestSessionError);
    } else {
      xrSession.end();
    }
  }

我们已经通过document.getElementById(‘xrOverlay’)了,任何对此 DOM 的输入和交互都只能用于 xrSession 操作。

 function onSessionStarted(session) {
    setIsWebXRStarted(true);
    xrSession = session;

    // create a canvas element and WebGL context for rendering
    session.addEventListener('end', onSessionEnded);
    let canvas = document.createElement('canvas');
    gl = canvas.getContext('webgl', { xrCompatible: true });
    session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });

   // here we have register source from where we want to get hit test result in surronding         


![img](https://img-blog.csdnimg.cn/img_convert/9fe12974355c158c032df70fd415d830.png)
![img](https://img-blog.csdnimg.cn/img_convert/796a02bab5c8853ca7a05f4f709708ce.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Uniapp微信小程序,要渲染fbx或者glb模型,可以通过使用THREE.js库来实现。 首先,您需要将fbx或glb模型文件添加到您的Uniapp项目。可以直接将模型文件放置在项目的静态资源目录下,或者通过引入第三方插件来处理模型文件的加载和渲染。 然后,您可以创建一个新的Uniapp页面来显示模型。在该页面,使用THREE.js库的相关方法来加载模型文件,并将其渲染到页面上。 在加载模型文件之前,需要先引入THREE.js库。可以在页面的script导入库文件,并创建一个渲染器。然后,使用THREE.js提供的加载器来加载fbx或glb模型文件。 当模型文件加载完成后,可以创建一个场景、摄像机和光源来对模型进行渲染。通过THREE.js提供的相机控制器,可以调整视角和交互方式。 最后,将渲染器输出的结果添加到页面,用于显示模型。可以通过canvas元素或其他合适的元素将渲染器的输出添加到页面上。 需要注意的是,在Uniapp微信小程序使用THREE.js库要保证库文件和相关资源的正确路径,并且需要处理好模型的尺寸和纹理等问题,以确保模型在小程序正确显示。 总而言之,通过使用THREE.js库,在Uniapp微信小程序渲染fbx或glb模型,可以通过加载模型文件、创建场景和渲染器等步骤来实现。这样可以使得小程序的用户能够在界面上直观地观看和交互模型。 ### 回答2: 在Uniapp微信小程序渲染fbx或glb模型可以通过引入相关的三维库来实现。首先,需要使用Uniapp的npm模块管理器(插件市场下载)将相关的三维库安装到项目。常用的三维库有THREE.js和Babylon.js等。 安装完三维库后,可以在小程序页面通过引入相应的库,创建场景、相机和渲染器。然后,通过加载fbx或glb模型文件,并将其添加到场景。这些库通过提供加载器的方式,可以将模型文件解析为可渲染的对象。 加载模型文件后,可以设置其位置、旋转、缩放等属性,以及添加纹理材质。同时,可以根据需要设置光照、阴影等效果,使模型更加逼真。 随后,调用渲染器的渲染方法将场景和相机渲染到画布上,从而实现对fbx或glb模型的渲染。可以通过监听事件或者动画控制库来实现模型的交互和动画效果。 需要注意的是,由于Uniapp是跨平台开发框架,一些平台可能不支持加载fbx或glb模型,因此在开发过程需要对各个平台的兼容性进行测试和处理。 总之,借助Uniapp的扩展性,结合相关的三维库,可以在微信小程序轻松实现对fbx或glb模型的渲染和展示,为用户提供更加丰富的视觉体验。 ### 回答3: 在Uniapp,要渲染FBX或者GLB模型,可以使用uni-3d-model组件来实现。首先,需要将FBX或者GLB模型文件添加到项目的static文件夹,然后使用uni-3d-model组件来加载和渲染模型。 1. 在页面的vue文件,引入uni-3d-model组件: ``` <template> <uni-3d-model :src="modelUrl"></uni-3d-model> </template> <script> export default { data() { return { modelUrl: '/static/model.fbx' // 或者'/static/model.glb' } } } </script> ``` 2. 在uni-3d-model组件,通过设置src属性将模型文件路径传递给组件,使其加载并渲染模型。其,modelUrl的值应为FBX或者GLB模型文件在static文件夹的相对路径。 需要注意的是,渲染FBX或者GLB模型需要在小程序的云开发环境进行,因此在使用uniapp编译小程序之前,需要先将uni-3d-model组件配置为“原生小程序组件”。具体操作可参考uni-3d-model组件的官方文档。 通过以上步骤,就可以在uniapp微信小程序成功渲染FBX或者GLB模型了。同时,可以根据需要,设置组件的其他属性,如大小、位置、旋转等,来调整模型在小程序的展示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值