Я работаю над небольшим проектом с FreeGlut и Glew. Теперь я кодирования системы камеры, но есть некоторые вещи, которые просто странно:OpenGL Неверный поворот камеры
В полноэкранном режиме, если курсор мыши в нижней части экрана, движения камеры быстрее, чем если камера движется в верхней области.
Камера делает странное движение, всегда в том же направлении, небольшое движение движения по 8 фигур.
код:
void MouseOps(int x, int y)
{
// Changes in mousepositions. Always same direction and
// in lower right corner of monitor faster, for some reason.
deltaX = x - MousePreviousX;
deltaY = y - MousePreviousY;
// Also I didn't bother to put * 360 in next equations,
// because it would make the camera jump for crazy.
// resx and resy are screen resolutions.
// Endresult should be that camera can
// rotate once when mouse moves over screen
yaw = yaw + (((deltaX/resx)) * deginrad);
pitch = pitch + (((deltaY/resy)) * deginrad);
//Check clippings (eg. camera wont end upside down etc.)
if(yaw >= (2 * pi) || yaw <= (-2 * pi) )
yaw = 0;
if(pitch >= (pi/2))
pitch = pi/2;
if(pitch <= (pi/-2))
pitch = pi/-2;
//Calculate x, y, and z coordinates of unit sphere to look at (r = 1)
cam_normX = cos(yaw) * sin(pitch);
cam_normY = sin(yaw) * sin(pitch);
cam_normZ = cos(yaw);
// Current x and y to previous
int MousePreviousX = x;
int MousePreviousY = y;
}
Я пытался использовать эту систему http://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates вычислить точку, чтобы посмотреть. Тогда я прошел все «cam_norm» переменных
gluLookAt(cam_posX, cam_posY, cam_posZ,
cam_posX+cam_normX, cam_posY+cam_normY, cam_posZ + cam_normZ,
cam_upX, cam_upY, cam_upZ);
Почему вы объявляете 'MousePreviousX/Y' в конце функции? Они должны быть статическими или глобальными переменными, чтобы сохранить их ценность между вызовами функций. – Nobody
Неплохо, я действительно их дважды объявлял. Я удалил их, но странные вещи не исчезли. На самом деле, похоже, что камера вообще не двигается. – Nyxeria
ОК, он движется, но странно снова. – Nyxeria