Как убедиться, что объект не выходит за пределы видимого диапазона -> opengl-> c - PullRequest
3 голосов
/ 06 января 2011

Представьте, что у вас есть какой-то многоугольник в центре экрана (скажем, квадрат с учетом 2D-мира), и у вас есть функция для перерисовки этого многоугольника из центральной точки.Каждый раз, когда вы нажимаете вверх, вниз, влево или вправо на клавиатуре, фигура будет перерисовываться с учетом нажатой клавиши (вверх или вниз обновит координаты y, а левая и правая обновит координаты).Учитывая, что у вас есть: glutInitWindowSize (400,400);glutInitWindowPosition (400,200);

, и я использую glMatrixMode (GL_MODELVIEW), как я могу предотвратить выход формы из поля зрения камеры?

PS: до сих пор я могу только предотвратитьне выходя из левого и нижнего я проверяю на обновление координат при перерисовке, если у или х будет отрицательным (если они будут, форма будет перерисовываться в той же позиции), но я не могу найти способ сделать то же самое справый и верхний края окна.

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Похоже, вам нужно либо установить дальнюю плоскость отсечения камеры на большее расстояние, либо убедиться, что ваш объект не выходит за пределы свойства дальнего клипа камеры.

3 голосов
/ 06 января 2011

Прочитав ваши комментарии к другому ответу, у меня возникла мысль. Я не уверен, что это подойдет, но это может быть полезно.

Насколько я понимаю, у вас есть вид самолета, которым управляет игрок, и когда игрок перемещает самолет в пределах настроек, вы хотите, чтобы корабль двигался относительно вида, который имеет игрок, но вы не хочу чтобы он выходил из вида. Я предполагаю, что весь вид движется, когда корабль летит вперед (это может быть неправильно).

Моя идея заключается в том, что вы всегда заставляете вид двигаться к центру корабля со скоростью, которая увеличивается по мере удаления самолета от центра вида. По мере того, как аппарат отходит достаточно далеко от центра, чтобы приблизиться к краям, скорость, с которой камера будет повторно центрироваться на корабле, будет увеличиваться (и ограничение скорости движений камеры превышает ограничение скорости самолет). Когда камера приближается к самолету, она замедляется. (да, это очень похоже на особую относительность)

Вы должны быть в состоянии следить за расстоянием от центра, в котором находится самолет, сначала зная, что он был первоначально отцентрирован, а также зная, какую трансформацию вы произвели на нем. Вы можете обновить матрицу преобразования, которая соответствует движениям, которые вы применяете к летательному аппарату, и при каждом обновлении вы можете вычислить обратную операцию, которая переместит камеру обратно в центр обзора камеры, а затем умножить эту матрицу на скаляр 1 / 2, и преобразовать всю сцену этим. Если вы не хотите, чтобы камера вращалась вместе с направлением самолета, то вы просто не ставите повороты в матрицу, которая идет в ногу с этим. Сколько вы хотите перемещать камеру каждое обновление (1/2 в моем примере) зависит от вас. Я выбрал 1/2, потому что часть, которую вы применяете, и часть, которую вы сохраняете для следующего обновления, совпадают.

Прошло много времени с тех пор, как я работал с openGL, но я помню, как мог читать матрицы обратно из движка , но это достаточно легко, чтобы справиться самостоятельно.

Это может быть совсем не то, что вы хотели, но, похоже, это может быть полезно.

1 голос
/ 06 января 2011

звучит так, как будто вам нужно отслеживать ширину и высоту вашего графического объекта, а затем использовать некоторое вычитание, чтобы вычислить максимально допустимое положение x и y.

это школа?назначение между прочим?

...