회전 할 수있는 화살표를 직선으로 이동하려고합니다. 올바른 공식을 찾는 데 어려움이 있습니다. 아마 사인과 코사인이 포함되어야한다는 것을 알고 있지만, 다양한 구성을 시도하고 작동하는 것을 얻을 수 없었습니다. 여기 회전 된 화살표를 직선으로 이동
는 화살표 내 장면의 사진과 나비의rotateNumber (1 왼쪽 회전) -1과 같은 정수, 0 (회전), 1 (1 개 우회전) 등이다
rotateAngle은 기본적으로 10도입니다. 여기
if (arrowMoving) {
var rAngle = rotateAngle * rotateNumber;
var angleInRad = rAngle * (Math.PI/180);
var stepSize = 1/20;
arrowX += stepSize * Math.cos(angleInRad);
arrowY += stepSize * Math.sin(angleInRad);
DrawArrowTranslate(arrowX, arrowY);
requestAnimFrame(render);
} else {
DrawArrow();
arrowX = 0;
arrowY = 0;
}
화살표를 그리고 변환하는 코드입니다 : 여기
화살표를 이동하는 코드의
function DrawArrowTranslate(tx, ty) {
modelViewStack.push(modelViewMatrix);
/*
var s = scale4(0.3, -0.7, 1);
var t = translate(0, -4, 0);
*/
var s = scale4(0.3, -0.7, 1);
var t = translate(0, -5, 0);
var t2 = translate(0 + tx, 1 + ty, 0)
// rotate takes angle in degrees
var rAngle = rotateAngle;
var r = rotate(rAngle, 0, 0, 1);
var m = mult(t, r);
var m = mult(m, t2);
modelViewMatrix = mat4();
modelViewMatrix = mult(modelViewMatrix, m);
modelViewMatrix = mult(modelViewMatrix, s);
/*
// update bounding box
arrowBoundingBox.translate(0, -5);
arrowBoundingBox.rotate(rAngle);
arrowBoundingBox.translate(0, 1);
arrowBoundingBox.scale(0.3, -0.7);
*/
gl.uniformMatrix4fv(modelViewMatrixLoc, false, flatten(modelViewMatrix));
gl.drawArrays(gl.LINE_STRIP, 1833, 4);
gl.drawArrays(gl.LINE_STRIP, 1837, 4);
modelViewMatrix = modelViewStack.pop();
}
참고 : 단위 원과 양각이 반 시계 방향 인 방법을 고려하면 리프트를 직접 가리키는 것으로부터 시작해야합니다. – Hallsville3
rotateNumber를 제거하기 위해이를 변경했으며 여전히 작동하지 않습니다. 왼쪽을 완전히 가리키면 작동하고 그렇지 않으면 잘못된 방향으로 이동합니다. 예를 들어 회전이 없으면 직선 이동 대신 오른쪽으로 직접 이동합니다. – Suerg
좌표계에서 왼쪽 위 모서리의 (0,0)입니다. – Hallsville3