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

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

КОМЕНТАРІ • 59

  • @bekzhan356
    @bekzhan356 5 років тому +12

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

  • @firiasu
    @firiasu 3 роки тому +1

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

  • @aleksanderaksenov1363
    @aleksanderaksenov1363 5 років тому +9

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

    • @voronow3
      @voronow3 4 роки тому +1

      Там следующая лекция про Direct X. Значит про OpenGL нету? Нужно дальше искать?

    • @andrewvsk2368
      @andrewvsk2368 4 роки тому +2

      @@voronow3 вообще это даже странно, учитывая что OpenGL - стандарт (ранняя версия даже в российских ГОСТах есть), а DirectX - проприетарная поделка Microsoft, не говоря что под мобилки Андроид ещё долго будет актуален OpenGL ES. С другой стороны DirectX 11 и Modern OpenGL по своему принципу мало чем отличаются. То есть теория примерно одинаковая. Лично я кстати вообще не одобряю изучение компьютерной графики совместно с библиотеками. Для понимания лучше написать собственный PBR визуализатор на CPU (неэффективный, тормознутый, но выдающий норм картинку с самопальным растеризатором, это даёт гораздо больше реального понимания как это работает). OpenGL дофига всего берёт на себя (имея при этом свои особенности, скажем OpenGL любит mipmap'ы и без них работает хреново (а почему так, можно легко понять хорошо разбираясь в теории). Лекции можно посмотреть, но изучать рациональнее OpenGL и затем Vulkan (намного сложнее (!) с нуля не надо точно). Однако зная OpenGL и Vulkan можно портнуть графику почти на любое устройство в мире, разве что Apple традиционно плюёт на стандарты.

    • @voronow3
      @voronow3 4 роки тому +2

      @@andrewvsk2368 Спасибо за ценную информацию. Я давно присматриваюсь к OpenGL ES в рамках проекта настольных приложений под Qt и на встраиваемой электронике. Про термин PBR ничего не знаю. Можете, акромя гугления порекомендовать материалы для просвящения?

  • @AbsurdStudioNEW
    @AbsurdStudioNEW 6 років тому +2

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

  • @user-ke9qd9el2k
    @user-ke9qd9el2k 2 роки тому

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

  • @surenbabayan3549
    @surenbabayan3549 2 роки тому

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

  • @user-gu4rf9sy1i
    @user-gu4rf9sy1i 5 років тому +13

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

  • @user-vj1vg2nk7g
    @user-vj1vg2nk7g 6 років тому +5

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

    • @CompscicenterRu
      @CompscicenterRu  6 років тому +2

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

  • @aleksanderaksionau8555
    @aleksanderaksionau8555 6 років тому

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

  • @JohnDoe-lw7yb
    @JohnDoe-lw7yb 4 роки тому +9

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

  • @yuriytheone
    @yuriytheone 5 років тому +8

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

    • @DrollerTroller
      @DrollerTroller 3 роки тому +3

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

  • @user-sk6xi2oj4v
    @user-sk6xi2oj4v 6 років тому

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

    • @CompscicenterRu
      @CompscicenterRu  6 років тому +1

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

  • @atlasua2021
    @atlasua2021 3 роки тому +2

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

    • @screamstream1161
      @screamstream1161 2 роки тому

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

  • @sierikov
    @sierikov 6 років тому +1

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

    • @DrollerTroller
      @DrollerTroller 6 років тому +6

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

  • @user-ro3qo7wd8h
    @user-ro3qo7wd8h 7 місяців тому

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

  • @-________9732
    @-________9732 11 місяців тому +1

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

    • @user-kr2ff3xr3h
      @user-kr2ff3xr3h 2 дні тому

      при этом 3d моделеры стараются избегать в своих моделях треугольников, только четырёхугольники.

  • @Shineglow
    @Shineglow 4 місяці тому

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

    • @Shineglow
      @Shineglow 4 місяці тому

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

  • @LOKSLEKSUS
    @LOKSLEKSUS 4 роки тому

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

  • @Raspi8
    @Raspi8 Рік тому +1

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

    • @DrollerTroller
      @DrollerTroller 23 дні тому

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

  • @Ruslan_Ishmuratov
    @Ruslan_Ishmuratov 4 роки тому +1

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

    • @Ruslan_Ishmuratov
      @Ruslan_Ishmuratov 4 роки тому

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

    • @user-rt3gg3do4e
      @user-rt3gg3do4e 4 роки тому

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

    • @user-bj6kn4yo6k
      @user-bj6kn4yo6k 4 роки тому +1

      ua-cam.com/video/fNk_zzaMoSs/v-deo.html - включи русские субтитры.

  • @Kiberbrain
    @Kiberbrain 6 років тому +2

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

  • @bekzhan356
    @bekzhan356 5 років тому

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

    • @DrollerTroller
      @DrollerTroller 5 років тому

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

  • @user-jf5qq9xs6j
    @user-jf5qq9xs6j 5 років тому +2

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

    • @yuriytheone
      @yuriytheone 5 років тому +2

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

    • @DenisShaver
      @DenisShaver 3 роки тому

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

  • @JohnWickMovie
    @JohnWickMovie 6 років тому +1

    Пересчитал коэффицент b. Получился b = - (F*N)/(F-N). Я сделал как вы сказали что берем формулу f(z) = (a*z + b)/(z) и f(N) = 0; f(F) = 1. Ваше доказательство вырезано, поэтому возможно что я что-то упустил

    • @DrollerTroller
      @DrollerTroller 6 років тому +7

      Да, я на доске минус потерял где-то по дороге :) У вас правильно получилось вывести. В своё оправдание скажу, что преподаватели всё-таки не роботы и тоже иногда ошибаются ;) Причём это для студентов, с некоторой точки зрения, полезно: им приходится тщательнее прорабатывать материал и уже не выйдет просто так зазубрить и забыть после экзамена. Придётся реально разбираться в текстах. Но, в целом, конечно, лучше б лекторы всё правильно и без ошибок давали.
      Занятный случай на эту тему был у меня, когда сам в универе учился. Припёрлись мы как-то на досрочный экзамен по матанализу. И лектор там выдал: «У меня в лекциях в некоторых местах допущены ошибки. Ваша задача - найти их, объяснить, что там не так и исправить доказательство». Каждому досталось по две таких теоремы, сидели закуривали собственные же конспекты несколько часов %) Один человек из, по-моему, пяти пошёл сдавать обычный экзамен. Такие дела =)
      А вам уважуха за внимательность.

    • @user-tp1qn2wt6t
      @user-tp1qn2wt6t Рік тому

      @@DrollerTroller там он ещё одну ошибку допустил когда складывал вектора

    • @user-ie5dz1qg6i
      @user-ie5dz1qg6i 9 місяців тому

      Зашел узнать почему используется f(z) = (a*z + b)/(z) и именно эта часть лекции вырезана, ну что ж за провал то. Может кто знает где можно эту информацию почерпнуть?

  • @Jackson-yr9ih
    @Jackson-yr9ih 3 роки тому +1

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

  • @JohnWickMovie
    @JohnWickMovie 6 років тому +1

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

    • @DrollerTroller
      @DrollerTroller 6 років тому +1

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

    • @JohnWickMovie
      @JohnWickMovie 6 років тому

      Спс

  • @vector_razvitiya
    @vector_razvitiya 2 роки тому

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

  • @Oxyenium
    @Oxyenium 3 роки тому +2

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

  • @dmitryponyatov2158
    @dmitryponyatov2158 2 роки тому

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

    • @DrollerTroller
      @DrollerTroller 2 роки тому +1

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

    • @kovesik
      @kovesik 2 роки тому

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

    • @kovesik
      @kovesik 2 роки тому

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