Здравствуйте. Я пишу программы на VB и меня интересует вопрос по 3D - графике.
Дано следующее:
VX, VY, VZ - координаты точки;
CX, CY, CZ - координаты камеры;
RX, RY, RZ - Вращение камеры по оси X, Y и Z.
Нужно найти:
SQ - видимость точки
SX - горизонтальный угол отображаемой на экране.
SY - вертикальный угол точки, отображаемой на экране.
У меня есть этот кусок программы, но мне кажется, что он работает неправильно:
Код:
cosx = Cos(RX)
cosy = Cos(RY)
cosz = Cos(RZ)
sinx = Sin(RX)
siny = Sin(RY)
sinz = Sin(RZ)
SQ = 1
TX = VX - CX
TY = VY - CY
TZ = VZ - CZ
T = TX * cosz - TY * sinz
TY = TX * sinz + TY * cosz
TX = T
T = TZ * cosy - TY * siny
TY = TZ * siny + TY * cosy
TZ = T
T = TX * cosx - TZ * sinx
TZ = TX * sinx + TZ * cosx
TX = T
T = TX ^ 2 + TZ ^ 2
TR = Sqr(T + TY ^ 2)
T = Sqr(T)
If TR = 0 Then
SX = 0
SY = 0
Else
SX = TX * 90 / TR
SY = TZ * 90 / TR
If TY < 0 Then
SQ = 0
If T = z Then
SX = 0
SY = 0
Else
SX = TX * 180 / T - SX
SY = TZ * 180 / T - SY
End If
End If
End If
Прога написана на Visual Basic 6.0
Вроде бы показывает точку правильно, но меня интересует, есть способ лучше этого???
-- Пт окт 23, 2009 01:56:48 --Здесь еще и TR - расстояние от камеры, до точки (нужно для текстурного доминирования)
Вообще, начиная с 7 строчки и до конца - это кусок из цикла обработки всех точек, просто без массивов рассматривать будет проще.