上下文:尝试使用THREE.js并使用它来显示圆锥曲线。
方法:创建顶点网格,然后将face4连接到所有顶点。使用两个面来产生正面和背面,这样当圆锥部分旋转时,摄像机从哪个角度看它都无关紧要。
遇到的问题:1。试图找到一种创建直观鼠标旋转方案的好方法。如果你认为在球坐标系中,那么感觉就像只是改变phi而左/右改变phi会起作用。但这要求您可以移动相机。据我所知,除了对象之外,没有办法主动改变任何东西的旋转。有谁知道如何改变相机或场景的旋转? 2.有没有办法绘制比创建网格更好的函数?如果网格有很多点,那么它太慢了,如果网格点很少,那么就不能轻易地确定圆锥截面的形状。
任何形式的帮助都是最优秀的。
答案 0 :(得分:1)
我还在开始学习Three.js,所以我不确定你问题的第二部分。 对于第一部分,要更换相机,有一种非常好的方法,也可以包括缩放和移动场景:轨迹球相机。
有关确切的代码以及如何使用它,您可以查看: https://github.com/mrdoob/three.js/blob/master/examples/webgl_trackballcamera_earth.html
在本页的底部(http://mrdoob.com/122/Threejs),您可以看到实例中的示例(从底部开始的第三行中的地球仪)。
答案 1 :(得分:0)
有一个用于three.js相机的轨道控制脚本。
我不确定我是否理解旋转位。您确实想要旋转对象,但是您是正确的,旋转是相对的。
旋转或移动相机时,会计算该位置/旋转的矩阵,并确实在保持相机静止的同时旋转场景。
这是无关紧要的,因为你在模型/世界空间工作,并且你将相机放在其中,引擎负责引擎盖下的旋转。
您可能想要的是设置一个对象,使用球面坐标连接您的旋转,并将您的相机作为一个孩子链接到此对象。沿着摄像机Z轴相对于物体的平移应该模仿你的小车(变焦是FOV变化)。
答案 2 :(得分:0)
您可以通过更改其位置来旋转相机。请参阅我在此处粘贴的代码:https://gamedev.stackexchange.com/questions/79219/three-js-camera-turning-leftside-right
正如其他人所说,OrbitControls.js是用户管理相机的直观方式。
我在构建formulatoy.net时解决了许多相同的问题。我使用Morphing Geometries,因为我发现将3d数学函数映射到UV表面需要v代码很少,它允许一种简单的方法来实现不同的坐标系(笛卡尔,球形,圆柱形)。
你可以使用粒子而不是网格我想,但网格看起来最好。如果您尝试以数学方式理解曲面,则晶格材料不太有用。在这一点上,我正在考虑在表面上绘制我自己的X,Y线(或者是phi,theta线等)以更好地展示横截面。
希望有所帮助。
答案 3 :(得分:0)
您可以使用轨迹球控件来放大和缩小对象,旋转对象,平移它。在轨迹球控件中,您正在围绕对象移动相机。对象仍然相对于屏幕或渲染器中心旋转(0,0,0)。