【问题标题】:Working with Three.js使用 Three.js
【发布时间】:2020-01-06 01:29:22
【问题描述】:

上下文:尝试获取 THREE.js 并使用它来显示圆锥曲线。

方法:创建一个顶点网格,然后将 face4 连接到所有顶点。使用两个面来生成正面和背面,这样当圆锥部分旋转时,相机从哪个角度观看它都无关紧要。

遇到的问题: 1. 试图找到一种创建直观鼠标旋转方案的好方法。如果您在球坐标中思考,那么感觉就像只是制作上/下更改 phi 和左/右更改 phi 就可以了。但这要求您可以移动相机。据我所知,除了物体之外,没有办法主动改变任何东西的旋转。有谁知道如何改变相机或场景的旋转? 2. 有没有比创建网格更好的绘制函数的方法?如果网格有很多点,那就太慢了,如果网格有几个点,那么你就不能很容易地分辨出圆锥曲线的形状。

任何形式的帮助都是最好的。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    我还在开始学习 Three.js,所以我不确定你问题的第二部分。 对于第一部分,更换相机,有一个很好的方法,也可以包括缩放和移动场景:轨迹球相机。

    具体代码及使用方法,您可以查看: https://github.com/mrdoob/three.js/blob/master/examples/webgl_trackballcamera_earth.html

    在此页面的底部 (http://mrdoob.com/122/Threejs),您可以看到正在运行的示例(底部第三行中的地球)。

    【讨论】:

      【解决方案2】:

      three.js 相机有一个轨道控制脚本。

      我不确定我是否理解旋转位。你确实想旋转一个物体,但你是对的,旋转是相对的。

      当您旋转或移动相机时,系统会针对该位置/旋转计算一个矩阵,并且它确实会在保持相机静止的同时旋转场景。

      但这无关紧要,因为您在模型/世界空间中工作,并且您将相机放置在其中,引擎负责引擎盖下的旋转。

      您可能想要的是设置一个对象,将您的旋转与球坐标联系起来,并将您的相机作为一个子对象链接到该对象。沿相机 Z 轴相对于对象的平移应该模仿您的小车(缩放是 FOV 变化)。

      【讨论】:

        【解决方案3】:

        您可以通过更改其位置来旋转相机。请参阅我在此处粘贴的代码:https://gamedev.stackexchange.com/questions/79219/three-js-camera-turning-leftside-right

        正如其他人所说,OrbitControls.js 是用户管理相机的一种直观方式。

        我在构建 formulatoy.net 时解决了许多相同的问题。我使用 Morphing Geometries 是因为我发现将 3d 数学函数映射到 UV 表面只需要很少的代码,并且它允许一种简单的方法来实现不同的坐标系(笛卡尔坐标系、球坐标系、圆柱坐标系)。

        我想你可以使用粒子而不是网格,但网格似乎最好。如果您试图从数学上理解一个表面,那么晶格材料并不太有用。此时我正在考虑在表面上绘制我自己的 X、Y 线(或 phi、theta 线等)以更好地展示横截面。

        希望对您有所帮助。

        【讨论】:

          【解决方案4】:

          您可以使用轨迹球控件来放大和缩小对象、旋转对象、平移它。在轨迹球控件中,您正在围绕对象移动相机。对象仍然相对于屏幕或渲染器中心旋转(0,0,0)。

          【讨论】:

            猜你喜欢
            • 2012-11-19
            • 1970-01-01
            • 1970-01-01
            • 2012-06-13
            • 1970-01-01
            • 2018-12-13
            • 2013-09-03
            • 2013-06-01
            • 2023-04-07
            相关资源
            最近更新 更多