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

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

Пікірлер: 58

  • @bekzhan356
    @bekzhan3565 жыл бұрын

    лектор объясняет современным молодежным языком! Круто

  • @firiasu
    @firiasu2 жыл бұрын

    Денис Александрович всё по полочкам разложил, не сравнить с тем, что я в интернете находил.

  • @AbsurdStudioNEW
    @AbsurdStudioNEW6 жыл бұрын

    Полезнейшая лекция!

  • @user-ke9qd9el2k
    @user-ke9qd9el2k2 жыл бұрын

    Спасибо. Мне понравилось ваше объяснение, очень доступно

  • @surenbabayan3549
    @surenbabayan35492 жыл бұрын

    Курс отличный. Огромная работа. Много интересного. У меня тоже было такое "Kурс по изучению методов проецирования трёхмерных объектов на картинную плоскость C#. Часть 1", так что я понимаю какое это огромное дело и знания.

  • @DrollerTroller

    @DrollerTroller

    2 жыл бұрын

    Спасибо.

  • @aleksanderaksenov1363
    @aleksanderaksenov13635 жыл бұрын

    Самый адекватный и полезный курс из русскоязычных, оставьте этого же лектора и расширьте курс)

  • @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 ничего не знаю. Можете, акромя гугления порекомендовать материалы для просвящения?

  • @-________9732
    @-________973210 ай бұрын

    (копипаста из статьи на Дзене) "Если мы возьмем квадратный плоский полигон и изменим расположение одной точки, он перестанет быть плоским и выйдет из так называемой полигонной сетки. Из-за этой фичи, нужно проводить дополнительные вычисления, чтобы проверить плоский ли полигон или нет. Треугольники от этого не страдают, так как какую точку не перемести, треугольный полигон останется плоским. Профит."

  • @user-gu4rf9sy1i
    @user-gu4rf9sy1i5 жыл бұрын

    Игорь Линк фигни не скажет

  • @aleksanderaksionau8555
    @aleksanderaksionau85556 жыл бұрын

    Матрица соответствует эндоморфизму кольца в себя же,или же как билинейное отображение

  • @atlasua2021
    @atlasua20213 жыл бұрын

    Вообще видео полезное кто хочет кодить на OGL. Без понимания матриц и векторов, нет смысла писать качественные 3д игры.

  • @screamstream1161

    @screamstream1161

    2 жыл бұрын

    качество игры и качество кода это разные вещи

  • @user-vj1vg2nk7g
    @user-vj1vg2nk7g6 жыл бұрын

    как часто добавляются лекции ? курс ведь давно прошел и отснят, как я понимаю ?

  • @CompscicenterRu

    @CompscicenterRu

    6 жыл бұрын

    В ближайшие дни мы добавим все лекции курса.

  • @JohnDoe-lw7yb
    @JohnDoe-lw7yb4 жыл бұрын

    Идеальный лектор: - Написали, запустили, не работает? Допишите куда-нибуть минус или поменяйте местами аргументы и будет зашибись! (С) xD

  • @user-sk6xi2oj4v
    @user-sk6xi2oj4v6 жыл бұрын

    Прошу прощения, есть ли возможность где-нибудь посмотреть текст практических заданий?

  • @CompscicenterRu

    @CompscicenterRu

    6 жыл бұрын

    Можно поискать на сайте курса compscicenter.ru/courses/3d-graphics/nsk/2017-autumn/

  • @sierikov
    @sierikov6 жыл бұрын

    Треугольники же вроде потому что минимальное количество точек, через которое можно провести плоскость, а больше точек незачем хранить

  • @DrollerTroller

    @DrollerTroller

    6 жыл бұрын

    В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация "минимальное количество точек, через которое можно провести плоскость" - это не мотивация. И как это "незачем больше точек хранить"? Ещё как есть зачем. Мы же не 1 треугольник на сцене рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. И тут уже совсем не очевидно, что сетка треугольников, к примеру, в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос "а почему треугольники" столь однозначным.

  • @Shineglow
    @Shineglow3 ай бұрын

    Объясните, пожалуйста, как при выведении b у нас получается FN/(F-N), а не -FN/(F-N), ведь при решении уравнения aN + b = 0, перенос aN инвертирует знак. Тогда получается, что b = -aN.a нам уже известна: F/(F-N). При подстановке должно получится -FN/(F-N). Подскажите, что я неправильно понял?

  • @Shineglow

    @Shineglow

    3 ай бұрын

    Можно не отвечать, такой вопрос уже был)

  • @yuriytheone
    @yuriytheone5 жыл бұрын

    Треугольники - это элементарно... Только 3 точки задают гарантированно плоскость. Соответственно однозначно определяется нормаль.

  • @DrollerTroller

    @DrollerTroller

    3 жыл бұрын

    Я продублирую комментарий, который уже оставлял раньше на эту тему. В 70-80 годы было очень много работ по растеризации чего угодно: кривые Безье, кривые и поверхности второго порядка, всякие NURBS, массивы вокселей и пр. То есть, мотивация «только 3 точки задают гарантированно плоскость» - это не мотивация. Мы же не плоскости рисуем? Рисуем поверхности, а их нужно составлять из множества треугольников. Или вообще не треугольников. Давайте подумаем про память. Совсем не очевидно, что сетка треугольников в памяти займёт меньше места, чем какой-нибудь набор поверхностей 2-го порядка. Опять же, к примеру, для двумерного случая нам нужно всего 4 точки для представления кубической кривой Безье. Да, это в два раза больше, чем для представления отрезка. Ну и что? Зато объект получился гладкий. Сколько вам надо отрезков что б петлю изобразить? Причём, аффинное преобразование кривой Безье не сложнее отрезка - нужно контрольные точки преобразовать. Опять же вы говорите про нормаль. Нормаль «однозначно определяется» к бесконечному кол-ву классов поверхностей. Но это мы коснулись лишь вопроса объёма памяти. Факторов сильно больше: текстурирование, нахождение пересечений, сглаживание и пр. Любопытно, что в первых версиях OpenGL даже был API для работы с NURBS. Поэтому я бы не считал вопрос «а почему треугольники» столь однозначным.

  • @Kiberbrain
    @Kiberbrain6 жыл бұрын

    Воот это полезно будет

  • @user-ro3qo7wd8h
    @user-ro3qo7wd8h7 ай бұрын

    а как же GLSL и программирование шейдеров, что то я не понимаю, как писать графику на C++, самому с нуля написать растеризатор или трассировщик лучей, так уже все ж написано - OpenGL или Vulkan. О чем вообще эти лекции?

  • @JohnWickMovie
    @JohnWickMovie6 жыл бұрын

    Пересчитал коэффицент 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) и именно эта часть лекции вырезана, ну что ж за провал то. Может кто знает где можно эту информацию почерпнуть?

  • @LOKSLEKSUS
    @LOKSLEKSUS4 жыл бұрын

    Будет ли этот курс читаться снова?

  • @DrollerTroller

    @DrollerTroller

    3 жыл бұрын

    Нет.

  • @Ruslan_Ishmuratov
    @Ruslan_Ishmuratov4 жыл бұрын

    Всегда хотел понять высшую математику и аналити́ческаю геоме́трию, в школе был отличник , в ВУЗе с первого дня матана пошло не понимание , так и в этой лекции . Ну как так то ? :( . Может кто курс посоветует доходчивый ?

  • @Ruslan_Ishmuratov

    @Ruslan_Ishmuratov

    4 жыл бұрын

    Сергей Зинченко спасибо ,посмотрю

  • @user-rt3gg3do4e

    @user-rt3gg3do4e

    4 жыл бұрын

    @@Ruslan_Ishmuratov есть ещё документ лекций по линейной алгебре

  • @user-bj6kn4yo6k

    @user-bj6kn4yo6k

    4 жыл бұрын

    kzread.info/dash/bejne/mIKfwdyzkbDVg9Y.html - включи русские субтитры.

  • @Raspi8
    @Raspi8 Жыл бұрын

    Треугольник наверно потому, что 3 точки однозначно обозначают плоскость. Соответственно для плоскости и считают нормали, для расчета освещения, и т. д.

  • @DrollerTroller

    @DrollerTroller

    3 күн бұрын

    Я в других комментариях уже подробно отвечал. Поэтому кратко: нормально можно посчитать, хоть к треугольнику, хоть к поверхности второго порядка, хоть к множеству, заданному неявно. А 4 точки однозначно задают, к примеру, кривую безье. А две точки - прямую. И что? Все эти рассуждения никак не отвечают на вопрос, почему исторически «победила» именно растеризация треугольников в железе.

  • @Jackson-yr9ih
    @Jackson-yr9ih3 жыл бұрын

    Прикольно! Только с 40 минуты стало нифига не понятно. Лаадно, пойду 2д змейку доделаю... ээх

  • @bekzhan356
    @bekzhan3565 жыл бұрын

    а VR на этих принципах создают?

  • @DrollerTroller

    @DrollerTroller

    5 жыл бұрын

    Да, но там много своей специфики.

  • @user-jf5qq9xs6j
    @user-jf5qq9xs6j5 жыл бұрын

    т.к треугольник -единственная замкнутая фигура с минимальным количеством вершин. Круг не подходит -т.к круг - это по-определению - бесконечное множество точек - равноудаленных от данной и из этого определения нельзя явно понять минимальное количество точек для того что бы круг стал кругом, а не скругленным многоугольником.

  • @yuriytheone

    @yuriytheone

    5 жыл бұрын

    Нет! Треугольник потому, что только 3 точки гарантированно задают плоскость, соответственно однозначно просто рассчитать нормаль...

  • @DenisShaver

    @DenisShaver

    3 жыл бұрын

    Из множества кругов очень сложно построить треугольник, из множества треугольников построить круг легко. Само собой, в приближённом виде, достаточным для достоверного отображения на дискретной сетке монитора.

  • @JohnWickMovie
    @JohnWickMovie6 жыл бұрын

    Непонятно с отсекателем. Нам надо нарисовать треугольник, если одна вершина за областью видимости, а другая нет. Тогда что?

  • @DrollerTroller

    @DrollerTroller

    6 жыл бұрын

    В теории, тут можно действовать по-разному. Можно честно "отсечь" часть треугольника рамкой экрана (прямоугольником) после проецирования, разбить на треугольники получившееся и растеризовать. Можно уже в процессе растеризации сбрасывать с конвейера пиксели за границей экрана. Но в этих способах есть одна проблема - перспективное деление для вершин, оказавшихся за ближней плоскостью отсечения. Там, потенциально, мы можем и на ноль поделить. Поэтому, обычно, отсечение делается в 3D ещё до перспективного деления. Этот функционал полностью реализован на видеокарте и какие-то рычаги управления для него мне неизвестны. Разве что, в DX12 есть честный консервативный растеризатор. Но я эту тему особо не бурил.

  • @JohnWickMovie

    @JohnWickMovie

    6 жыл бұрын

    Спс

  • @Oxyenium
    @Oxyenium3 жыл бұрын

    Лекция супер! Но оператор "от Бога" - не мог показать, чтобы было видно презентацию, в итоге видно обрезанную нижнюю часть.

  • @vector_razvitiya
    @vector_razvitiya2 жыл бұрын

    когда вспомнил, что у тебя 3/5 по линейной алгебре и ты на 44 минуте уже не вдупляешь...

  • @dmitryponyatov2158
    @dmitryponyatov21582 жыл бұрын

    на Rustе надо писать а не сиси++

  • @DrollerTroller

    @DrollerTroller

    2 жыл бұрын

    Есть альтернативное мнение, что надо писать на D. По крайней мере в Remedy (Control, Max Payne, Alan Wake) согласны.

  • @kovesik

    @kovesik

    2 жыл бұрын

    @@DrollerTroller всех агитирую за D!

  • @kovesik

    @kovesik

    2 жыл бұрын

    @@DrollerTroller прекрасный язычище

Келесі