Сопоставление 2D-объекта с 3D-пространством, сохранение 2D-размера

У меня есть примитив сферы papervision3d, который я добавляю в сцену. Размер сферы изменяется с радиусом 285. Однако из-за свойств моей камеры (масштабирование, фокус и z) сфера визуализируется с разрешением 206 пикселей вместо 570 пикселей, что я хочу (2 * радиус).

Некоторое время назад я нашел сообщение в блоге, посвященное этой самой проблеме, и было объяснено, что вы можете установить z любого объекта в сцене так, чтобы он отображался в 3D-пространстве того же размера, что и в 2D-пространстве, используя следующее:

mySphere.z = (this.camera.zoom * this.camera.focus) - Math.abs(this.camera.z) + radius;

Вышеупомянутое сработало, когда я использовал несколько блоков, где радиус был заменен на ширину / 2. Почему-то для сферы это не работает.

Есть идеи, советы о том, как получить сферу диаметром 570 пикселей для отображения на экране?

Спасибо.


person sberry    schedule 07.12.2009    source источник


Ответы (1)


Этого нельзя достичь, по крайней мере, точно. Перспективная проекция не отображает сферу в круг. Видите, как сферы по краям этого изображения деформируются? сетка сфер
(источник: uni-stuttgart.de)

person Roman Zenka    schedule 25.05.2010
comment
Я точно понимаю, о чем вы говорите. Но в моей ситуации у меня есть одна сфера, вроде той, что находится в центре вашей решетки (красная). Кажется, это соответствует кругу, как я хочу, - мне просто нужно, чтобы он был фиксированного размера. - person sberry; 26.05.2010
comment
Ха, 9 лет я совершенно не видел твоего ответа. Извини за это. Если ваша формула работает для других объектов, но не для сферы (я предполагаю, что это плоские объекты?), Представьте, что вы рисуете на экране плоский круг. Если у вас все в порядке, обратите внимание на радиус круга (r) и расстояние круга от положения камеры (d). Затем вам нужно скорректировать радиус сферы (сделать его меньше), чтобы сфера касалась конуса, основанием которого является круг, а вершиной - положением камеры. Новый радиус равен r '= r * d / sqrt (r ^ 2 + d ^ 2) - person Roman Zenka; 28.07.2019
comment
Большое спасибо за ответ. Мой босс настаивал на том, чтобы разобраться в этом, и я действительно начал чувствовать, что у меня не было времени на это. Прошло 9 лет, я думаю, что смогу сделать это на следующей неделе типа отговорок. Еще раз спасибо! - person sberry; 30.07.2019