d3d_set_projection(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup) Определяет просмотр окружения. Вы определяете точку просмотра from (от), и точку для просмотра по верхнему вектору.
Эта функция требует некоторое объяснение. Чтобы установить проектирование, Вам сначала нужна позиция просмотра from (от). Она указывается параметрами (xfrom,yfrom,zfrom). Затем Вы должны определить направление просмотра. Это делается посредством подачи точек секунды, для просмотра towards (к). Это точка (xto,yto,zto). Наконец, Вы можете всё ещё вращать камеру вокруг линии с точки вида в точку просмотра. Для того чтобы определить это, мы должны задать верхний вектор, то есть, направление, которое находиться вверху камеры. Это задаётся последними тремя параметрами (xup,yup,zup). Позвольте мне предоставить пример. Чтобы смотреть вдоль плоскости xy как в FPS Вы можете использовать
{
d3d_set_projection(100,100,10,200,100,10,0,0,1);
}
Итак, Вы смотрите из точки (100,100) и 10 - выше плоскости в направлении (200,100). Верхние векторные точки являются z-направлением, как это и нужно. Для того чтобы сделать это более усложнённым - представьте, что у Вас есть образец объекта в Вашей комнате, который определяет позицию камеры. У него будет текущая позиция (x,y) и направление (и, возможно, равная скорость). Теперь Вы можете определить это как камеру, используя следующий код:
{
with (obj_camera)
d3d_set_projection(x,y,10,
x+cos(direction*pi/180),y-sin(direction*pi/180),10,
0,0,1);
}
Это может выглядеть немного сложно. Мы смотрим из позиции камеры (x,y), 10 - выше земли. Чтобы определить точку в правильном направлении, нам нужно заняться небольшой арифметикой. Эта точка указывается следующими тремя параметрами. Наконец мы используем верхний вектор, как и в случае выше.
Одно важное замечание! Когда Game Maker начинает рисовать комнату, то он устанавливает точку вида в встроенную по умолчанию позицию. Итак, первая вещь, которую Вы должны делать при рисовании сцены - набор желаемых проектирований. Это должно быть указано в событии рисования!
Имеется немного расширенная версия вышеупомянутой функции:
d3d_set_projection_ext(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,angle,aspect,znear,zfar) Расширенная версия вышеуказанной функции, в которой Вы дополнительно определяете: угол, определяющий поле зрения, отношение свободной длины к высоте между горизонтальным и вертикальным размером вида, и близко или далеко вырезать плоскости.
Дополнительные параметры работают следующим образом. Если Вы определили позицию камеры - укажите точки просмотра и верхний вектор. Вы можете всё ещё изменить широкую линзу камеры. Это называется - поле зрения. Разумная величина - 45 градусов и это значение по умолчанию. Но Вы можете изменить это значение. Затем Вы можете определить отношение свободной длины к высоте между горизонтальным и вертикальным проектированием. Обычно Вы захотите использовать такое же проектирование, которое имеет и аспекты комнаты или вида, например: 640/480. Наконец, Вы можете указать вырезание плоскости. Объекты, находящиеся ближе, чем в позиции znear (ближняя z-плоскость) - в камере не рисуются. Аналогично и для объектов, находящихся дальше плоскости zfar. (дальняя z-плоскость). Это может быть важным, чтобы установить эти параметры в разумные величины, поскольку они также влияют точность z-comparisons (сравнения). Если Вы делаете диапазон слишком большим, то точность получается хуже. По умолчанию используется 1 и 32000. znear должно быть больше 0!
Иногда, Вам понадобиться временное обычное орфографическое проектирование, которое в 3D не используется. Или Вы хотите возвратиться к перспективам проектирования по умоланию. Для этого Вы можете использовать следующие функции:
d3d_set_projection_ortho(x,y,w,h,angle) Устанавливает обычное орфографическое проектирование указанной области в комнате и вращение над указанным углом.
d3d_set_projection_perspective(x,y,w,h,angle) Устанавливает обычное перспективное проектирование обозначенной области в комнате, вращаемой по указанному углу.
Стандартно это используется для рисования оверлея, чтобы, например, показать игровой счёт или другие аспекты. Чтобы этого достичь, мы должны установить орфографическое проектирование. Мы также должны временно отключить скрытое удаление поверхности, в котором мы хотим, чтобы информация отображалась независимо от текущего значения глубины. Следующий пример показывает, как создать оверлей с игровым счётом.
{
draw_set_color(c_black);
d3d_set_projection_ortho(0,0,room_width,room_height,0);
d3d_set_hidden(false);
draw_text(10,10,'Score: ' + string(score));
d3d_set_hidden(true);
}