0

所以我正在尝试学习一些 3D 编程,并尝试做一些实验来更好地理解事物是如何工作的。

我正在尝试的一件事是(使用threejs)画一条线并随机旋转它。

我从来都不是矩阵专家,我总是以“在我脑海中有意义”的方式在 2D 中做事

# CoffeeScript
get_angle:->
  Math.atan2(@props.velocity[1],@props.velocity[0])
rotate:(amount)->
    ang = @get_angle()
    mag = @get_speed()
    # props is a velocity vector, [0] is x and [1] is y
    @props.velocity[0] = Math.cos(ang+amount)*mag
    @props.velocity[1] = Math.sin(ang+amount)*mag

传入的数量是随机的......生成随机“行走”

我现在想知道如何在 3d 中做同样的事情?现在应用程序运行良好(我看到了我的线路),但它是“平坦的”。没有深度(由于 Z 组件没有被修改)这就是我想做的事情,这会是一个聪明的方法吗?

咖啡脚本

get_angle:->
    Math.atan2(@props.velocity[1],@props.velocity[0])
get_angle2:->
    # not sure about this, but I feel like I need to be finding the angle from the z now and something else.
rotate:(amount)->
    ang = @get_angle()
    ang2 = @get_angle2()
    mag = @get_speed()
    # props is a velocity vector, [0] is x and [1] is y
    @props.velocity[0] = Math.cos(ang+amount)*mag
    @props.velocity[1] = Math.sin(ang+amount)*mag
    @props.velocity[2] = # I have a feeling here I would do something with ang2 and amount?

我知道从技术上讲,我可能想传递两个组件的旋转,但我想也许我可以尝试让所有三个组件旋转相同。

4

1 回答 1

1

3d 中的旋转比 2d 中的旋转要复杂一些,因为您必须绕线旋转,或者使用四元数,而不是点 (2d)。在这里查看旋转矩阵的不同组合,具体取决于您旋转的线。3d 变换涉及四乘四矩阵来创建齐次坐标,并且需要矩阵的三乘三部分来创建旋转。

您还可以使用四元数(一种特殊的数字)来计算旋转,这在 3d 应用程序中使用起来非常方便,因为它解决了与“云台锁定”有关的一些问题。

于 2013-02-14T07:31:29.330 回答