Лекция 1. Введение. Расчёт матриц камеры и проекции
compscicenter.ru/
Проецирование трёхмерных точек на плоскость экрана: однородные координаты, построение матриц проекции и камеры.
Лекция №1 в курсе "Трёхмерная компьютерная графика", осень 2017 (Новосибирск)
Преподаватель курса: Денис Александрович Гладкий
Страница лекции на сайте CS центра: goo.gl/SnfEiU
Все видео курса по порядку: goo.gl/vFNQLa
Пікірлер: 58
лектор объясняет современным молодежным языком! Круто
Денис Александрович всё по полочкам разложил, не сравнить с тем, что я в интернете находил.
Полезнейшая лекция!
Спасибо. Мне понравилось ваше объяснение, очень доступно
Курс отличный. Огромная работа. Много интересного. У меня тоже было такое "Kурс по изучению методов проецирования трёхмерных объектов на картинную плоскость C#. Часть 1", так что я понимаю какое это огромное дело и знания.
@DrollerTroller
2 жыл бұрын
Спасибо.
Самый адекватный и полезный курс из русскоязычных, оставьте этого же лектора и расширьте курс)
@voronow3
4 жыл бұрын
Там следующая лекция про Direct X. Значит про OpenGL нету? Нужно дальше искать?
@andrewvsk2368
4 жыл бұрын
@@voronow3 вообще это даже странно, учитывая что OpenGL - стандарт (ранняя версия даже в российских ГОСТах есть), а DirectX - проприетарная поделка Microsoft, не говоря что под мобилки Андроид ещё долго будет актуален OpenGL ES. С другой стороны DirectX 11 и Modern OpenGL по своему принципу мало чем отличаются. То есть теория примерно одинаковая. Лично я кстати вообще не одобряю изучение компьютерной графики совместно с библиотеками. Для понимания лучше написать собственный PBR визуализатор на CPU (неэффективный, тормознутый, но выдающий норм картинку с самопальным растеризатором, это даёт гораздо больше реального понимания как это работает). OpenGL дофига всего берёт на себя (имея при этом свои особенности, скажем OpenGL любит mipmap'ы и без них работает хреново (а почему так, можно легко понять хорошо разбираясь в теории). Лекции можно посмотреть, но изучать рациональнее OpenGL и затем Vulkan (намного сложнее (!) с нуля не надо точно). Однако зная OpenGL и Vulkan можно портнуть графику почти на любое устройство в мире, разве что Apple традиционно плюёт на стандарты.
@voronow3
4 жыл бұрын
@@andrewvsk2368 Спасибо за ценную информацию. Я давно присматриваюсь к OpenGL ES в рамках проекта настольных приложений под Qt и на встраиваемой электронике. Про термин PBR ничего не знаю. Можете, акромя гугления порекомендовать материалы для просвящения?
(копипаста из статьи на Дзене) "Если мы возьмем квадратный плоский полигон и изменим расположение одной точки, он перестанет быть плоским и выйдет из так называемой полигонной сетки. Из-за этой фичи, нужно проводить дополнительные вычисления, чтобы проверить плоский ли полигон или нет. Треугольники от этого не страдают, так как какую точку не перемести, треугольный полигон останется плоским. Профит."
Игорь Линк фигни не скажет
Матрица соответствует эндоморфизму кольца в себя же,или же как билинейное отображение
Вообще видео полезное кто хочет кодить на OGL. Без понимания матриц и векторов, нет смысла писать качественные 3д игры.
@screamstream1161
2 жыл бұрын
качество игры и качество кода это разные вещи
как часто добавляются лекции ? курс ведь давно прошел и отснят, как я понимаю ?
@CompscicenterRu
6 жыл бұрын
В ближайшие дни мы добавим все лекции курса.
Идеальный лектор: - Написали, запустили, не работает? Допишите куда-нибуть минус или поменяйте местами аргументы и будет зашибись! (С) xD
Прошу прощения, есть ли возможность где-нибудь посмотреть текст практических заданий?
@CompscicenterRu
6 жыл бұрын
Можно поискать на сайте курса compscicenter.ru/courses/3d-graphics/nsk/2017-autumn/
Треугольники же вроде потому что минимальное количество точек, через которое можно провести плоскость, а больше точек незачем хранить
@DrollerTroller
6 жыл бұрын
В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация "минимальное количество точек, через которое можно провести плоскость" - это не мотивация. И как это "незачем больше точек хранить"? Ещё как есть зачем. Мы же не 1 треугольник на сцене рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. И тут уже совсем не очевидно, что сетка треугольников, к примеру, в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос "а почему треугольники" столь однозначным.
Объясните, пожалуйста, как при выведении b у нас получается FN/(F-N), а не -FN/(F-N), ведь при решении уравнения aN + b = 0, перенос aN инвертирует знак. Тогда получается, что b = -aN.a нам уже известна: F/(F-N). При подстановке должно получится -FN/(F-N). Подскажите, что я неправильно понял?
@Shineglow
3 ай бұрын
Можно не отвечать, такой вопрос уже был)
Треугольники - это элементарно... Только 3 точки задают гарантированно плоскость. Соответственно однозначно определяется нормаль.
@DrollerTroller
3 жыл бұрын
Я продублирую комментарий, который уже оставлял раньше на эту тему. В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация «только 3 точки задают гарантированно плоскость» - это не мотивация. Мы же не плоскости рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. Или вообще не треугольников. Давайте подумаем про память. Совсем не очевидно, что сетка треугольников в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же, к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Опять же вы говорите про нормаль. Нормаль «однозначно определяется» к бесконечному кол-ву классов поверхностей. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос «а почему треугольники» столь однозначным.
Воот это полезно будет
а как же GLSL и программирование шейдеров, что то я не понимаю, как писать графику на C++, самому с нуля написать растеризатор или трассировщик лучей, так уже все ж написано - OpenGL или Vulkan. О чем вообще эти лекции?
Пересчитал коэффицент b. Получился b = - (F*N)/(F-N). Я сделал как вы сказали что берем формулу f(z) = (a*z + b)/(z) и f(N) = 0; f(F) = 1. Ваше доказательство вырезано, поэтому возможно что я что-то упустил
@DrollerTroller
6 жыл бұрын
Да, я на доске минус потерял где-то по дороге :) У вас правильно получилось вывести. В своё оправдание скажу, что преподаватели всё-таки не роботы и тоже иногда ошибаются ;) Причём это для студентов, с некоторой точки зрения, полезно: им приходится тщательнее прорабатывать материал и уже не выйдет просто так зазубрить и забыть после экзамена. Придётся реально разбираться в текстах. Но, в целом, конечно, лучше б лекторы всё правильно и без ошибок давали. Занятный случай на эту тему был у меня, когда сам в универе учился. Припёрлись мы как-то на досрочный экзамен по матанализу. И лектор там выдал: «У меня в лекциях в некоторых местах допущены ошибки. Ваша задача - найти их, объяснить, что там не так и исправить доказательство». Каждому досталось по две таких теоремы, сидели закуривали собственные же конспекты несколько часов %) Один человек из, по-моему, пяти пошёл сдавать обычный экзамен. Такие дела =) А вам уважуха за внимательность.
@user-tp1qn2wt6t
Жыл бұрын
@@DrollerTroller там он ещё одну ошибку допустил когда складывал вектора
@user-ie5dz1qg6i
8 ай бұрын
Зашел узнать почему используется f(z) = (a*z + b)/(z) и именно эта часть лекции вырезана, ну что ж за провал то. Может кто знает где можно эту информацию почерпнуть?
Будет ли этот курс читаться снова?
@DrollerTroller
3 жыл бұрын
Нет.
Всегда хотел понять высшую математику и аналити́ческаю геоме́трию, в школе был отличник , в ВУЗе с первого дня матана пошло не понимание , так и в этой лекции . Ну как так то ? :( . Может кто курс посоветует доходчивый ?
@Ruslan_Ishmuratov
4 жыл бұрын
Сергей Зинченко спасибо ,посмотрю
@user-rt3gg3do4e
4 жыл бұрын
@@Ruslan_Ishmuratov есть ещё документ лекций по линейной алгебре
@user-bj6kn4yo6k
4 жыл бұрын
kzread.info/dash/bejne/mIKfwdyzkbDVg9Y.html - включи русские субтитры.
Треугольник наверно потому, что 3 точки однозначно обозначают плоскость. Соответственно для плоскости и считают нормали, для расчета освещения, и т. д.
@DrollerTroller
3 күн бұрын
Я в других комментариях уже подробно отвечал. Поэтому кратко: нормально можно посчитать, хоть к треугольнику, хоть к поверхности второго порядка, хоть к множеству, заданному неявно. А 4 точки однозначно задают, к примеру, кривую безье. А две точки - прямую. И что? Все эти рассуждения никак не отвечают на вопрос, почему исторически «победила» именно растеризация треугольников в железе.
Прикольно! Только с 40 минуты стало нифига не понятно. Лаадно, пойду 2д змейку доделаю... ээх
а VR на этих принципах создают?
@DrollerTroller
5 жыл бұрын
Да, но там много своей специфики.
т.к треугольник -единственная замкнутая фигура с минимальным количеством вершин. Круг не подходит -т.к круг - это по-определению - бесконечное множество точек - равноудаленных от данной и из этого определения нельзя явно понять минимальное количество точек для того что бы круг стал кругом, а не скругленным многоугольником.
@yuriytheone
5 жыл бұрын
Нет! Треугольник потому, что только 3 точки гарантированно задают плоскость, соответственно однозначно просто рассчитать нормаль...
@DenisShaver
3 жыл бұрын
Из множества кругов очень сложно построить треугольник, из множества треугольников построить круг легко. Само собой, в приближённом виде, достаточным для достоверного отображения на дискретной сетке монитора.
Непонятно с отсекателем. Нам надо нарисовать треугольник, если одна вершина за областью видимости, а другая нет. Тогда что?
@DrollerTroller
6 жыл бұрын
В теории, тут можно действовать по-разному. Можно честно "отсечь" часть треугольника рамкой экрана (прямоугольником) после проецирования, разбить на треугольники получившееся и растеризовать. Можно уже в процессе растеризации сбрасывать с конвейера пиксели за границей экрана. Но в этих способах есть одна проблема - перспективное деление для вершин, оказавшихся за ближней плоскостью отсечения. Там, потенциально, мы можем и на ноль поделить. Поэтому, обычно, отсечение делается в 3D ещё до перспективного деления. Этот функционал полностью реализован на видеокарте и какие-то рычаги управления для него мне неизвестны. Разве что, в DX12 есть честный консервативный растеризатор. Но я эту тему особо не бурил.
@JohnWickMovie
6 жыл бұрын
Спс
Лекция супер! Но оператор "от Бога" - не мог показать, чтобы было видно презентацию, в итоге видно обрезанную нижнюю часть.
когда вспомнил, что у тебя 3/5 по линейной алгебре и ты на 44 минуте уже не вдупляешь...
на Rustе надо писать а не сиси++
@DrollerTroller
2 жыл бұрын
Есть альтернативное мнение, что надо писать на D. По крайней мере в Remedy (Control, Max Payne, Alan Wake) согласны.
@kovesik
2 жыл бұрын
@@DrollerTroller всех агитирую за D!
@kovesik
2 жыл бұрын
@@DrollerTroller прекрасный язычище