【问题标题】:Three.js: Draw a vector on planeThree.js:在平面上绘制矢量
【发布时间】:2018-07-28 20:57:03
【问题描述】:

我是three.js(和stackoverflow)的新手。 我试图找到答案,但我无法做这些简单的事情。 我在玩助手和飞机。 我想创建一个平面(它是 PlaneHelper),并在这个平面上绘制一个任意向量。 如果平面与原点的距离设置为 0,则一切正常。 如果我给平面一个距离,向量不在平面上。

这是我用于这个小实验的注释代码。 在平面上投影原点和矢量我确信 arrowHelper_Point 仍然在平面上,但事实并非如此。 我的错误在哪里?看不懂。

// Define ARROW_LENGTH to display ArrowHelper
const ARROW_LENGTH = 5;
// Point (0,0,0)
var origin = new THREE.Vector3(0, 0, 0);
// Axes helper in (0,0,0)
var axesHelperOrigin = new THREE.AxesHelper(100);
scene.add(axesHelperOrigin);
// Define a plane by the normal, color and distance from (0,0,0)
var vectorNormal = {
    normal: new THREE.Vector3(1, 1, 0).normalize(),
    color: "rgb(255, 255, 0)",
    colorNormal: "rgb(255,100,0)",
    colorVector: "rgb(194, 27, 255)",
    distance: -3,
};
// Create Plane from the normal and distance
var plane = new THREE.Plane(vectorNormal.normal, vectorNormal.distance);
// Add PlaneHelper to scene
var planeHelper = new THREE.PlaneHelper(plane, 100, vectorNormal.color);
scene.add(planeHelper);
// Add ArrowHelper to display normal
// Find the projection of origin on plane
var originOnPlane = plane.projectPoint(origin);
var arrowHelper_Normal = new THREE.ArrowHelper(vectorNormal.normal, originOnPlane, ARROW_LENGTH, vectorNormal.colorNormal);
scene.add(arrowHelper_Normal);
// Define a point "random"
var point = new THREE.Vector3(5, -2, 6);
// Project the point on plane
var pointOnPlane = plane.projectPoint(point);
// Draw ArrowHelper to display the pointOnPlane, from originOnPlane
var arrowHelper_Point = new THREE.ArrowHelper(pointOnPlane.normalize(), originOnPlane, ARROW_LENGTH, vectorNormal.colorVector);
scene.add(arrowHelper_Point);

编辑:好的,我想我找到了错误。 看着这个Get direction between two 3d vectors using Three.js?

我需要两点之间的向量:

var dir=new THREE.Vector3();
dir.subVectors(pointOnPlane,originOnPlane).normalize();

并使用 dir 作为箭头方向。 很抱歉问了一个明显的问题。

【问题讨论】:

  • 如果您找到了自己问题的答案,您应该写下答案并将其标记为正确。这将帮助遇到同样问题的其他人。
  • 感谢 micnil 提供的信息。我阅读了规则,但我做错了;)

标签: three.js


【解决方案1】:

看着这个Get direction between two 3d vectors using Three.js?

我需要两点之间的向量:

var dir=new THREE.Vector3();
dir.subVectors(pointOnPlane,originOnPlane).normalize();

并使用 dir 作为箭头方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多