Скажем, у меня есть структура данных, такая как:
Camera {
double x, y, z
/** ideally the camera angle is positioned to aim at the 0,0,0 point */
double angleX, angleY, angleZ;
}
SomePointIn3DSpace {
double x, y, z
}
ScreenData {
/** Convert from some point 3d space to 2d space, end up with x, y */
int x_screenPositionOfPt, y_screenPositionOfPt
double zFar = 100;
int width=640, height=480
}
...
Без отсечения экрана или большей части чего-либо еще, как бы я вычислил положение x, y на экране некоторой точки, заданной некоторой трехмерной точкой в пространстве. Я хочу проецировать эту трехмерную точку на экран 2d.
Camera.x = 0
Camera.y = 10;
Camera.z = -10;
/** ideally, I want the camera to point at the ground at 3d space 0,0,0 */
Camera.angleX = ???;
Camera.angleY = ????
Camera.angleZ = ????;
SomePointIn3DSpace.x = 5;
SomePointIn3DSpace.y = 5;
SomePointIn3DSpace.z = 5;
ScreenData.x и y - это позиция экрана x трехмерной точки в пространстве. Как рассчитать эти значения?
Я мог бы использовать найденные здесь уравнения, но я не понимаю, как играет ширина и высота экрана. Кроме того, я не понимаю в вики-записи, что такое позиция зрителя в зависимости от положения камеры.