如何在 Three.js 中进入全屏?

2024-05-26

我已经尝试了数十种不同的方法几个小时,但没有一个有效,如下所示:

document.body.addEventListener("keydown", function() {
  THREEx.FullScreen.request();
}, false);

如何让Three.js全屏显示? https://stackoverflow.com/questions/10672101/how-to-make-three-js-fullscreen#10672958

  1. 首先,THREEx 不是 THREE.js。我不想要某人的扩展(甚至没有完整地编写和澄清)
  2. Three.js 文件中根本不存在“全屏”一词。
  3. 也没有 Three.js 书籍提及如何进入全屏。
  4. 就我而言,所有 js 和 webgl 代码都驻留在 JS 文件中,而不是 HTML(如果重要的话)。

那么,这有可能吗?


我有一个包含在 div 中的 Three.js 场景的项目,我添加了一个按钮将其拉伸到全屏模式(和返回)。如果 Three.js 能够在一个函数调用上实现一项功能,那就太好了,但手动添加它也不是太困难。

需要考虑的几件事:

  1. 浏览器具有全屏模式(Chrome 中的 F11),可以从代码中调用一个 API 来使浏览器进入全屏,因此您可以通过单击按钮来完成。当浏览器进入全屏状态时,选项卡和任务栏都会消失,所有屏幕空间都可用于您的 HTML 页面。

    
    
        function openFullscreen() {
          var elem = document.getElementById("id-webglcanvas");
          if (elem.requestFullscreen) {
            elem.requestFullscreen();
          } else if (elem.mozRequestFullScreen) { /* Firefox */
            elem.mozRequestFullScreen();
          } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari & Opera */
            elem.webkitRequestFullscreen();
          } else if (elem.msRequestFullscreen) { /* IE/Edge */
            elem.msRequestFullscreen();
          }
          elem.style.width = '100%';
          elem.style.height = '100%';
        }
      
  2. Three.js 场景(渲染器、画布)位于某个 div 元素内。它由 Three.js lib 创建为 canvas 元素,并通过“appendChild”附加为子元素。检查您的 div 元素,您将在那里看到 canvas 子元素。这个div元素可以有自己的宽度和高度,但是场景/画布的宽度和高度是使用renderer.setSize函数设置的,并且它独立于div。

    
    
        renderer = new THREE.WebGLRenderer( { antialias: true } );
        renderer.setSize(sceneWidth, sceneHeight);
        var threeJSCanvas = document.getElementById("id-webglcanvas");
        threeJSCanvas.appendChild( renderer.domElement );
      
  3. 当您告诉浏览器进入全屏时,同时您希望将场景 div 高度和宽度设置为全屏大小(但最重要的是其位置从 0,0 开始),并且必须将渲染器大小设置为全屏高度和宽度。您可能想隐藏页面上的一些其他 div 元素,例如覆盖 GUI - 这样您的整个页面实际上就变成了带有渲染器的 div。有可能,您已经实现了“onWindowResize”函数,该函数可以在调整浏览器窗口大小时更改渲染器的宽度和高度,如果是这种情况,您将必须使该函数在全屏模式下运行良好,因为 - 它将被自动调用。所以让这个函数成为你的盟友。

    
    
        window.addEventListener( 'resize', onWindowResize, false );
        function onWindowResize() {
            if ( myGlobalFullscreenModeVariable) {
                var elem = document.getElementById("id-webglcanvas");
                var sceneWidth = window.innerWidth;
                var sceneHeight = elem.offsetHeight;
                camera.aspect = sceneWidth / sceneHeight;
                camera.updateProjectionMatrix();
                renderer.setSize( sceneWidth, sceneHeight );
            } else {
                // my other resize code
            }
        }
      
  4. 当用户离开全屏模式时,您必须手动恢复。更改 div 和渲染器大小、显示隐藏元素等。用户可以通过两种方式离开全屏 - 按 gui 按钮或 esc 按钮。您可以定义全屏模式更改时调用的函数,但需要将其添加为事件侦听器。

    
    
        if (document.addEventListener)
        {
            document.addEventListener('webkitfullscreenchange', fsChangeHandler, false);
            document.addEventListener('mozfullscreenchange', fsChangeHandler, false);
            document.addEventListener('fullscreenchange', fsChangeHandler, false);
            document.addEventListener('MSFullscreenChange', fsChangeHandler, false);
        }
        function fsChangeHandler()
        {
            if (document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement !== undefined) {
                /* Run code when going to fs mode */
            } else {
                /* Run code when going back from fs mode */
            }
        }
      

此代码尚未准备好开箱即用,因为您可能有不同的页面设置,但它确实列出了您必须考虑的所有内容才能使其工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Three.js 中进入全屏? 的相关文章

  • 使用 ThreeJS 获取球体纹理上的点击位置

    目前 我有一个带有纹理的球体 它绕 y 轴旋转 我还有在 3D 空间中单击的位置 以及球体上的旋转位置 我认为 目标 获取纹理上的位置 例如 我想获取我点击的图像的哪个方块 参见示例球体和下图 在实践中 我不会使用此图像 但我觉得这将是一个
  • ThreeJS bufferGeometry 位置属性在应用翻译时不会更新

    我使用 STLLoader 将 stl 加载到返回 BufferGeometry 的 ThreeJS 场景中 然后我用了 myMesh position set x y z myMesh rotation setFromQuaternion
  • 如何制作全屏java小程序?

    我正在用 Java 小程序设计一个心理学实验 我必须让我的 java 小程序全屏显示 执行此操作的最佳方法是什么以及我该如何执行此操作 由于我已经 3 年没有使用 java applet 我上次使用它是为了课程作业 我已经忘记了大部分概念
  • Three.js 对象的“中心”是什么?

    当我使用 Blender 对对象进行建模时 我能够明确定义其发生平移和旋转的中心位置 当使用 Three js 对象时 我似乎没有找到等效的对象 Three js 对象是否具有定义其 中心 位置的属性 如果不是 物体的中心是如何确定的 在
  • Three.js - 将 WebGL 和 CSS3D 与 iFrame 混合

    我准备了一个混合的工作页面WebGL and CSS3D 在SO的一点帮助下here https stackoverflow com questions 24681170 three js properly blending css3d a
  • Three.js :face4 生成三角形而不是正方形

    我正在尝试使用 tree js 自定义几何图形生成一个正方形 但是这段代码 var cubeGeo new THREE Geometry cubeGeo vertices push new THREE Vector3 25 25 25 cu
  • 如何在 Three.js 场景中包含 OVRManager?

    我创建了几个 Three js Javascript 演示应用程序 正在我的新 Oculus Go 中进行试验 我正在尝试让 Go 控制器在我的应用程序中执行某些操作 根据 Oculus 开发人员中心的说法 最好的办法是将 OVRManag
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • 在 Webpack 中使用 Three.js 以便我可以使用 OrbitControls 的正确方法是什么?

    在我的 webpack 配置中 resolve alias three path resolve node modules three build three js OrbitControls path resolve node modul
  • Android-全屏视频视图

    我正在尝试使此 VideoView 以全屏模式显示 public class ViewVideo extends Activity private String filename private static final int INSER
  • 如何在布局编辑器中模拟沉浸式模式

    我想在布局编辑器中全屏查看我的布局 我正在使用 eclipse 插件 我已经通过选择隐藏了 ActionBar NoActionBar组合中的主题 但导航栏是一个不同的故事 AFAIK 它只能使用代码中的标志来隐藏 我需要在活动 xml 文
  • 重新创建窗口而不破坏上下文

    这个问题是关于使用 OpenGL 的图形应用程序 当时我正在使用 GLFW 框架 但我考虑更改它 我的目标是让用户 尽可能 在全屏模式和窗口模式之间不断切换 此过程应该花费不到一秒的时间 并且可以在运行时发生 例如 看看游戏 我的世界 用户
  • 三.js、PointerLock和碰撞检测

    我正在开发一个 3D 虚拟家庭项目 除了碰撞检测之外 一切正常 我使用 PointerLockControls 来控制相机和移动 但我不确定如何检测每个可能方向的碰撞 为简单起见 我从与 0 0 0 上的简单立方体的向前和向后碰撞开始 ra
  • Tween JS 基础知识之三个 JS 立方体

    我是 Tween JS 的新手 尝试使用 Tween 制作一个向右移动的简单动画 下面是我在 init 函数中的代码 我使用的是三个 JS var geometry new THREE CylinderGeometry 200 200 20
  • ExitFullScreen 不起作用 + 无论如何要按键盘单击按钮?

    我的浏览器 Google Chrome 版本 33 0 1750 154 m Script function exitFullscreen var element document documentElement if element mo
  • 计算顶点法线

    我正在使用 3d 修改器https github com foo123 MOD3 https github com foo123 MOD3弯曲一个立方体 几何体更新 顶点位置更改 后 灯光不会更新 立方体仍然着色 就好像没有任何变化一样 所
  • 为什么环境光在此示例中不起作用?

    在以下示例中 环境光不起作用 一切都是黑色的 为什么会发生这种情况 我该如何解决它 如果我放聚光灯 它就可以工作 所以环境光一定有问题 但我遵循了文档 O
  • Morph 目标为 Three.js

    我正在尝试开始使用变形目标和 Three js 然而 关于这个主题的文档似乎并不多 当我查看源代码时 morphTargetInfluences 似乎是有魔力 这是如何运作的 我该如何使用这个 值为1就是全力吗 如何区分同一模型上的不同变形
  • 如何将 ThreeJS 与 PhoneGap 一起使用?

    这个探索是非常自我描述的 我已经用一个简单的 3D 立方体进行了测试 它在浏览器中运行良好 但只在模拟器中显示空白页面 有人说 Threejs 不能与 PhoneGap 一起使用 但也有人说他们使用过并且工作正常 在 Android 中 您
  • glClipPlane - webGL 中有等效的吗?

    我有一个 3D 网格 是否有可能像这样呈现剖面图 剪辑 glClipPlane在OpenGL中 我正在使用 Three js r65 我添加的最新着色器是 片段着色器 uniform float time uniform vec2 reso

随机推荐

  • 使用 SSH.NET SftpClient 设置扩展文件属性

    在使用 Renci SSH NET SFTP 库将文件从 Windows 上传到远程计算机 Ubuntu 16 04 LTS 后 我尝试使用扩展文件属性来存储一些信息 但属性没有得到保留 这就是我尝试设置扩展属性的方式 SftpFileAt
  • 如何获取 3G 调制解调器的 IP 地址?

    我的 GPRS 调制解调器有一张 SIM 卡 它可以连接Web Web 服务给它一个 IP 号码 我需要它 像那样 http www your ip address com http www your ip address com 我怎样才
  • Scrapy CrawlSpider 规则具有多个回调

    我正在尝试创建一个实现 scrapy CrawlSpider 的 ExampleSpider 我的 ExampleSpider 应该能够处理仅包含艺术家信息的页面 仅包含专辑信息的页面 以及其他一些包含专辑和艺术家信息的页面 我能够处理前两
  • 结构成员初始化 - 省略具有默认值的属性值

    我是 Swift 新手 正在关注在线文档 具体来说 我正在查看初始化 https docs swift org swift book LanguageGuide Initialization html https docs swift or
  • 使用 Objective-C 获取 Photoshop 的动作列表

    我正在使用 C 和 Obj C 编写一个与 Photoshop 交互的 OSX 应用程序 我一直在使用NSAppleScript使用动态构建的 AppleScript 来驱动 Photoshop 是的 这有点可怕 我希望能够以不同的方式驱动
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • opensc-pkcs 链接错误

    我正在尝试使用在 Redhat linux 5 上构建的 opensc pkcs11 so 但是 当我尝试在示例程序中使用时 它给出了链接错误 main cpp text 0x265 undefined reference to C Ini
  • C 指针与 Objective-C 指针

    我有 Objective C 背景 正在尝试扩展我在 C 方面的知识 然而 有一件事让我感到困惑 那就是 C 和 Obj C 中指针之间的区别 正如您在下面的示例中看到的 两种语言之间的行为似乎有点不同 我想知道您是否可以帮助解释原因 C
  • Gradle 解析策略 cacheDynamicVersionsFor 不起作用

    我想每次都推动 Gradle 重新下载我的 SNAPSHOT 依赖项 可以通过以下方式做到这一点 refresh dependencies 但我想以另一种方式以编程方式完成此操作 configurations all resolutionS
  • SymPy 和 Sage 有什么区别?

    有什么区别SymPy http www sympy org and Sage https www sagemath org 又名 SageMath 全面披露 我是 SymPy 的首席开发人员 您应该了解的第一件事是 SymPy 和 Sage
  • 使用 XSLT 转换 XML 并保留 CDATA(在 Ruby 中)

    我正在尝试将包含如下内容的文档转换为另一个文档 使 CDATA 与第一个文档中的完全相同 但我还没有弄清楚如何使用 XSLT 保留 CDATA 初始 XML
  • 为什么 JSHINT 抱怨这是一种严格的违规行为?

    我认为这可能是重复的使用此关键字并揭示模块模式的严格违规 https stackoverflow com questions 6300937 strict violation using this keyword and revealing
  • C++ 映射插入和查找性能和存储开销

    我想存储一个映射integer的关键float内存中的值 我大约有 1 3 亿个键 相应地 也有 1 3 亿个值 我的重点是查找性能 我必须进行数百万次查找 C STL 库有一个map此类关联数组的类 我有几个问题map 存储开销是多少ma
  • 反转或点 kxnxn 矩阵的快速方法

    有没有一种快速方法可以使用 numpy 计算 kxnxn 矩阵的逆矩阵 在每个 k 切片处计算逆矩阵 换句话说 有没有办法矢量化下面的代码 gt gt gt from numpy linalg import inv gt gt gt a r
  • 带有非独特标签的熊猫

    我正在尝试对数据进行装箱并根据该装箱应用浮点值 我认为 pandas cut 是实现此目的的工具 但显然它需要每个 bin 标签都有唯一的值 values 0 6 0 5 0 5 0 6 0 8 0 9 bins 0 2 5 10 15 2
  • 有没有办法在 SQL Server CE 中一次搜索所有表的字段?

    我希望在 WebMatrix C net 环境 使用 SQL Server Compact 中能够有一种方法来搜索所有表和字段中的值 我有一堆 比如 100 个 表 通过 WebMatrix 连接 我正在尝试寻找一个包含我需要的一些信息的表
  • C# 如何 P/调用 NtRaiseHardError

    以下 C 代码会导致蓝屏 include stdafx h include
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • 在 C# 中异步发送电子邮件?

    我正在开发一个应用程序 用户在窗口中的某个按钮上单击 按 Enter 键 该应用程序会执行一些检查并确定是否发送几封电子邮件 然后显示另一个带有消息的窗口 我的问题是 发送 2 封电子邮件会明显减慢进程 并且在发送过程中的一些 8 秒内 第
  • 如何在 Three.js 中进入全屏?

    我已经尝试了数十种不同的方法几个小时 但没有一个有效 如下所示 document body addEventListener keydown function THREEx FullScreen request false 如何让Three