Three.js - 将飞机缩放至全屏

2024-01-06

我将一架飞机添加到场景中,如下所示:

// Camera
this.three.camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 60);
// Plane
const planeGeometry = new THREE.PlaneBufferGeometry(1,1,this.options.planeSegments,this.options.planeSegments);
const planeMat = new THREE.ShaderMaterial( ... )
this.three.plane = new THREE.Mesh(planeGeometry,planeMat);
this.three.scene.add(this.three.plane);

非常基本。我试图找出如何在 Z 轴上移动平面才能填充浏览器视口。为了那个原因,

// See attachment "solving for this" is closeZ
const closeZ = 0.5 / Math.tan((this.three.camera.fov/2.0) * Math.PI / 180.0);
this.uniforms.uZMax = new THREE.Uniform(this.three.camera.position.z - closeZ);

所以现在我知道在我的着色器中可以向 Z 添加多少以使平面填充视口。顶点着色器看起来像这样:

uniform float uZMax;

void main() {   
    vec3 pos = (position.xy, uZMax);
    gl_Position = projectionMatrix * modelViewMatrix * vec4( pos, 1 );
}

这实际上会缩放平面以填充视口,但缩放的是 Y 轴,而不是 X 轴。

我想知道为什么我的数学涉及 Y 轴以及我需要如何转换它,以便平面将填充视口宽度而不是高度?

Edit:

我正在努力实现这样的目标https://tympanus.net/Tutorials/GridToFullscreenAnimations/index4.html https://tympanus.net/Tutorials/GridToFullscreenAnimations/index4.html- 但在给定的示例中,他们只是缩放 x 和 y 像素以填充屏幕,因此没有实际的 3d - 因此再次没有照明。

我实际上想使用不同的 z 值将平面移向相机,这样我就可以计算表面法线,然后通过法线与光线方向的对齐方式再次计算片段着色器中的光照 - 就像在光线行进中所做的那样。


您可以通过使用以下设置轻松实现这样的全屏效果:

const camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );

const geometry = new THREE.PlaneBufferGeometry( 2, 2 );

当使用此几何体和自定义着色器材质创建网格时,正交相机将确保预期的全屏效果。这种方法用于所有后处理示例,其中整个视口必须用单个四边形填充。

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

Three.js - 将飞机缩放至全屏 的相关文章

随机推荐

  • 将位于 SharePoint Server 中的 Excel 文件导入到 SSIS

    在 SSIS 数据流任务中 我寻求使用连接到位于 SharePoint 服务器中的 xlsx 文件的 Excel 源任务来导入数据 最好不要下载其他软件 在 Excel 连接管理器中 我使用以下 Excel 文件路径格式 UNC sps s
  • setData() 上的 CKEditor 内存泄漏

    我认为我遇到了一些与 CKeditor setData 函数相关的大内存泄漏 我有一个网络应用程序 用户可以使用 Javascript 设计自己的内容 CKEditor作为所见即所得的编辑器 供用户编写设计各部分的内容 每次用户单击其设计中
  • extjs - 如何禁用商店分页

    每当商店 Ext data Store 从服务器读取数据 它发送分页参数 例如 page 1 start 0 limit 25 in a json代理或 page 1 start 0 limit 25 用一个direct proxy 我想在
  • 使用图像代替 Bootstrap 的字形图标

    I would like to use a custom image in an input group instead of a Bootstrap glyphicon without padding bottom my image to
  • 使用 Rxjava 检测值变化

    我们可以使用 RxJava 检测类成员值是否发生更改吗 假设一个类中有一个变量 var 现在我们可以使用 RxJava 在 var 的值发生变化时收到通知 你可以使用这样的东西 private final BehaviorSubject
  • 在 MATLAB 中对文本进行聚类

    我想在 MATLAB 中对文本进行层次凝聚聚类 说吧 我有四句话 I have a pen I have a paper I have a pencil I have a cat 我想把上面的四个句子聚类一下 看看哪个更相似 我知道统计工具
  • 在车把的助手中渲染模板

    因为这个问题似乎没有答案 通过车把部分传递变量 https stackoverflow com questions 11523331 passing variables through handlebars partial然而 我目前正在研
  • 与 Python 等效的字符串格式化,使用 Perl 中的字典和哈希值进行格式化

    我喜欢 Python 使用字典格式化字符串的方式 print key1 s and key2 s aDictObj 我想在 Perl 中使用哈希来实现同样的目标 有没有任何片段或小型库可以做到这一点 EDIT 感谢您尝试这个答案 至于我 我
  • 从 javascript 脚本重定向 document.write

    我们希望在我们的网站上投放广告 但与我们洽谈的广告服务器在为我们提供足够快的广告速度方面存在问题 我认为问题是我们应该包括我们要在其中显示广告 然后它将下载脚本并使用 document write 插入一些 html 问题是对广告商网站的调
  • 在 MySQL 数据库中存储 IP 地址(IPv4 和 IPv6)

    好吧 现在我知道类似的问题可能已经被问过一百万次了 但我在这方面是一个真正的新手 我真的很感谢你在这里的帮助 基本上 我想将访问者的 IP 地址存储在 MySQL 中 以便以后检索和验证 我首先需要知道需要使用什么类型的字段来存储 IP 地
  • 如何在android中将网站中的JSON对象解析为数组列表

    如何将 Web 链接中的 JSON 对象解析到 Android 中并将不同的值存储到 ArrayList 中 用户的 JSON 对象如下所示 它来自一个网站 Users name Kane lon 4 371645 lat 31 39691
  • 全局数据库连接参数的存储位置

    Perl 中是否有存储数据库连接参数和其他全局设置的约定 类似于 NET 的 config 文件 背景 我继承了一个基于 Perl 的大型应用程序 其中有一堆 CGI 脚本和几个后台服务 所有这些服务都有硬编码的数据库主机名 用户名和密码
  • 在matlab中读取文本文件(数据转换)

    我正在读取一个文本文件matlab 这是代码 allData textread file s delimiter n numericalArray cellfun s sscanf s f allData un 0 Get Header h
  • 触发下拉菜单的变化事件

    我想使用jquery触发 document ready中下拉列表的更改事件 我在用户详细信息页面中有一个国家和州的级联下拉菜单 我如何使用 C 在 MVC 中设置国家 地区和州的值 根据用户 ID 从数据库中获取 我不太了解 JQuery
  • AWS - Cloudfront - 如何使用 Origin 自定义标头

    我对 AWS 还很陌生 现在正在参加一些不同的培训课程 我偶然发现的有趣的事情之一是能够在 Cloudfront 中添加自定义标头 也就是说 我似乎无法弄清楚 或找到简单易懂的文档 如何使用 利用此功能提供的功能 有人可以告诉我如何 如何访
  • 将“Java.lang.String”转换为“oracle.sql.TIMESTAMPTZ”

    我有以下这些Java lang String代表的值String的价值TIMESTAMPTZ 我需要转换这些Java lang String TO oracle sql TIMESTAMPTZ 2016 04 19 17 34 43 781
  • 在 range-v3 中,如何从一对迭代器创建范围?

    给定一对传统的 开始 和 结束 迭代器 如何创建与 range v3 兼容的范围 假设我正在编写一个接受两个迭代器的通用函数 以与遗留代码兼容 struct result bool keep line const std string re
  • 如何通过 Heroku 上的 HTTPS 连接加载 Laravel L5 swagger UI

    我尝试在 Heroku 上加载我的 Laravel L5 swagger URL 但我得到了空白屏幕 在使用 chrome 检查检查视图时 我发现以下错误 https MY APP NAME herokuapp com api docume
  • 接受_嵌套属性_for & :reject_if。在家长协会保存之前如何防止拒绝?

    class Gift lt ActiveRecord Base has many contributions accepts nested attributes for contributions reject if gt proc a a
  • Three.js - 将飞机缩放至全屏

    我将一架飞机添加到场景中 如下所示 Camera this three camera new THREE PerspectiveCamera 45 window innerWidth window innerHeight 0 1 60 Pl