LINUX.ORG.RU

Как построить луч?

 , ,


2

3

Помню когда в книге по unity3d читал, там написано было, что чтобы выбрать объект в 3d пространстве, делается луч, с помощью которого можно получить ссылку на объект. Я уже не помню как этот луч называется. Также писалось, что луч, который они применяют намного облегчает программирование, потому что это очень сложно реализовать. Какой луч применяют? Как его сделать? Можно пример на си или c++?

То о чем ты говоришь, в юнити называется raycast. И его реализация привязана к филическому движку.

Aswed ★★★★★
()

Я же писал как можно выбирать 3D объекты, а с лучем еще коллизии проверять надо. Ну а сам луч это легко:

vec3 luch_direct;
vec3 luch_pos;
int luch_len, i;

for(i = 0;i != luch_len;i++) {
  if(detect_collision(world, luch_pos)) {
     ....
     break;
  }
  luch_pos = vec_add(luch_pos, luch_direct);
}
luch_direct это смещение которое нужно применять, его найти можно по косинусам, синусам.

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 1)
Ответ на: комментарий от u0atgKIRznY5

detect_collision проверяет соприкосновение luch_pos (точки) с любым объектом в мире, логика такая...

Как выглядит код проброски луча?

Вот же, выше. Только надо задать luch_len, luch_direct, luch_pos.

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 1)
Ответ на: комментарий от linuhs_user

Ну это сложная реализация, потому как я всё равно не понимаю пока что как можно это сделать. Нужно ещё больше информации. Вот например. Я нажал на экране какую нибудь координату, должно вычислиться позиция откуда будет создаваться луч. Потом строиться этот луч какого нибудь размера. Потом что, если у луча всего лишь точка а и б, то мне надо будет узнать в каких глобальных координатах находится луч, и сравнить есть ли в этом диапазоне объект ближайший. Я правильно понимаю? Ох как же сложно поначалу.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

у луча всего лишь точка а и б

Луч он вроде бесконечный.

Нет, там как бы точка перемещается в определенную сторону шагами, пока не наткнется на объект.

Потом строиться этот луч какого нибудь размера

Ну задай максимум какой нибудь чтоб он за карту бесконечно не уходил.

должно вычислиться позиция откуда будет создаваться луч

Ну берешь позиция камеры, вращение камеры, плюс надо учитывать матрицу трансформации или как это называется) Забыл, и вычисляешь.

А книжек я не читаю.

linuhs_user
()
Ответ на: комментарий от u0atgKIRznY5

есть ли в какой нибудь книжке по разработке игр информация об этом?

Не знаю, как применимо к Юнити, но вообще это описывается в любой книжке по линейной алгебре, или, скорее даже, аналитической геометрии. У тебя есть вектор — точка, откуда ты смотришь на сцену, плюс направление взгляда. У тебя есть точка клика (раз речь идёт о выборе, полагаю, имеется в виду выбор посредством мыши). Построить в трёхмерном пространстве прямую — дело пяти минут поиска в любом поисковике. А дальше проверяешь пересечение с другими объектами. Как только сделаешь это на бумаге, ищешь, как называются классы, реализующие нужный мат. аппарат, в Юнити, и воплощаешь в коде

XMs ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Да хз просто сажусь и делаю, лол. Школу не окончил, двойки в годовых получал. Но вроде примитив, разве что 3д коллизии это сложно, лучше взять что нибудь готовое, ODE например. Ну или можешь попробовать воксели, только там надо будет заняться оптимизацией.

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 1)
Ответ на: комментарий от XMs

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

У нас на аналитической геометрии на 1 курсе проходили кривые 2 порядка. А то, о чём речь в треде — это математика 9 класс

anonymous
()
Ответ на: комментарий от anonymous

А разве в школе не ограничиваются планиметрией? Не помню уже

XMs ★★★★★
()
Ответ на: комментарий от anonymous

У нас на аналитической геометрии на 1 курсе проходили кривые 2 порядка. А то, о чём речь в треде — это математика 9 класс

То, о чём речь в треде — это начертательная геометрия
>>> https://ru.wikipedia.org/wiki/Начертательная_геометрия

atsym ★★★★★
()
Ответ на: комментарий от linuhs_user

Блин, щас делал космический корабль в blender, думал сделаю, как раз опыта наберусь в моделестроении. Думал тебе дать модельку, чтобы ты показал как у тебя в движке будет летать корабль. Но создал цилиндр, и он соединился с кораблём. Я теперь незнаю как отсоединить. Отменить операцию вообще удаляет весь корабль.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от linuhs_user

А там какие модели? Я думал у тебя есть поддержка obj.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от linuhs_user

О, а как ты md2 загружаешь? Они же вроде с анимацией? Точно не помню, но вроде md2 используют в openarena. Может тогда показать что нибудь из своего, что ты сделал?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

О, а как ты md2 загружаешь?

Переписанное вот это: http://tfc.duke.free.fr/coding/src/md2.c

Может тогда показать что нибудь из своего, что ты сделал?

Да блеан мне надо компилятор карт собрать, карту скомпилировать, движок скомпилировать это усе по кускам. При этом это того не стоит, я же говорил что трудно найти ресурсы... Усе выглядит ущербно. Скинул бы тебе просто весь свой архив, да боюсь там что нибудь личное будет.

linuhs_user
()

а в этом треде можно пропиариться?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.