forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Расчет линии горизонта (http://forum.boolean.name/showthread.php?t=20728)

Evgen 29.07.2018 01:48

Расчет линии горизонта
 
Вложений: 1
Можно ли по высоте камеры от уровня земли и ее углу тангажа как-то рассчитать позицию линии горизонта в экранных координатах, с учетом дальней плоскости отсечения камеры?

По рисунку мне нужно найти расстояние h от нижней границы экрана.

ABTOMAT 29.07.2018 08:57

Ответ: Расчет линии горизонта
 
Твоя задача найти координаты XYZ этой точки что ты нарисовал (зная вектор направления камеры и расстояние клипа это можно сделать), а потом спроецировать в экранные координаты (в Юнити есть АПИ для этого, гугли Unity Camera Project)

Evgen 29.07.2018 11:35

Ответ: Расчет линии горизонта
 
Вложений: 1
Цитата:

Сообщение от ABTOMAT (Сообщение 315423)
Твоя задача найти координаты XYZ этой точки что ты нарисовал (зная вектор направления камеры и расстояние клипа это можно сделать), а потом спроецировать в экранные координаты (в Юнити есть АПИ для этого, гугли Unity Camera Project)

Спс за ответ.
Нет все труднее. На выходе должно быть типа линяя горизонта 200 пикселей от нижней границы экрана... Или линия горизонта ушла за экран. Можно не в пикселях а например в координатах от 0 до 1. Все это при условии что линия горизонта не вращается по оси крена (поперечная ось), то есть она всегда горизонтально расположена на экране.

В общем если смотреть скриншот нужно рассчитать высоту зеленой линии на экране. Она получается ниже реальной линии горизонта потому что Far clip plane камеры обрезает синюю плоскость ближе.

Задачка непростая в общем и ее сложно объяснить но я старался доходчиво.

Evgen 29.07.2018 12:03

Ответ: Расчет линии горизонта
 
Как минимум возникает проблема найти точку пересечения клипа камеры с нулевым уровнем земли.
Ладно Автэ не ломай голову есть у меня одна идея.

Evgen 29.07.2018 15:43

Ответ: Расчет линии горизонта
 
Решено.


PHP код:

float cdist=100// cam clip plane
Vector3 p1=Camera.main.ViewportToWorldPoint(new Vector3 (0.5f0fcdist));
Vector3 p2=Camera.main.ViewportToWorldPoint(new Vector3 (0.5f1fcdist));
float deltaz = (p1.p2.z);
float groundoffset 0.6f;
float h 1.0f/deltaz*(p1.z-groundoffset); 
Debug.Log("p1z="+p1.z+" p2z="+p2.z+" h="+h); 



Часовой пояс GMT +4, время: 20:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot