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

2024-04-30

目前:我有一个带有纹理的球体,它绕 y 轴旋转。我还有在 3D 空间中单击的位置,以及球体上的旋转位置(我认为)。

目标:获取纹理上的位置,例如:我想获取我点击的图像的哪个方块。 (参见示例球体和下图)


在实践中,我不会使用此图像,但我觉得这将是一个很好的起点。

代码用于根据以下内容获取球体上的位置这个例子 https://github.com/mrdoob/three.js/blob/master/examples/canvas_interactive_cubes.html:

function onDocumentMouseDown( event ) {
    event.preventDefault();
    mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
    mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;
    raycaster.setFromCamera( mouse, camera );
    var intersects = raycaster.intersectObjects( objects );
    if ( intersects.length > 0 ) {
        console.log(intersects[ 0 ].point);
        var vector = new THREE.Vector3( 1, 0, 0 );

        var axis = new THREE.Vector3( 0, 1, 0 );
        var angle = objects[ 0 ].rotation.y;

        //Rotate Point
        intersects[ 0 ].point = vector.applyAxisAngle( axis, angle );

        console.log(intersects[ 0 ].point);
    }
}

Sphere:

Image Wrapping it: Image Wrap


事实上,你不需要计算任何东西。intersects[0].uv为您提供 UV 坐标。

Texture coordinates range always from 0.0 to 1.0. They are unitless. So same texture with another resolution will fit as well. UV coordinates

因此,如果您需要知道点击的像素位置,请执行以下操作:

var pixelX = Math.round(intersects[0].uv.x * textureWidth);
var pixelY = Math.round(intersects[0].uv.y * textureHeight);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ThreeJS 获取球体纹理上的点击位置 的相关文章

  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • 查找最接近点的多边形顶点的索引

    Heading 我需要找到最接近点的多边形的索引 所以在这种情况下 输出将是 4 和 0 这样 如果添加了红点 我就知 道将顶点放置在数组中的位置 有谁知道从哪里开始 抱歉 如果标题有误导性 我不知道如何正确表达它 In this case
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 透视变换矩阵的计算

    给定 3D 空间中的一个点 如何计算齐次坐标中的矩阵 将该点投影到平面上z d 其中原点是投影中心 好吧 让我们尝试解决这个问题 扩展伊曼纽尔的答案 Assuming如果您的视图向量直接沿着 Z 轴 则所有尺寸都必须按视图平面距离的比例进行
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • Swift NSPredicate 不在

    我有一个包含 X 个项目的数组 我需要通过 uid 过滤掉特定项目 我写了以下谓词 我认为它是正确的 我面临的问题是 Swift 编译器只允许我使用接受 argumentArray 的初始化程序 let uids 34885a9f0897f
  • 首选的跨平台 IPC Perl 模块是什么?

    我想创建一个简单的 IO 对象 它代表一个向另一个程序打开的管道 我可以在应用程序运行时定期写入另一个程序的 STDIN 我希望它是防弹的 因为它可以捕获所有错误 并且是跨平台的 我能找到的最佳选择是 open sub io read lo
  • 如何避免 Selenium 中的“StaleElementReferenceException”?

    我正在使用 Java 实现大量 Selenium 测试 有时 我的测试由于以下原因失败StaleElementReferenceException https developer mozilla org en US docs Web Web
  • App Store 上是否允许嵌入 dylib 的 iOS 8 应用程序?

    iOS 8 现在支持动态框架 是否意味着 App Store 提交允许这样做 似乎以前的开发人员能够在内部应用程序中使用 dylib 但在提交到 App Store 的内容中使用它们会导致您被拒绝 情况仍然如此 还是 iOS 8 中的这一更
  • 如何在快速人工智能中获得给定测试集的预测并计算准确性?

    我正在尝试加载由导出的学习者learn export 我想针对测试集运行它 我希望我的测试集有标签 以便我可以测量其准确性 这是我的代码 test src TextList from df df path cols texts split
  • 重新审视混合字符串值的字母数字排序

    请注意 我之前提出了一个非常相似的问题 但要求已发生变化 对混合字符串值进行字母数字排序 https stackoverflow com questions 3842719 alphanumeric sort on mixed string
  • TypeScript 中多个互斥参数

    给定以下 JavaScript 函数 function x foo fooId bar barId 我想将其转换为 TypeScript 以便调用者必须传入foo or fooId 但不能两者兼而有之 同样对于bar and barId 例
  • 在 python 中将 blob 保存到文件中

    我正在尝试将通过 ajax 发送的 blob 保存为 python 中的文件 以前经历过这个Python 如何在二进制和 Base 64 之间相互转换 https stackoverflow com questions 5305456 py
  • 如何配置 Ransack Rails Gem 以添加 NULLS LAST 进行排序

    我希望兰萨克总是添加NULLS LAST这会将空值放在排序列的最后 有办法做到这一点吗 我在 github 上开了一个问题 https github com activerecord hackery ransack issues 443 h
  • 从 Windows 命令行连接到 websocket

    是否可以从 Windows 命令行连接到 websocket 我已经从 Mac 终端使用了 WSCAT 但我似乎找不到替代方案 任何帮助 将不胜感激 Windows 中没有内置可与 WebSocket 配合使用的工具 虽然你可以使用teln
  • 在 Java 中从复杂的 HTML 表格中提取数据到二维数组

    如何转换 HTML 表格带有 colspan 和 rowspanJava中的二维数组 矩阵 我在 Python 和 jQuery 中找到了很好的解决方案 但在 Java 中却没有 只有通过 jsoup 的非常简单的表 XSLT 有一种很好的
  • R——对缺失值的二维数据集进行插值的方法

    我目前正在使用 Akima 插值例程来进行二维线性插值 我目前正在尝试通过排除不良数据点和依赖于它们的插值来尽可能地进行线性插值 我不想做任何样条拟合 只是线性插值 我可以想出两种使用现有的 akima 包来做到这一点的方法 通过将二维数据
  • 身份验证错误:无法响应以下任何质询:{} Android - 401 Unauthorized

    身份验证错误 无法响应以下任何质询 Android 401 Unauthorized 我已从此链接参考在 Android 上使用 HttpPost 和 DefaultHttpClient 时出现身份验证错误 https stackoverf
  • 如何使用TortoiseSVN更改密码?

    我需要更改我的 SVN 密码 我正在使用 TortoiseSVN 客户端 我找不到密码更改或添加用户选项 是否可以 是否有任何解决方法或命令行语法来创建 SVN 用户或编辑用户 更改访问 Subversion 的密码 通常这将由您的 Sub
  • html 表单在表单提交时发送 GET 而不是 POST

    请原谅我的网络技能 但我有一个非常基本的问题 我有这个 html 表单 理想情况下应该用 post 调用我的 login url 但由于某种原因 它总是向该 url 发送 get 请求并失败 我不明白这是怎么发生的 这是我的 html 表单
  • 编程 Jersey 资源中的路径参数

    我正在使用 Jersey 的编程 API 描述here https jersey github io documentation latest resource builder html在运行时从配置文件动态创建配置资源 我创建这些资源的代
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 如何使用plotly包绘制用一种缩放颜色着色的饼图

    我有这个示例数据框 gt Data Produits Pourcentages 1 Cr me de jour 27 10 2 s rum 14 50 3 Cr me de nuit 13 80 4 masque 8 82 5 d maqu
  • 使用 openopenPanel() 方法打开 matAutocomplete

    我正在使用 Angular Material 的垫自动完成 https material angular io components autocomplete overview组件 并根据docs https material angula
  • 使用 ThreeJS 获取球体纹理上的点击位置

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