0
에 의해 변수를 전달 나는 그들이 매우 유사하기 때문에 나는이 일에 합병을 시도하고있어 다음과 같은 두 가지 수준의 기능을 가지고 :이상한 행동이 개 수준의 기능을 통합하고 참조
void Camera::UpdateCameraPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Position.SetValue(
Player.x + CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Player.y + CAMERA_ORBIT_OFFSET * sin(-beta),
Player.z + CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Position = Player;
}
}
void Camera::UpdatePlayerPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Player.SetValue(
Position.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Position.y - CAMERA_ORBIT_OFFSET * sin(-beta),
Position.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Player = Position;
}
}
당신이 볼 수 있듯이, Player
및 Position
은 클래스의 두 개의 전용 변수입니다. 데이터 유형은 Vector3D
이고 또 다른 클래스입니다.
void Camera::UpdateCameraOrPlayerPosition(Vector3D &target, Vector3D reference) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
target.SetValue(
reference.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
reference.y - CAMERA_ORBIT_OFFSET * sin(-beta),
reference.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
target = reference;
}
}
이 컴파일 및하지만 동일하게 동작하지 않습니다
나는 이런 식으로 병합하기 위해 노력하고있어. 다른 두 함수가 작동하는 동안이 함수 호출을 대신이 함수 호출을 바꿀 때 작동하지 않습니다. 내가 한
대체 사항이 있습니다 : 내가 대신 참조 포인터로 시도
UpdatePlayerPosition() -> UpdateCameraOrPlayerPosition(Player, Position)
UpdateCameraPosition() -> UpdateCameraOrPlayerPosition(Position, Player)
, 결과는 동일했다. 내가 여기서 뭔가를 놓치고 있니?
'UpdateCameraPosition() -> UpdateCameraOrPlayerPosition (Position, Player)'의 경우 'CAMERA_ORBIT_OFFSET'의 사용을 +에서 -로 변경했습니다. –
저는 멍청하고 눈이 멀었습니다 : S –