Основы компьютерной графики (Часть 2)

0. 223 03.08.18 10:06 Сейчас в теме
Статья является продолжением публикации "Основы компьютерной графики".
Во второй части будут рассмотрены следующие темы:
1. Преобразования в трехмерном пространстве.
2. Ортографическая проекция трехмерного изображения на экран.
3. Определение, какой поверхностью (лицевой/задней) проецируется грань на экран.
4. Перспективная проекция.

Перейти к публикации

Лучшие комментарии
3. Dmitri_1C 165 03.08.18 23:56 Сейчас в теме
Помню, NN-лет назад такое на паскале рисовал.
Ностальгия.
+
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. WalterMort 336 03.08.18 15:45 Сейчас в теме
Где матрицы перспективного проецирования? Где шарнирный замок? Где кватернионы?
2. mszsuz 260 03.08.18 23:46 Сейчас в теме
так скоро и "DOOM" получится - первую комнату уже нарисовали.
3. Dmitri_1C 165 03.08.18 23:56 Сейчас в теме
Помню, NN-лет назад такое на паскале рисовал.
Ностальгия.
+
4. HAMMER_59 223 04.08.18 16:26 Сейчас в теме
Как я уже написал в статье, при добавление граней, запутался с ребрами. Изменил код добавления граней, грань теперь добавляется по точкам, ребра добавляются автоматически.
&НаКлиенте
Процедура ДобавитьГрань(Объект,Т0,Т1,Т2,Т3)
	Грань = Новый Структура("Точки,Ребра");
	Грань.Ребра = Новый Массив();
	
	Грань.Точки = Новый Массив(4);
	Грань.Точки[0] = Т0;
	Грань.Точки[1] = Т1;
	Грань.Точки[2] = Т2;
	Грань.Точки[3] = Т3;
	
	ИндексПервойТочки = Т3;
	Для Каждого ИндексТочки Из Грань.Точки Цикл
		ИндексВторойТочки = ИндексТочки;
		Сч = 0;
		Для Каждого Ребро Из Объект.Ребра Цикл
			Если ((Ребро[1] = ИндексПервойТочки) И (Ребро[2] = ИндексВторойТочки))
				ИЛИ ((Ребро[2] = ИндексПервойТочки) И (Ребро[1] = ИндексВторойТочки)) Тогда
					Грань.Ребра.Добавить(Сч);
				Прервать;
			КонецЕсли;
			Сч = Сч + 1;
		КонецЦикла;
		ИндексПервойТочки = ИндексВторойТочки;
	КонецЦикла;
	
	
	Куб.Грани.Добавить(Грань);
КонецПроцедуры
Показать
5. Неопределено 87 04.08.18 17:16 Сейчас в теме
Хочется посмотреть на анимированный пример вращения в режиме реального времени.
6. Неопределено 87 06.08.18 07:26 Сейчас в теме
Не сразу понятно, что куб наклонен вниз.
Да, не сразу. А после этого так вообще. Что вы сделали с кубом? Зачем так растянули и исказили его? Я имею в виду, очевидно что спереди находятся зелёные грани Это явно не куб, а что-то трапецевидное.
7. HAMMER_59 223 06.08.18 09:08 Сейчас в теме
(6)
то вы сделали с кубом? Зачем так растянули и исказили его?


Бывают люди адекватные, а бывают неадекватные. Нормальная реакция адекватного человека - подвергать все критическому мышлению. Т.е. ознакомился с материалом, затем проверил. Как проверить? Посмотреть в других источниках информации. В конце концов запустить в программе подобной 3Д макс, построить куб, построить перспективную проекцию - и убедиться, что куб действительно получается именно таким. Потом сами же пишите, что кто-то Вас идиотом выставляют. Может дело в Вас, может Вы так себе ведете?


(6)
очевидно что спереди находятся зелёные грани

Опять же достаточно внимательно прочитать статью, где написано, что мы не пытаемся получить 100% реалистичность (как-то забавно в рамках 1С говорить о реалистичной модели), мы строим приближенную модель. В данном случае не грани, а ребра отмечены разными цветами, даже не для реалистичности, а чтобы показать, что мы правильно определили какой поверхностью грань проецируется на экран.

Фраза сравнима с мышлением школьника, естественно не лучшего: "Так формулы из школьного курса по физике не точные, например, не учтено что масса изменяется от скорости". А если еще добавить, когда мы отмерили линеечкой 127 мм, так это ведь не точно 127 мм там ведь тоже погрешность, а расстояние там и того хуже порой метрами меряем. Как дальше жить?

Какое говорите образование? Не программист, а инженер? Странно, похоже, зря только время потратили на институт, знания мимо Вас прошли. В институте крайне доходчиво и не раз объясняют, что максимальная точность - крайне редко эффективна.
8. Неопределено 87 06.08.18 09:22 Сейчас в теме
(7)
Может дело в Вас

Я просто решил поддержать вашу традицию писать как это не похоже на куб.

мы строим приближенную модель

Да, мы тоже строили приближённую, но вам это не помешало написать что у нас не 3D и не куб.

В институте крайне доходчиво и не раз объясняют, что максимальная точность - крайне редко эффективна.

Может быть у вас и объясняют. Меня научили тому, что малейшее отклонение и волновод уже работает на пропуск другой частоты, а антенна перестаёт ловить сигнал в заданном диапазоне, а если дорожку специальными ухищрениями LГLГLГLГLГ не удлинить в нужном месте, байты будут добегать с разной скоростью и сумматор не заработает как положено.
9. HAMMER_59 223 06.08.18 10:27 Сейчас в теме
(8)
Да, мы тоже строили приближённую, но вам это не помешало написать что у нас не 3D и не куб.


Это Вы сами себе додумали, я так не писал. Опять же если прочитать повнимательнее статью в ней написано, что математическая модель той части, которую Вы использовали для отображения в 3Д, ничем не отличается от 2Д.


(8)
Может быть у вас и объясняют. Меня научили тому, что малейшее отклонение и волновод уже работает на пропуск другой частоты

У Вас один предмет был в институте? Несмотря на то, что учился я на специальности "Автоматизация систем управления", при этом на электротехнической кафедре, поэтому пришлось немного окунуться и в электричество и в электронику. Был у нас такой предмет "Основы теории автоматизации управления". Прекрасный предмет, где просто очень много теории. Предмет, конечно, не только про электронику, но в основном как раз речь шла про электронику, и как раз решались проблемы, что в электронике далеко все от идеала, обычный усилитель - это уже целая история, т.к. показатели какому-нибудь транзистора не линейны.

Малейшее отклонение - вещь крайне растяжимая. Крайне странные вещи вы пишите, крайне странные. Вся электроника - это диапазоны и отклонения, вы точно в институте учились, а не кружок радиолюбителя посещали?
10. Неопределено 87 06.08.18 10:45 Сейчас в теме
У Вас один предмет был в институте?

Предложение, начинающееся с "Меня научили тому", включает в себя описание четырёх предметов.
пришлось немного окунуться
в основы теории
Вся электроника - это...

Вопросов больше нет.

Если абстрагироваться от нашей игры в снежки, на уровне кода и механики всё предельно понятно. Есть координаты точек в трёхмерном пространстве, с которыми мы взаимодействуем на уровне кода. Если построить их в голове, виден объёмный объект -- обычный куб. Как в вашем, так и в моём посте. Но вам не понравилась моя визуализация. Вы посчитали её не информативной. А затем повторно не закрасили синие рёбра куба и тем самым визуально вывели зелёные на передний план и дали мне возможность показать как некрасиво вы повели себя в моём посте. А так, мой пост зачётный. Шучу, этот на самом деле круче, но на анимацию вращения всё равно хочется посмотреть.
11. HAMMER_59 223 06.08.18 12:10 Сейчас в теме
(10)
Но вам не понравилась моя визуализация


Еще раз повторю, что мне не понравилась математическая модель, не знаю почему Вы так упорно настаиваете на визуализации.


(10)
Вы посчитали её не информативной

Уже устал повторять, что не в визуализации дело. Точно такую же математическую модель можно было построить в 2Д.

(10)
А затем повторно не закрасили синие рёбра куба

Участок кода из статьи - определение видимости граней.
&НаКлиенте
Процедура ОпределитьВидимостьГраней(Объект, Точки)
	Для Каждого Ребро Из Объект.Ребра Цикл
		Линия = Ребро[0];
		Линия.ЦветЛинии = Новый Цвет(0,150,0);
	КонецЦикла;
	
	Для Каждого Грань Из Объект.Грани Цикл
		Точка0 = Точки[Грань.Точки[0]];
		Точка1 = Точки[Грань.Точки[1]];
		Точка2 = Точки[Грань.Точки[2]];
		
		Ах = Точка1[0] - Точка0[0];
		Ау = Точка1[1] - Точка0[1];
		
		Вх = Точка2[0] - Точка1[0];
		Ву = Точка2[1] - Точка1[1];
		
		Z = Ах * Ву - Ау * Вх;
		
		//Сообщить(Z);
		
		Если Z < 0 Тогда
			Для Каждого ИндексРебра Из Грань.Ребра Цикл
				Линия = Объект.Ребра[ИндексРебра][0];	
				Линия.ЦветЛинии = Новый Цвет(0,0,150);
			КонецЦикла;			
		КонецЕсли;
		
	КонецЦикла
	
КонецПроцедуры
Показать


Вроде всё должно быть понятно. Сначала ко всем ребрам применяется зеленый цвет, а затем ребрам видимых граней цвет изменяется на синий.
Линии заново каждый раз не создаются, и скорее всего отображаются в том порядке, в котором изначально были созданы, но не факт.



(10)
но на анимацию вращения всё равно хочется посмотреть

Хотите проверить как я умею записывать видео с экрана, затем делать из них гифку? Я никогда этим не занимался.
12. Неопределено 87 07.08.18 03:10 Сейчас в теме
(11)
Я никогда этим не занимался.

Я тоже, но потом начал делать публикации и загуглил подходящую программу за пару минут. Сейчас можно писать с экрана сразу в gif.
13. yarsort 06.05.19 10:53 Сейчас в теме
Сколько же у людей свободного времени бывает... :)
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Севастополь
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Программист 1С
Москва
зарплата от 120 000 руб.
Полный день

Ведущий программист-консультант 1С (УХ)
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Программист 1С (розница)
Москва
зарплата от 160 000 руб. до 160 000 руб.
Полный день