javascript - 更改立方体 WebGL 的旋转
问题描述
我需要解决一个 tsk,要求我模拟狗尾巴的行为。这个“故事”是一个简单的立方体,我从 0° 旋转到 45°,从 45° 旋转到 0°。问题是当它到达 45° 时,它又从 0° 开始旋转。
我需要不断的运动;不恢复初始位置并从 0° 重新开始旋转到 45°。
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
function move() {
// TAIL
var dir = true;
if ( theta[tailId] < 45 ) {
theta[tailId] +=1;
}
if (theta[tailId] == 45){
while(theta[tailId] !=45 )theta[tailId]+=-1;}
解决方案
您应该使用 dir 变量(已指定),但只能作为数字使用。当值超过界限时,只需反转方向。
就像是:
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
var dir = 1;
function move() {
// TAIL
theta[tailId] += dir;
if ( theta[tailId] < 0 ) {
theta[tailId] = 0;
dir = -dir;
} else
if ( theta[tailId] > 45 ) {
theta[tailId] = 45;
dir = -dir;
}
}
您可以尝试使用 sinus 函数。看起来更好...
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
var phase = 0;
var step = 0.1;
function move() {
// TAIL
// convert from -1..1 => 0..45
theta[tailId] = 22.5 + (Math.sin(phase) * 22.5);
phase += step;
}
推荐阅读
- c# - 如何使用c#winform在谷歌表格中增加选定的列
- c# - 从 Oracle 数据库中获取数据
- amazon-web-services - 我们可以在 terraform 输出中获得 AWS EC2 状态 1/2 或 2/2 状态吗?
- c++ - 基于着色器文件创建和链接动态头文件
- elasticsearch - 使用 Log4j 将应用程序日志写入远程服务器
- android - 如果我的 api 密钥有效且适当,但 android studio 仍然显示错误,请在颤振中传递有效的 api 密钥,解决方案是什么?
- react-native - 无法解决依赖“react-native-pure-chart@*”(网络请求失败)
- c++ - 创建一个 C++ 程序以查找给定整数数组中的整数对的数量,其总和等于指定数字
- uwp - 如何获取已安装的 nuget 包信息
- php - 为什么我的提交按钮不能将信息发送到我想要的电子邮件?(PHP)