Линия "лицом" к камере

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Линия "лицом" к камере

Сообщение Bonesnapper » 25.09.2005 (Вс) 1:20

Есть линия (прямоугольник из 4 точек)
пусть у нее заданы начало и конец
надо вращать линию так чтоб она была максимально
большей площадью развернута к камере
уже неделю бьюсь
наклепал кое что но так как с геометрией не особо
то думаю есть более рациональный способ
да и в моем примерчике если линия расположена не вдоль
оси Х то при переходе высоты камеры(У) через 0 происходит
разворот линии слишком резко
Помогите сделать все как надо

Вот что я наделал :) (если не понятно что надо)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.09.2005 (Вс) 10:37

Bonesnapper
Может поможет пример отсюда:
http://bbs.vbstreets.ru/viewtopic.php?t ... highlight=

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 25.09.2005 (Вс) 14:39

Bonesnapper, ты билбординг чтоли делать собираешься?
ХЎ

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 25.09.2005 (Вс) 15:16

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.09.2005 (Вс) 16:34

Bonesnapper
В моем примере как раз это есть.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 25.09.2005 (Вс) 19:26

да я посмотрю еще
пока то что надо я там не нашел
там есть фиксация по У
а мне надо зациксировать по оси линии

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 29.09.2005 (Чт) 18:33

чето ни как не разберусь :cry:

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 24.12.2005 (Сб) 1:50

Почти Во вовсем разобрался но проблема в том что у меня в проекте нет углов наклона/поворота камеры
есть только положение камеры и точка куда она смотрит
Mikle подскажи пожайлуста
как мне найти
CosA SinA
CosD SinD
зная позицию точку положения камеры и точку куда она смотрит
пы таюсь найти так:
a = CamPos
D3DXVec3Subtract a, a, BILLBOADpos
a1 = a: a1.y = 0
D3DXVec3Normalize a1, a1
CosA = a1.x
SinA = a1.z

a2 = a: a2.x = 0
D3DXVec3Normalize a2, a2
CosD =a2.y
SinD = a2.z

но чето походу напутал

Заранее благодарен :roll:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 26.12.2005 (Пн) 12:07

Bonesnapper
Берешь единичный вектор, умножаешь на свою матрицу трансформации (насколько понял, у тебя LookAtLH).
d=sqr(v.x*v.x+v.z*v.z)
v.x/d - это SinA
v.z/d - это CosA
v.y - это SinD
sqr(1-SinD*SinD) - это CosD
Возможны варианты со знаками +- в зависимости от проекции.
Вообще писал не проверяя, возможны ошибки. :?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 26.12.2005 (Пн) 12:10

Первый недочет - после умножения на матрицу нужно вектор еще нормализовать.
Последний раз редактировалось Mikle 28.12.2005 (Ср) 16:12, всего редактировалось 1 раз.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 27.12.2005 (Вт) 14:33

сор может я туплю :?
но как можно перемножить вектор и матрицу они же разной размерности?

Берешь единичный вектор, умножаешь на свою матрицу трансформации (насколько понял, у тебя LookAtLH).

ну так и есть только LookAtRH

вот так ставится камера

D3DXMatrixLookAtRH matView, acam, vec3(3, 3, 3), vec3(0, 1, 0)
d3dDevice.SetTransform D3DTS_VIEW, matView

D3DXMatrixPerspectiveFovRH matView, 3.14 / 4, 1, 1, 11000
d3dDevice.SetTransform D3DTS_PROJECTION, matView

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 27.12.2005 (Вт) 18:42

Bonesnapper
D3DXVec3Transform

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 28.12.2005 (Ср) 15:26

Вот рабочая функция. Проверено:
Код: Выделить всё
Dim SinA As Single, CosA As Single, SinD As Single, CosD As Single

Private Sub CalcAngleDiff()
Dim v As D3DVECTOR
  d3dDevice.GetTransform D3DTS_VIEW, Mtrx
  D3DXMatrixInverse Mtrx, 1, Mtrx
  D3DXVec3TransformNormal v, vec3(0, 0, 1), Mtrx
'  D3DXVec3Normalize v, v   'Эта строка возможно не понадобится
  SinD = v.y
  CosD = Sqr(1 - SinD * SinD)
  SinA = -v.x / CosD
  CosA = v.z / CosD
End Sub

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 28.12.2005 (Ср) 20:47

оо спасибо огромное :D
я как раз хотел воспроизвести то что ты мне ранее сказал :D
пойду тестить

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 29.12.2005 (Чт) 18:33

Все работает (подругому правда и быль не могло :) )
Но похоже я пошел по ложному следу :x
как я понял даже зная все координаты 2х билбоардов
не получится сделать так чтоб линия была максимально развернута к камере :?
подскажите что делать совсем упарился уже больше месяца
бьюсь и все ни к чему
(все что сделал работает только если точи лежат в плоскости XZ)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.12.2005 (Пт) 16:24

Bonesnapper
В примере из второго поста это есть.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 31.12.2005 (Сб) 2:59

Да я вроде весь пример перебрал но не нахожу там того что бы 100% подошло мне :?

вот я тут подправил твой пример получил почти то что хотел
НО проблема одна всеже есть если камера находится над линией и смотрит прямо на нее то линию не видно
посмотри пожайлуста как это исправить


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot] и гости: 0

    TopList