我有一个立方体,它绕着它的3轴旋转,当键[a]==true时,它会向左旋转,就好像它是这样滚动的。将立方体向任何方向旋转45度都会使其向后旋转90度,以产生继续的错觉。这将保持与环境成<45度角的3个轴
我相信这是正确的,但是立方体的x轴似乎是相对于环境的,而y和z是相对于立方体方向的,我在文档中找不到这方面的参考,这是一个bug吗?https://processing.org/reference/rotatey_.htmlhttps用法:://processing.org/reference/rotatex\ux.html
if(keys[w]) {
if (x >= 359) x = 0;
x = x + 1;
}
if(keys[a]) {
if (z >= 359) z = 0;
z = z + 1;
}
if(keys[s]) {
if (x <= 0) x = 359;
x = x - 1;
}
if(keys[d]) {
if (z <= 0) z = 359;
z = z - 1;
}
// return 90 deg for magic trick
if (x > 45 && x < 180) x = 270 + x;
if (x < 316 && x > 180) x = 360 - x;
if (y > 45 && y < 180) y = 270 + y;
if (y < 316 && y > 180) y = 360 - y;
2条答案
按热度按时间5fjcxozz1#
矩阵变换是不可交换的。顺序很重要。矩阵运算如
rotate()
指定一个新矩阵,并将当前矩阵乘以新矩阵。因此,这样做是有区别的
那么做呢
和
不等于
一个可能的解决方法是使用四元数。四元数的行为不同于欧拉角,也没有万向节锁的问题。在引擎盖下使用opengl进行处理,不支持四元数。然而,四元数可以转化为矩阵,矩阵可以通过
applyMatrix()
.gz5pxeao2#
我发现这个弧形球的例子正是我想要的。只是添加了一个修改来使用键而不是鼠标拖动。
带mod的弧形球
主要的
稍后将添加对一次编辑多个键的支持。。。。敬请期待