выход esc когда пирамида находится в верхней точке
stefi78, с тегами лучше смотрится, правда?
Автор: volvo 24.04.2006 22:08
stefi78, если спроецировать каждую вершину пирамиды на плоскость Z=0 и соединить полученные точки в том же порядке, в котором ты соединяешь вершины при отрисовке пирамиды, ты не получишь контур тени (источник света - НАД пирамидой)?
Кстати, вообще-то сначала я должен был задать вопрос "а где находится источник света?" Куда тени-то нужно отбрасывать?
Автор: Бравый генерал 24.04.2006 22:33
Если прямоугольно проецировать вершины на горизонтальную плоскость (любую плоскость, параллельную плоскости X0Z), то тень будет выглядеть одной линией, так как stefi78 не сделала перспективы, и любая горизонтальная плоскость будет проецироваться на экран в линию. stefi78, делай перспективу - так будет легче, чем мучаться и подгонять тень под нормальный вид!)
Автор: volvo 24.04.2006 22:49
Бравый генерал, я где-то написал слово "прямоугольно"? Разговор шел о проекции. О какой - это другой вопрос...
Автор: Бравый генерал 24.04.2006 23:17
Вообще-то я и не спорил с тобой (и ни с кем-либо еще). (По-моему ты придираешься ко мне). А слово "прямоугольно" я употребил вот почему. Ты сказал:
Цитата
источник света - НАД пирамидой
На каком расстоянии? Слишком маленьким это расстояние быть не может, потому что источнику света пришлось бы постоянно двигаться за пирамидой, чтобы быть над ней. Значит ты имел ввиду "довольно высоко над пирамидой", а это - ПОЧТИ (если пренебречь маленьким углом) прямоугольная проекция. Ну что ж - я исправил предыдущий свой пост, раз это имело такое большое значение.
Автор: stefi78 24.04.2006 23:49
ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ
Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ
Автор: Бравый генерал 25.04.2006 0:24
Ага, т.е. тень вроде как на стену падает, да? Если тебе не срочно, то я напишу или сегодня ночью или завтра утром эту прогу, только немного по-другому, по своему (у тебя код немного неудобный)! (Мне самому интересно)
P.S. Здесь прямоугольную проекцию сделать легче всего, но она будет полезной (и то, совсем немного, так как тень будет лишь немного отступать от изображения пирамиды) только при наличии перспективы. Так что нужно брать за источник света точку, коей является центр экрана и оттуда проводить во все вершины лучи до пересечения со стеной.
Автор: stefi78 25.04.2006 4:00
если сделаешь буду благодарна в паскале я еще тот спец если питерский с меня пиво
Автор: lapp 25.04.2006 8:16
Цитата(stefi78 @ 24.04.2006 19:49)
ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ
Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ
stefi78, если источник света действительно находится в точке, из которой смотрят (предполагается, по-видимому, что глаз один), то смотрящий никогда не увидит тени. Независимо от того, какая поверхность сзади - стена, лес - тень всегда будет загорожена самим предметом. Нужно это пояснять или понятно и так? Кроме того, обычно проще (по крайней мере для начала) иметь бесконечно удаленный источник света. Тогда лучи от него будут параллельны друг другу, и нужно задать только угол их падения. Такая ситуация совершенно реальна - например, именно так устроена тень в солнечном свете.
Далее, кроме источника света, нужно задать поверхность, на которую падает тень. Если такой поверхностью является, грубо говоря, земля (пол), и Солнце светит точно из зенита, то тенью будет являться простая проекция пирамиды на плоскость z=0, то есть достаточно занулить вертикальную координату, и ты получишь тень. Но тут есть одно "но", про которое уже упоминал Бравый генерал. А именно: вся тень выродится в линию, так как горизонтальная плоскость строго перпендикулярна экрану и все ее изображение есть одна линия. Чтобы увидеть ее - Бравый генерал прав - надо вводить перспективу. Но это тема для отдельного разговора..
Мудрено я выражаюсь?.. Спрашивай, если что непонятно.
Автор: Бравый генерал 26.04.2006 0:09
Цитата
stefi78, если источник света действительно находится в точке, из которой смотрят (предполагается, по-видимому, что глаз один), то смотрящий никогда не увидит тени. Независимо от того, какая поверхность сзади - стена, лес - тень всегда будет загорожена самим предметом.
Ну, имелось наверно ввиду, что источник света - это точка, которая находится в центре монитора, а глаза человека, т.е. камера - это весь монитор. Да, из любой точки тени центр монитора виден не будет Но другие участки монитора будут видны, следовательно и на мониторе будет отображаться тень. Вот простенькая схема, показывающая что тень, хоть и не вся, но на мониторе будет видна.
Эскизы прикрепленных изображений
Автор: lapp 26.04.2006 7:56
Цитата(Бравый генерал @ 25.04.2006 20:09)
Ну, имелось наверно ввиду, что источник света - это точка, которая находится в центре монитора, а глаза человека, т.е. камера - это весь монитор. Да, из любой точки тени центр монитора виден не будет Но другие участки монитора будут видны, следовательно и на мониторе будет отображаться тень. Вот простенькая схема, показывающая что тень, хоть и не вся, но на мониторе будет видна.
Бравый генерал, глаза человека не могут быть всем монитором. Ты несколько путаешь понятия. Давай разберемся.
Возьмем твою схему. Я не сразу понял, что есть что. Слово "Перспектива" вообще вводит в замешательство. Но потом я, кажется, понял, что ты хочешь сказать. Сейчас я выскажу свои соображения, а ты потом скажи, если с чем-то не согласен.
1. Глаз (или объектив) - это точка (точечный, малый объект). Лучи, ведущие к нему (или от него, что одно и то же), толжны все сходится на входе в глаз. Возможна, правда, ситуация, когда лучи параллельны (или почти параллельны), но она означает, что глаз просто находится бесконечно (или очень) далеко.
2. Я достроил твою схему, чтобы показать, что она на самом деле изображает (мои добавления все зеленые). Я так понял, что две боковые пунктирные линии ограничивают поле зрения. Таким образом, они должны являться продолжениями лучей, исходящих из глаза. Я продолжил их до пересечения.
3. Красные линии, по всей видимости, тоже направлены на глаз (ибо они показывают как видна тень). Таким образом, они тоже должны приходить в глаз.
4. В результате мы видим, что твоя схема неявно подразумевает, что глаз находится на некотором расстоянии от экрана (как, собственно, и есть на самом деле). Если источник света расположить как на твоей схеме, то тень действительно получается видна - она как бы вылезает за края предмета.
Ты видишь разницу? stefi78 сказала: "Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ". И я отвечал ей в полном соответствии с ее словами. Если она имел в виду что-то другое - ну, это так и осталось в ее виду.. А ответ на ее слова - он один. Любой может провести эксперимент: берешь фонарик, подносишь его как можно ближе к глазу (второй глаз закрыт) - и ты увидишь, что теней нету! Ну, с той точностью, с которой можно поднести фонарь к глазу. Да даже и экспериментировать не нужно - берешь любое фото, сделанное камерой (желательно мыльницей, они маленькие) со встроенной вспышкой. И увидишь, что тень едва видна черным контуром по краю человека, стоящего у стены. Этот черный контур - это результат того, что вспышка все же немного отнесена от объектива. В идеале тени не было бы вообще. Можно и продолжить эксперимент - вынести фонарик на вытянутой руке вперед, по центральному лучу зрения, и ты увидишь, что тень начала вылезать за края - в точности та ситуация, что на твоей схеме.
Конечно, можно додумать за stefi78, расположить источник и стену как надо и преподнести ей на блюдечке, но только указать на ошибки все же я считаю необходимым. Не знаю уж, нужно ли это ей.. Но я априори считаю человека который обратился сюда (а не в "задачи на заказ"), желающим обрести не только решение, но и понимание. Тема построения изображения и перспективы - это очень интересно. Она очень важна для художников и фотографов, но мало кто из них реально понимает оптику этого дела, даже лучшие из них действуют в сложных случаях по интуиции. В свое время я специально занимался этим вопросом (когда пытался немного рисовать) и открыл массу интересного (даже чисто в геометрической перспективе, я не беру сейчас в расчет психику восприятия, что тоже важно для художника).
Автор: Бравый генерал 26.04.2006 19:11
Аааа.... Я понял, что ты имеешь ввиду. Да, ты рассуждаешь абсолютно правильно! Просто я считал монитор и камерой и глазами человека, и туда же источник света помещал. Да, если расположить источник света в точке, где расположены настоящие глаза человека (немного абсурдно звучит ), т.е. ЗА монитором, то тени не будет видно.
Автор: Бравый генерал 26.04.2006 22:47
Сделал наконец. Прикрепляю архив. В архиве в папке две папки "bad" и "cool". "bad" сделано под стандартным EgaVga.bgi - и пирамида и тень контурами (смотрится не очень). В "cool" сделал полигонами, и с освещением, но под VESA256 Engine3D - модуль для работы с 3D. В обоих папках он почти одинаков - единственное отличие - в папке "bad":
Uses Graph;
А в папке "cool":
Uses VGraph;
В разделе описания констант "d = 500" - z-координата вертикальной стены.
Управление: w, s, a, d, ctrl+a, ctrl+d - вращательное движение пирамиды i, k, j, l, ctrl+i, ctrl+k - поступательное... ESC - выход
Комментарии еще не делал... Ну, модуль прост в освоении, я думаю (там только обработка вершин и полигонов).