Как можно реализовать вращение камеры по сфере радиусом R, причем камера должна быть Направлена в центр сферы?
Интересует любая информация, исходники (D3D, GL), статьи
Спасибо.
Uot
Какие нафиг исходники?? Читай свой школьный учебник в разделе по тригонометрии.
(x - x0) ^ 2 + (y - y0) ^ 2 + (z - z0) ^ 2 = R ^ 3
что дальше?
Тебе нужен так называемый полярный вид, где положение камеры определяется тремя углами(azimuth, twist, elevation) и дистанцией(R) до центра сферы. Исходники есть в любом учебнике по компьютерной графике и у меня дома, но я к сожалению не дома.
Suppose your application involves orbiting the camera around an object that's centered at the origin. In this case, you'd like to specify the viewing transformation by using polar coordinates. Let the distance variable define the radius of the orbit, or how far the camera is from the origin. (Initially, the camera is moved distance units along the positive z-axis.) The azimuth describes the angle of rotation of the camera about the object in the x-y plane, measured from the positive y-axis. Similarly, elevation is the angle of rotation of the camera in the y-z plane, measured from the positive z-axis. Finally, twist represents the rotation of the viewing volume around its line of sight.
Show that the following routine could serve as the viewing transformation:
void polarView{GLdouble distance, GLdouble twist,
GLdouble elevation, GLdouble azimuth)
{
glTranslated(0.0, 0.0, -distance);
glRotated(-twist, 0.0, 0.0, 1.0);
glRotated(-elevation, 1.0, 0.0, 0.0);
glRotated(azimuth, 0.0, 0.0, 1.0);
}
Попробуй поставить по этим координатам какойто обект, по том как он движетса, изменяя угли "a" и "b" все поймеш! :)
x=cos(a)*cos(b)*R;
z=sin(a)*cos(b)*R;
y=sin(b)*R;
Вообще то есть ище варианты движения по сфере, а для чево тебе это нужно??
а если у меня x, y, z
углы высчитать не могу - нет arc*() функций
а есть ли другие способы подсчета углов?
функций нет - потому что это mobile device
Вращение подразумевает углы.
Что вообще нет, может хоть чтото???
Одними "+" и "-" тут не обойтись!! :)))
Тебе осталось написать библиотеку с тригонометрическими функциями.
есть sin(), cos(), sqrt() ...
нет только arc*()
Так чем тебе мой вариант не подходит???
Тогда смотри формулы Nazik'a.
Тема в архиве.