Тёмный

Лекция 1. Введение. Расчёт матриц камеры и проекции 

Computer Science Center
Подписаться 160 тыс.
Просмотров 26 тыс.
50% 1

compscicenter.ru/
Проецирование трёхмерных точек на плоскость экрана: однородные координаты, построение матриц проекции и камеры.
Лекция №1 в курсе "Трёхмерная компьютерная графика", осень 2017 (Новосибирск)
Преподаватель курса: Денис Александрович Гладкий
Страница лекции на сайте CS центра: goo.gl/SnfEiU
Все видео курса по порядку: goo.gl/vFNQLa

Опубликовано:

 

29 янв 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 55   
@bekzhan356
@bekzhan356 5 лет назад
лектор объясняет современным молодежным языком! Круто
@firiasu
@firiasu 2 года назад
Денис Александрович всё по полочкам разложил, не сравнить с тем, что я в интернете находил.
@AbsurdStudioNEW
@AbsurdStudioNEW 6 лет назад
Полезнейшая лекция!
@user-ke9qd9el2k
@user-ke9qd9el2k 2 года назад
Спасибо. Мне понравилось ваше объяснение, очень доступно
@aleksanderaksenov1363
@aleksanderaksenov1363 5 лет назад
Самый адекватный и полезный курс из русскоязычных, оставьте этого же лектора и расширьте курс)
@voronow3
@voronow3 4 года назад
Там следующая лекция про Direct X. Значит про OpenGL нету? Нужно дальше искать?
@andrewvsk2368
@andrewvsk2368 4 года назад
@@voronow3 вообще это даже странно, учитывая что OpenGL - стандарт (ранняя версия даже в российских ГОСТах есть), а DirectX - проприетарная поделка Microsoft, не говоря что под мобилки Андроид ещё долго будет актуален OpenGL ES. С другой стороны DirectX 11 и Modern OpenGL по своему принципу мало чем отличаются. То есть теория примерно одинаковая. Лично я кстати вообще не одобряю изучение компьютерной графики совместно с библиотеками. Для понимания лучше написать собственный PBR визуализатор на CPU (неэффективный, тормознутый, но выдающий норм картинку с самопальным растеризатором, это даёт гораздо больше реального понимания как это работает). OpenGL дофига всего берёт на себя (имея при этом свои особенности, скажем OpenGL любит mipmap'ы и без них работает хреново (а почему так, можно легко понять хорошо разбираясь в теории). Лекции можно посмотреть, но изучать рациональнее OpenGL и затем Vulkan (намного сложнее (!) с нуля не надо точно). Однако зная OpenGL и Vulkan можно портнуть графику почти на любое устройство в мире, разве что Apple традиционно плюёт на стандарты.
@voronow3
@voronow3 4 года назад
@@andrewvsk2368 Спасибо за ценную информацию. Я давно присматриваюсь к OpenGL ES в рамках проекта настольных приложений под Qt и на встраиваемой электронике. Про термин PBR ничего не знаю. Можете, акромя гугления порекомендовать материалы для просвящения?
@surenbabayan3549
@surenbabayan3549 2 года назад
Курс отличный. Огромная работа. Много интересного. У меня тоже было такое "Kурс по изучению методов проецирования трёхмерных объектов на картинную плоскость C#. Часть 1", так что я понимаю какое это огромное дело и знания.
@DrollerTroller
@DrollerTroller 2 года назад
Спасибо.
@-________9732
@-________9732 10 месяцев назад
(копипаста из статьи на Дзене) "Если мы возьмем квадратный плоский полигон и изменим расположение одной точки, он перестанет быть плоским и выйдет из так называемой полигонной сетки. Из-за этой фичи, нужно проводить дополнительные вычисления, чтобы проверить плоский ли полигон или нет. Треугольники от этого не страдают, так как какую точку не перемести, треугольный полигон останется плоским. Профит."
@JohnDoe-lw7yb
@JohnDoe-lw7yb 4 года назад
Идеальный лектор: - Написали, запустили, не работает? Допишите куда-нибуть минус или поменяйте местами аргументы и будет зашибись! (С) xD
@user-gu4rf9sy1i
@user-gu4rf9sy1i 5 лет назад
Игорь Линк фигни не скажет
@aleksanderaksionau8555
@aleksanderaksionau8555 6 лет назад
Матрица соответствует эндоморфизму кольца в себя же,или же как билинейное отображение
@sierikov
@sierikov 6 лет назад
Треугольники же вроде потому что минимальное количество точек, через которое можно провести плоскость, а больше точек незачем хранить
@DrollerTroller
@DrollerTroller 6 лет назад
В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация "минимальное количество точек, через которое можно провести плоскость" - это не мотивация. И как это "незачем больше точек хранить"? Ещё как есть зачем. Мы же не 1 треугольник на сцене рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. И тут уже совсем не очевидно, что сетка треугольников, к примеру, в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос "а почему треугольники" столь однозначным.
@Raspi8
@Raspi8 Год назад
Треугольник наверно потому, что 3 точки однозначно обозначают плоскость. Соответственно для плоскости и считают нормали, для расчета освещения, и т. д.
@atlasua2021
@atlasua2021 3 года назад
Вообще видео полезное кто хочет кодить на OGL. Без понимания матриц и векторов, нет смысла писать качественные 3д игры.
@screamstream1161
@screamstream1161 2 года назад
качество игры и качество кода это разные вещи
@user-vj1vg2nk7g
@user-vj1vg2nk7g 6 лет назад
как часто добавляются лекции ? курс ведь давно прошел и отснят, как я понимаю ?
@CompscicenterRu
@CompscicenterRu 6 лет назад
В ближайшие дни мы добавим все лекции курса.
@yuriytheone
@yuriytheone 5 лет назад
Треугольники - это элементарно... Только 3 точки задают гарантированно плоскость. Соответственно однозначно определяется нормаль.
@DrollerTroller
@DrollerTroller 3 года назад
Я продублирую комментарий, который уже оставлял раньше на эту тему. В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация «только 3 точки задают гарантированно плоскость» - это не мотивация. Мы же не плоскости рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. Или вообще не треугольников. Давайте подумаем про память. Совсем не очевидно, что сетка треугольников в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же, к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Опять же вы говорите про нормаль. Нормаль «однозначно определяется» к бесконечному кол-ву классов поверхностей. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос «а почему треугольники» столь однозначным.
@Kiberbrain
@Kiberbrain 6 лет назад
Воот это полезно будет
@user-sk6xi2oj4v
@user-sk6xi2oj4v 6 лет назад
Прошу прощения, есть ли возможность где-нибудь посмотреть текст практических заданий?
@CompscicenterRu
@CompscicenterRu 6 лет назад
Можно поискать на сайте курса compscicenter.ru/courses/3d-graphics/nsk/2017-autumn/
@user-ro3qo7wd8h
@user-ro3qo7wd8h 7 месяцев назад
а как же GLSL и программирование шейдеров, что то я не понимаю, как писать графику на C++, самому с нуля написать растеризатор или трассировщик лучей, так уже все ж написано - OpenGL или Vulkan. О чем вообще эти лекции?
@JohnWickMovie
@JohnWickMovie 6 лет назад
Пересчитал коэффицент b. Получился b = - (F*N)/(F-N). Я сделал как вы сказали что берем формулу f(z) = (a*z + b)/(z) и f(N) = 0; f(F) = 1. Ваше доказательство вырезано, поэтому возможно что я что-то упустил
@DrollerTroller
@DrollerTroller 6 лет назад
Да, я на доске минус потерял где-то по дороге :) У вас правильно получилось вывести. В своё оправдание скажу, что преподаватели всё-таки не роботы и тоже иногда ошибаются ;) Причём это для студентов, с некоторой точки зрения, полезно: им приходится тщательнее прорабатывать материал и уже не выйдет просто так зазубрить и забыть после экзамена. Придётся реально разбираться в текстах. Но, в целом, конечно, лучше б лекторы всё правильно и без ошибок давали. Занятный случай на эту тему был у меня, когда сам в универе учился. Припёрлись мы как-то на досрочный экзамен по матанализу. И лектор там выдал: «У меня в лекциях в некоторых местах допущены ошибки. Ваша задача - найти их, объяснить, что там не так и исправить доказательство». Каждому досталось по две таких теоремы, сидели закуривали собственные же конспекты несколько часов %) Один человек из, по-моему, пяти пошёл сдавать обычный экзамен. Такие дела =) А вам уважуха за внимательность.
@user-tp1qn2wt6t
@user-tp1qn2wt6t Год назад
@@DrollerTroller там он ещё одну ошибку допустил когда складывал вектора
@user-ie5dz1qg6i
@user-ie5dz1qg6i 8 месяцев назад
Зашел узнать почему используется f(z) = (a*z + b)/(z) и именно эта часть лекции вырезана, ну что ж за провал то. Может кто знает где можно эту информацию почерпнуть?
@Shineglow
@Shineglow 3 месяца назад
Объясните, пожалуйста, как при выведении b у нас получается FN/(F-N), а не -FN/(F-N), ведь при решении уравнения aN + b = 0, перенос aN инвертирует знак. Тогда получается, что b = -aN.a нам уже известна: F/(F-N). При подстановке должно получится -FN/(F-N). Подскажите, что я неправильно понял?
@Shineglow
@Shineglow 3 месяца назад
Можно не отвечать, такой вопрос уже был)
@Ruslan_Ishmuratov
@Ruslan_Ishmuratov 4 года назад
Всегда хотел понять высшую математику и аналити́ческаю геоме́трию, в школе был отличник , в ВУЗе с первого дня матана пошло не понимание , так и в этой лекции . Ну как так то ? :( . Может кто курс посоветует доходчивый ?
@Ruslan_Ishmuratov
@Ruslan_Ishmuratov 4 года назад
Сергей Зинченко спасибо ,посмотрю
@user-rt3gg3do4e
@user-rt3gg3do4e 4 года назад
@@Ruslan_Ishmuratov есть ещё документ лекций по линейной алгебре
@user-bj6kn4yo6k
@user-bj6kn4yo6k 4 года назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-fNk_zzaMoSs.html - включи русские субтитры.
@bekzhan356
@bekzhan356 5 лет назад
а VR на этих принципах создают?
@DrollerTroller
@DrollerTroller 5 лет назад
Да, но там много своей специфики.
@Jackson-yr9ih
@Jackson-yr9ih 3 года назад
Прикольно! Только с 40 минуты стало нифига не понятно. Лаадно, пойду 2д змейку доделаю... ээх
@LOKSLEKSUS
@LOKSLEKSUS 4 года назад
Будет ли этот курс читаться снова?
@DrollerTroller
@DrollerTroller 3 года назад
Нет.
@user-jf5qq9xs6j
@user-jf5qq9xs6j 5 лет назад
т.к треугольник -единственная замкнутая фигура с минимальным количеством вершин. Круг не подходит -т.к круг - это по-определению - бесконечное множество точек - равноудаленных от данной и из этого определения нельзя явно понять минимальное количество точек для того что бы круг стал кругом, а не скругленным многоугольником.
@yuriytheone
@yuriytheone 5 лет назад
Нет! Треугольник потому, что только 3 точки гарантированно задают плоскость, соответственно однозначно просто рассчитать нормаль...
@DenisShaver
@DenisShaver 3 года назад
Из множества кругов очень сложно построить треугольник, из множества треугольников построить круг легко. Само собой, в приближённом виде, достаточным для достоверного отображения на дискретной сетке монитора.
@vector_razvitiya
@vector_razvitiya 2 года назад
когда вспомнил, что у тебя 3/5 по линейной алгебре и ты на 44 минуте уже не вдупляешь...
@Oxyenium
@Oxyenium 3 года назад
Лекция супер! Но оператор "от Бога" - не мог показать, чтобы было видно презентацию, в итоге видно обрезанную нижнюю часть.
@JohnWickMovie
@JohnWickMovie 6 лет назад
Непонятно с отсекателем. Нам надо нарисовать треугольник, если одна вершина за областью видимости, а другая нет. Тогда что?
@DrollerTroller
@DrollerTroller 6 лет назад
В теории, тут можно действовать по-разному. Можно честно "отсечь" часть треугольника рамкой экрана (прямоугольником) после проецирования, разбить на треугольники получившееся и растеризовать. Можно уже в процессе растеризации сбрасывать с конвейера пиксели за границей экрана. Но в этих способах есть одна проблема - перспективное деление для вершин, оказавшихся за ближней плоскостью отсечения. Там, потенциально, мы можем и на ноль поделить. Поэтому, обычно, отсечение делается в 3D ещё до перспективного деления. Этот функционал полностью реализован на видеокарте и какие-то рычаги управления для него мне неизвестны. Разве что, в DX12 есть честный консервативный растеризатор. Но я эту тему особо не бурил.
@JohnWickMovie
@JohnWickMovie 6 лет назад
Спс
@dmitryponyatov2158
@dmitryponyatov2158 2 года назад
на Rustе надо писать а не сиси++
@DrollerTroller
@DrollerTroller 2 года назад
Есть альтернативное мнение, что надо писать на D. По крайней мере в Remedy (Control, Max Payne, Alan Wake) согласны.
@kovesik
@kovesik 2 года назад
@@DrollerTroller всех агитирую за D!
@kovesik
@kovesik 2 года назад
@@DrollerTroller прекрасный язычище
Далее
1. Что такое матрицы? - bezbotvy
8:05
Просмотров 308 тыс.
Лекция 1. Теория игр
1:22:00
Просмотров 23 тыс.
The evolution of 3D graphics 1963 - 2023 (ENG SUB)
34:55