THREE.js - 广告牌顶点着色器

2023-11-29

我需要将 THREE.Mesh 的实例定向为始终面向相机。我知道我可以只使用 [THREE.Mesh].lookAt() 方法,但我正在尝试更多地处理我的 GLSL 部分,并希望能够在顶点着色器中执行此操作。

我已读完NeHe 的广告牌教程,这对我来说很有意义。好吧,除了将这些方向向量应用于每个顶点的位之外。

我觉得我已经非常接近实现这一目标,但就目前而言,我的顶点着色器看起来更像是 90 年代的狂欢视频,而不是广告牌:

到目前为止小提琴的进展:http://jsfiddle.net/RZ4XE/2/

下面是我的顶点着色器(片段着色器仅分配 vec4 颜色)。它利用了 THREE.js 提供的各种默认制服/属性,如下所示,以防不熟悉 THREE.js 的人阅读本文:)

  • cameraPosition(向量3),
  • position(顶点位置,另一个 vec3),
  • projectionMatrix(相机投影矩阵,mat4),
  • modelViewMatrix(camera.matrixWorldInverse * object.matrixWorld, mat4)

    void main() {
    
        vec3 look = normalize( cameraPosition - position );
    
        if( length( look ) == 0.0 ) {
            look.z = 1.0;
        }
    
        vec3 up = vec3( 0.0, 1.0, 0.0 );
        vec3 right = normalize( cross( up, look ) );
        up = normalize( cross( look, right ) );
    
    
        mat4 transformMatrix;
    
        transformMatrix[0][0] = right.x;
        transformMatrix[0][1] = right.y;
        transformMatrix[0][2] = right.z;
    
        transformMatrix[1][0] = up.x;
        transformMatrix[1][1] = up.y;
        transformMatrix[1][2] = up.z;
    
        transformMatrix[2][0] = look.x;
        transformMatrix[2][1] = look.y;
        transformMatrix[2][2] = look.z;
    
        gl_Position = projectionMatrix * modelViewMatrix * transformMatrix * vec4( position, 1.0 );
    }
    

提前致谢。


显然这有效:

gl_Position = projectionMatrix * (modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0) + vec4(position.x, position.y, 0.0, 0.0));

我实际上想弄清楚如何制作轴对齐的广告牌。

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

THREE.js - 广告牌顶点着色器 的相关文章

随机推荐

  • React PDF + Vite 实现错误:Uncaught SyntaxError

    我正在尝试在使用 Vite 创建的 React 项目中使用 React PDF 库 我在渲染 PDF 组件时遇到问题 并且错误非常奇怪 有人可以帮助我吗 Error Uncaught SyntaxError The requested mo
  • 如何使用 Kotlin 协程最大限度地减少 Web 服务调用次数?

    在我的 Android Kotlin 项目中 我在协程中调用 Web 服务 myWebservice只是一个管理 Web 服务调用的自定义类 fun searchForItems userInput String CoroutineScop
  • 如何在react js中将类型数据缓冲区转换为图像

    您好 我接下来有图像类型缓冲区 该数据是一张图像 如何将缓冲区数据转换为图像 当我向 api 发出请求时 它会显示以下数据 任何建议 后端是用node js续集MYSQL制作的 以及 React js 中的前端 我有下一个例子 https
  • 如何调试 w3wp clr.dll 错误

    我的客户在两台生产服务器上安装了 ASP NET 应用程序 与 NLB 平衡 但这无关紧要 两台服务器每 3 4 小时就会崩溃一次 并出现以下事件查看器记录的错误 错误应用程序名称 w3wp exe 版本 7 5 7601 17514 时间
  • C++11:memory_order_relaxed 和 memory_order_consume 之间的区别

    我现在正在学习C 11内存顺序模型并想了解之间的区别memory order relaxed and memory order consume 具体来说 我正在寻找一个无法替代的简单示例memory order consume with m
  • 如何在Python3中像printf一样打印?

    在 Python 2 中我使用 print a d b d f x n g x n 我试过了 print a d b d f x n g x n 在Python2中 print是一个引入语句的关键字 print Hi 在Python3中 p
  • Android中如何同步两个scrollview?

    我有两个水平的scrollview 并希望将它们始终保持在相同的位置 距离 如果用户滚动其中一个 则需要以编程方式滚动另一个 挑战在于 将会发生无限循环 一个将提出另一个 另一个将首先提出 如何设置状态 指示用户启动的滚动仍在进行中 那么其
  • 错误:HHH000299:无法完成架构更新 java.lang.NullPointerException

    我在以下环境中有一个网络应用程序 JPA 2 0 春季3 2 2 MySQL 5 6 11 休眠 4 2 0 CR1 阿帕奇汤姆猫 7 0 35 到目前为止我的配置application context xml文件如下
  • 如何从 github 存储库安装打字稿定义

    如何为像 aurelia validatejs 这样的库安装 typescript defs 就像我所做的那样npm install aurelia validatejs save将其添加到package json and node mod
  • NHibernate - 映射字符串外键

    我继承的旧数据库包含以下表格 Teams TeamId INT PRIMARY KEY Name VARCHAR 30 Players PlayerId INT PRIMARY KEY Team VARCHAR 30 Players 表中的
  • 为什么我的代码在c++中无限循环。我的代码需要反复提示用户

    我的代码需要反复提示用户输入整数 当用户不再想继续输入数字时 输出用户输入的所有正数之和 然后输出用户输入的所有负数之和 这是我到目前为止所拥有的 include
  • 允许将 T* 与 char* 别名。反过来也允许吗?

    Note 该问题已被重命名并减少 以使其更加集中和可读 大多数评论都是指旧文本 根据标准 不同类型的对象不能共享相同的内存位置 所以这是不合法的 std array
  • nhibernate 查询所有实现接口的对象

    例如 如果您有一个 Apple IWhatever 和一个 Orange IWhatever 并且您想找到它们 因为它们都是 IWhatever 那么您需要在 NHibernate 中做什么 它是否完全依赖于 HQL 和条件查询 还是您还必
  • 修改查询字符串而不重新加载页面

    我正在创建一个照片库 并且希望能够在浏览照片时更改查询字符串和标题 我正在寻找的行为经常出现在连续 无限页面的某些实现中 当您向下滚动查询字符串时 会不断增加页码 http x com page 4 等等 理论上这应该很简单 但我想要一些在
  • 将图像字节数据流解码为 JPEG

    我正在努力成功地将 JPEG 图像从字节解码回 JPEG 我从 MJPG 字节流的编码帧开始 我想对其进行解码以便使用 OpenCV 进行操作 我是 Python numpy opencv 等方面的新手 我现在将帧 JPG 数据放在文本文件
  • Vanilla JS Div 碰撞检测

    我的以下实现可以在jsfiddle net 我有四个div 我的目标是使它们可以在页面上拖动 但不允许它们彼此重叠 每个都可以使用 mousemove 侦听器在页面上拖动 container addEventListener mousemo
  • 在哪里可以找到 PyQt5 方法签名?

    我想编写一个带有图形用户界面的小型应用程序 为此我安装了 PyQt5 在教程中 我发现 QMessageBox information 调用已完成 我想更改调用方式 而不是 QMessageBox information self Empt
  • IE 和 Webkit 移动设备中对最大图像像素大小是否有任意限制?

    最近的一个项目使用了非常像素大 5e3px2 但仍然是字节小 100kb GIF 的图像 IE8 和 iOS Safari 都拒绝渲染 两者似乎都知道图像大小 但只是不渲染它们 一个实用的解决方案是对图像进行切片 但是这些浏览器对最大图像像
  • 除了架构方面的考虑之外,为什么要在 Swift 中标记一些最终的东西呢?

    除了明显的原因 例如如果按照设计 我不希望某些方法 属性或任何内容在继承树中被覆盖 是否还有其他原因来标记事物final在斯威夫特 例如 是否有性能方面的考虑 我记得在某处读到过一些答案 其中提出了一些建议 来自 Apple 的 Swift
  • THREE.js - 广告牌顶点着色器

    我需要将 THREE Mesh 的实例定向为始终面向相机 我知道我可以只使用 THREE Mesh lookAt 方法 但我正在尝试更多地处理我的 GLSL 部分 并希望能够在顶点着色器中执行此操作 我已读完NeHe 的广告牌教程 这对我来