Three.js/GLSL - 将像素坐标转换为世界坐标

2023-12-02

我的 Three.js 应用程序中有一个简单的着色器,可以将屏幕着色为红色。但是,我想将给定世界位置右侧的所有像素着色为不同的颜色。

我见过some answers建议使用varying vec4 worldCoord = gl_ModelViewMatrix * gl_Vertex;,但由于 WebGL 使用 GLSLES,像 gl_Vertex 这样的变量对我来说不可用。


顶点着色器

<script type="x-shader/x-vertex" id="vertexshader">
    #ifdef GL_ES
    precision highp float;
    #endif

    void main()
    {
        gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
    }
</script>

片段着色器

<script type="x-shader/x-fragment" id="fragmentshader">
    #ifdef GL_ES
    precision highp float;
    #endif

    float worldX = 10.0; //Or some other position in the WebGL world

    void main()
    {
        if(gl_FragCoord.x > worldX) //FragCoord gives me coordinates relative to the screen
        {
            gl_FragColor = vec4(0.0, 1.0, 0.0, 1);
        }

        else
        {
            gl_FragColor = vec4(1.0, 0.0, 0.0, 1);
        }
    }
</script>

问:如何使用 Three.js 将像素的位置转换为 WebGL 中的世界位置?



答案来自 WestLangley 的小提琴:http://jsfiddle.net/ST4aM/2/.


顶点着色器

<script type="x-shader/x-vertex" id="vertexshader">
    #ifdef GL_ES
    precision highp float;
    #endif

    varying float x;
    varying float y;
    void main()
    {
        gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
        x = position.x;
        y = position.y;
    }
</script>

片段着色器

<script type="x-shader/x-fragment" id="fragmentshader">
    #ifdef GL_ES
    precision highp float;
    #endif

    varying float x;
    varying float y;

    void main()
    {
        if(x > somePosition)
        {
            gl_FragColor = vec4(0.0, 1.0, 0.0, 1);
        }

        else
        {
            gl_FragColor = vec4(1.0, 0.0, 0.0, 1);
        }
    }
</script>

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

Three.js/GLSL - 将像素坐标转换为世界坐标 的相关文章

  • 将颜色渐变应用于网格上的材质 - Three.js

    我有一个 STL 文件加载到我的场景中 并将单一颜色应用于 phong 材质 我想要一种方法 将两种颜色应用于该网格物体的材质 并在 Z 轴上应用渐变效果 如下例所示 渐变花瓶 https i stack imgur com Ty9gq j
  • 即使在顶点着色器中使用,glGetUniformLocation()也会返回-1

    我正在尝试用法线渲染一个简单的立方体 我使用以下代码来初始化着色器 void initShader const char vertexShaderPath const char fragmentShaderPath cout lt lt I
  • 在 TypeScript 中使用三个 Js + OrbitControl

    我无法得到this http www example com 在 TypeScript 中使用上述组合的示例 I have and 在我的html中和打字稿文件
  • Three.js 对象的“中心”是什么?

    当我使用 Blender 对对象进行建模时 我能够明确定义其发生平移和旋转的中心位置 当使用 Three js 对象时 我似乎没有找到等效的对象 Three js 对象是否具有定义其 中心 位置的属性 如果不是 物体的中心是如何确定的 在
  • THREE.JS,忽略父级的轮换

    我试图使子对象跟随父级位置并表现得像一个普通的子对象 但是我希望它保持其旋转不变 在不影响性能的情况下 最好的方法是什么 我的CPU预算很紧张 已经运行了2个工作线程并且有很多对象 是否有设置只允许孩子的位置受到影响 同样重要的是 当父级旋
  • Three.js :face4 生成三角形而不是正方形

    我正在尝试使用 tree js 自定义几何图形生成一个正方形 但是这段代码 var cubeGeo new THREE Geometry cubeGeo vertices push new THREE Vector3 25 25 25 cu
  • WebGL - 如何传递无符号字节顶点属性颜色值?

    我的顶点由具有以下结构的数组组成 Position colour float float float byte byte byte byte 传递顶点位置没有问题 gl bindBuffer gl ARRAY BUFFER this vbo
  • 在 Webpack 中使用 Three.js 以便我可以使用 OrbitControls 的正确方法是什么?

    在我的 webpack 配置中 resolve alias three path resolve node modules three build three js OrbitControls path resolve node modul
  • 为什么拥有单独的投影矩阵但结合模型和视图矩阵会有好处?

    当您学习 3D 编程时 您会被告知用 3 个变换矩阵来思考是最简单的 模型矩阵 该矩阵对于每个模型都是独立的 它根据需要旋转和缩放对象 最后将其移动到 3D 世界中的最终位置 模型矩阵将模型坐标转换为世界坐标 视图矩阵 对于大量对象 如果不
  • GL_CULL_FACE使所有对象消失

    我正在尝试在 openGL3 3 中创建一些简单的多边形 我有两种类型的对象 具有以下属性 对象 1 10 个顶点 按顺序在下面列出 存储在GL ARRAY BUFFER并使用GL TRIANGLE FAN v x y z w v 0 0
  • 无面点云 (PLY) 文件的 Web 查看器

    我在尝试Three Js https github com mrdoob three js 用于通过网络查看 PLY 文件 使用这个例子 http threejs org examples webgl loader ply html作为参考
  • CSS3DObject 始终位于 WebGL Mesh 前面

    我正在混合CSS3D Renderer with WebGL Renderer to add HTML3D 空间中的元素WebGL场景 这CSS3DObject在前面WebGL网格即使WebGL Renderer具有较高的 z index
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • OpenGL ES 片段着色器显然不可能返回白色

    这是一个奇怪的现象 我有一个片段着色器 据我所知只能返回黑色或红色 但它将像素渲染为白色 如果我删除一根特定的线 它会返回我期望的颜色 它适用于 WebGL 但不适用于 Raspberry Pi 上的 OpenGL ES 这是着色器代码 如
  • 使用 GLSL 直接在着色器中从位置计算平移矩阵

    我正在开发 C OpengL 程序以及 GLSL 顶点和片段着色器 我正在创建同一对象的多个实例 我只需要改变实例之间的对象位置 这是我所做的 我正在使用一个统一变量 它是一个变换矩阵数组 每个矩阵代表一个对象实例 MVP 也是一个变换矩阵
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 在 Chrome 18 中检测 SwiftShader WebGL 渲染器

    我有一个 2D HTML5 游戏引擎 www scirra com http www scirra com 并且确实想检测 WebGL 是否将使用 Chrome 18 的 Swiftshader 软件渲染器进行渲染 如果是这样我们会much
  • 如何使用三个JS导出然后导入场景?

    我有一个用三个 JS 和大量 Javascript 代码构建的复杂 3D 场景 我需要将此场景导出为一个文件 然后通过简单的 ThreeJS 场景播放器在我的网站上使用它 我尝试过 ObjectExporter 和 SceneExporte
  • 如何在 GLSL 1.3 和 OpenGL 2.1 中使用位运算

    我正在尝试编写一个使用许多位操作的着色器 事实上 从 glsl 1 30 开始就支持它们 但我只使用 OpenGL 2 1 有没有办法在我的 OpenGL 版本中使用位运算 所有 SM3 兼容 OpenGL 2 1 硬件支持limited整

随机推荐

  • Safari 11 中的 SVG 动画错误

    如您所知 昨晚发布了新的 Safari Safari 11 最后一个版本在 SVG 动画上创建了一个错误 该错误在 safari 10 上工作正常 或者在 chrome 上仍然工作 我只是不知道如何解决这个问题 我尝试了一切 webkit
  • 使用 psexec 在远程计算机上运行 AutoIt

    我正在尝试在远程计算机上运行 AutoIt 脚本 psexec exe accepteula remotemachine u admin p password C Program Files AutoIt3 AutoIt3 exe C Us
  • 在 Prolog 中解决逻辑难题 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在阅读 立即学习 Prolog 其中我自己无法解决的练习之一如下 有一条街 有三 邻近的房屋都有一个 不同的颜色 它们有红色 蓝色 和绿色 不同的人 不同民族生活在不同的地方
  • 如何从Android应用程序访问标准输入?

    我正在使用磁条阅读器 它似乎输出到标准输入 当我将其插入 Android 设备 打开记事本应用程序并滑动时 它会自动将字符串粘贴到应用程序中 就像我键入了它一样 这就是为什么我认为它输出到标准 IO 我想以编程方式读取数据 如何访问 and
  • Rust 中的缓冲区与 Mutex 和 Condvar

    我正在尝试用单个消费者和单个生产者实现一个缓冲区 我只使用了 POSIX 信号量 但是它们在 Rust 中不可用 我正在尝试使用 Rust 同步原语实现一个简单的信号量问题 Mutex Condvar Barrier 但我不想使用频道 我的
  • android UnsatisfiedLinkError:找不到库

    我从 git 存储库中查看了 Coolreader 3http sourceforge net projects crengine 我尝试在 Eclipse 中构建它 但是运行时它崩溃并出现以下错误 应用程序 Cool Reader pro
  • 检查模板参数是否具有成员函数[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 这和我的非常相似先前的问题 我想检查模板参数是否包含成员函数 我尝试了与上一个问题中接受的答案类似的代码 struct A int member func
  • Spring boot 中未加载 logback JNDI 选择器

    我有一个问题困扰了我好几天 我解释一下 我有 2 个应用程序共享一台服务器 我称它们为 appA 和 appB 我们使用 Spring 框架 并使用 logback 作为日志系统 我配置了 logback JNDI 上下文选择器 如文档中所
  • SSL 证书服务器名称如何解析/我可以使用 keytool 添加备用名称吗?

    为了清楚起见 这些问题可能被表述为单独的问题 但它们都与同一问题相关 SSL 证书服务器名称是如何解析的 为什么浏览器似乎使用证书的 CN 字段 但 Java 的机制似乎只看 主题替代名称 是否可以使用 keytool 向 SSL 证书添加
  • 从 Google Cloud Dataflow 输出排序的文本文件

    我有一个PCollection
  • redis分布式锁解决什么问题?

    所以我刚刚读到了有关 redlock 的内容 我的理解是它需要3台独立的机器才能工作 所谓独立 意味着所有机器都是主机 它们之间没有复制 这意味着它们服务于不同类型的数据 那么为什么我需要锁定三个独立的 Redis 实例 作为主实例 中存在
  • 将捕获的视频保存到 Electron 中的文件

    我想将从网络摄像头捕获的视频保存到本地文件 到目前为止我已经能够 创建一个流getUserMedia 将流封装为RecordRTC 从中获取斑点RecordRTC 但我不知道如何将视频保存到文件中 呼唤save on RecordRTC允许
  • 为什么 Visual Studio 2015/2017/2019 测试运行程序没有发现我的 xUnit v2 测试

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 更新 添加 2019 年 发现 运行器集成机制与 2017 年和 2015 年相同 因此可能出错的关键问题是相同的 我读了为什
  • .NET 动画窗口

    我正在尝试创建一个通知窗口 就像 Outlook 在您收到新电子邮件时使用的那样 我有一个用于通知窗口的无模式窗体 上面有两个标签控件来显示通知信息 为了获得淡入效果 我调用了 Win32 AnimateWindow 函数 除了一件事之外
  • Python Matplotlib pyplot 直方图

    我正在绘制一个相当简单的模拟的直方图 在直方图上 最后两列被合并 看起来很奇怪 请查找下面附有的代码和绘图结果 提前致谢 import numpy as np import random import matplotlib pyplot a
  • 如何使用 htaccess 重定向特定页面

    我已经彻底查找了用于重定向单个页面的 htaccess 代码 但没有找到很多解决方案 基本上我需要重定向这个 example my stuff to example home 但我不希望除 my stuff 之外的任何其他页面被重定向 例如
  • python os.listdir() 显示受保护的文件

    因此 我试图为自己制作一个 Python 脚本 它会遍历所选的音乐文件夹并告诉用户特定专辑是否没有专辑封面 它基本上会遍历所有文件并检查if file 4 in jpg bmp png 如果为真 则找到一个图片文件 只是为了清楚起见 我的文
  • 为什么我的页面无法在 Github 上加载?

    我试图将我的存储库指向自定义域并收到此错误 404 找不到文件 该地址配置的站点不包含请求的内容 文件 如果这是您的网站 请确保文件名大小写匹配 网址 对于根 URL 例如http example com 您必须提供 index html
  • 如何获取 Google 云端硬盘应用程序的开放 URL?

    我希望使用 Google Drive API 通过特定应用程序以编程方式打开驱动器文件 目的是模仿使用选定文件的 打开方式 上下文菜单启动应用程序的 GUI 驱动方法 虽然我可以使用应用程序获取可用应用程序的列表列表法 the 应用程序资源
  • Three.js/GLSL - 将像素坐标转换为世界坐标

    我的 Three js 应用程序中有一个简单的着色器 可以将屏幕着色为红色 但是 我想将给定世界位置右侧的所有像素着色为不同的颜色 我见过some answers建议使用varying vec4 worldCoord gl ModelVie