Three.js 鼠标按下时旋转对象并移动

2023-11-23

我试图在场景中获得良好的鼠标移动,以便我可以围绕对象旋转。

我有两个问题,我可以弄清楚如何限制运动,使其永远不会在 Y 轴上旋转低于 0 度。 (我不想从下面看到物体,只想从上面看到)

而我想不通的第二件事就是如何让动作变得流畅。现在我在 jsfiddle 中实现的是相机在开始旋转之前移回其起始位置。

My try: http://jsfiddle.net/phacer/FHD8W/4/

这是我不明白的部分:

var spdy =  (HEIGHT_S / 2 - mouseY) / 100;
var spdx =  (WIDTH / 2 - mouseX) / 100;

root.rotation.x += -(spdy/10);
root.rotation.y += -(spdx/10);

我想要什么而不使用额外的库:http://www.mrdoob.com/projects/voxels/#A/afeYl


您可以使用此代码旋转场景。

为了确保旋转不低于 0,模拟向量 (0,0,1) 的旋转并检查向量的 y 是否为负。

var mouseDown = false,
    mouseX = 0,
    mouseY = 0;

function onMouseMove(evt) {
    if (!mouseDown) {
        return;
    }

    evt.preventDefault();

    var deltaX = evt.clientX - mouseX;
    var deltaY = evt.clientY - mouseY;
    mouseX = evt.clientX;
    mouseY = evt.clientY;
    rotateScene(deltaX, deltaY);
}

function onMouseDown(evt) {
    evt.preventDefault();
    mouseDown = true;
    mouseX = evt.clientX;
    mouseY = evt.clientY;
}

function onMouseUp(evt) {
    evt.preventDefault();
    mouseDown = false;
}

function addMouseHandler(canvas) {
    canvas.addEventListener('mousemove', function (e) {
        onMouseMove(e);
    }, false);
    canvas.addEventListener('mousedown', function (e) {
        onMouseDown(e);
    }, false);
    canvas.addEventListener('mouseup', function (e) {
        onMouseUp(e);
    }, false);
}

function rotateScene(deltaX, deltaY) {
    root.rotation.y += deltaX / 100;
    root.rotation.x += deltaY / 100;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js 鼠标按下时旋转对象并移动 的相关文章

  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 主干视图 DOM 元素已删除

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

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 如何更改此 jquery 插件的时区/时间戳?

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

随机推荐

  • 如何将鼠标滚轮输入定向到光标下方进行控制而不是聚焦?

    我使用了许多滚动控件 TTreeViews TListViews DevExpress cxGrids 和 cxTreeLists 等 当鼠标滚轮旋转时 无论鼠标光标位于哪个控件上 具有焦点的控件都会接收输入 如何将鼠标滚轮输入定向到鼠标光
  • 如何使用 SWIG 从 C++ 调用 Java?

    我可以使用 SWIG 从 Java 调用 C 代码 但我找不到任何有关如何执行相反操作 从 C 调用 Java 的文档 官方 SWIG 文档说 http www swig org Doc1 3 Java html java overview
  • Laravel eloquent 模型模型属性转换(我应该转换哪些属性类型?)

    我不确定我是否完全理解 Laravel Eloquent 属性转换 根据文件 https laravel com docs 8 x eloquent mutators attribute casting 这些是支持的类型 整数 实数 浮点
  • MATLAB 支持前向声明吗?

    是否可以在 m 文件中使用函数 该函数在同一文件的后面部分中实现 以与其他编程语言 例如 C 类似的风格 当然 在这样的 m 文件中 局部函数将在主函数之后声明 例如 function y main func x This is the m
  • 加速熊猫 cummin/cummax

    Pandas cummin and cummax对于我的许多组的用例来说 函数似乎真的很慢 我怎样才能加快他们的速度 Update import pandas as pd import numpy as np from collection
  • 折线图中的条件背景颜色

    我目前正在尝试将我们的图表从 PQ Systems Chartrunner 转换为 SSRS 2008 图表 我目前正在 SSRS 2008 中使用折线图 并尝试让背景颜色针对不同的西格玛进行更改 我能够计算并绘制标准差西格玛线 但我无法更
  • 如何检索 COM 类的接口 ID,以便将其传递给 CoCreateInstance?

    我想以编程方式检索任何类的接口 ID 以便可以将其传递给 CoCreateInstance 很感谢任何形式的帮助 请参阅下面的 如何获取此内容 HRESULT hResult CLSID ClassID void pInterface if
  • 转储到 JSON 添加了额外的双引号和引号转义

    我正在使用 Python 工具检索 Twitter 数据 并将这些数据以 JSON 格式转储到我的磁盘上 我注意到用双引号括起来的推文的整个数据字符串被意外转义 此外 实际 JSON 格式的所有双引号都用反斜杠转义 它们看起来像这样 cre
  • 如何跟踪WPF中TextBox中的哪个字符被删除?

    我想跟踪用户通过Delete或BackSpace键删除了哪个字符 我正在处理文本框的 TextBox ChangedEvent 我可以从中提取删除的字符吗文本更改事件参数 e 变更如果是的话我该怎么做 我想限制用户从文本框中删除任何字符 我
  • 如何更改 xcode 中的 subversion 设置?

    我已经在 Xcode 中运行了 subversion 一段时间 subversion 的集成始终悬而未决 然而我的 subversion 服务器已经改变了它的 ip 地址 并且我的 xcode 项目仍然尝试在旧 ip 上查找源 我已经通过
  • Prolog:带有内置命令的“Vanilla”元解释器

    这个答案Jan Burse 展示了 Prolog 中元解释器最简单的实现之一 solve true solve A B solve A solve B solve H clause H B solve B 我想扩展这个解释器 以便它可以调用
  • 如何将cURL转换为axios请求

    我正在尝试将 cURL 请求转换为here到 axios curl d grant type client credentials client id YOUR APPLICATION S CLIENT ID client secret Y
  • 具有多客户端通信的 Java 服务器。

    我正在为一项任务制作一个游戏 我有一个用 Java 设置的服务器和多客户端 我们使用的是 MVC 我需要让客户端将他们的名字发送到服务器 然后当有两个玩家存在时 我需要将两个名字以及他们的玩家编号 玩家一或玩家二 发送回客户端 我不明白如何
  • 如何在 C# 中的控制台窗口上显示列表项

    我有一个List包含所有数据库名称 我必须在控制台中显示该列表中包含的项目 使用Console WriteLine 我怎样才能实现这个目标 实际上你可以做得很简单 因为列表有一个ForEach方法 因为你可以传入Console WriteL
  • Python Tornado - 困惑如何将阻塞函数转换为非阻塞函数

    假设我有一个长时间运行的函数 def long running function result future Future result 0 for i in xrange 500000 result i result future set
  • { } 和等号变量之间的区别

    我对 C 编程有点陌生 我在谷歌上找不到我的答案 所以希望它能在这里得到答案 以下之间有区别吗 unsigned int counter 1 or unsigned int counter 1 这本书使用了第一个选项 它让我感到困惑 因为它
  • 检查 typescript 类是否有 setter/getter

    我有一个打字稿类 它具有以下属性 export class apiAccount private balance apiMoney get balance apiMoney return this balance set balance v
  • 在iPhone上,是否可以查出我们连接的是哪个WIFI网络?

    如果是的话 我们还可以获得有关网络配置的其他信息吗 一种有用的方法是获取当前网络的 SSID 有 API 可以做到这一点吗 更新 我在这里发现了类似的问题 iPhone SDK能否获取当前连接的Wi Fi SSID 尝试以下方法 impor
  • Java 可变长度参数与数组,简单的语法糖?

    我正在当地社区大学学习数据结构和算法课程 以获取乐趣 该课程的教材是Y Daniel Liang的Java 编程简介 第 10 版 这本书本身非常扎实 在处理Java util Arrays Liang提到了Java的 可变长度 参数 他写
  • Three.js 鼠标按下时旋转对象并移动

    我试图在场景中获得良好的鼠标移动 以便我可以围绕对象旋转 我有两个问题 我可以弄清楚如何限制运动 使其永远不会在 Y 轴上旋转低于 0 度 我不想从下面看到物体 只想从上面看到 而我想不通的第二件事就是如何让动作变得流畅 现在我在 jsfi