OpenGL - Урок 10 - Первые шаги в 3D. Учимся осматриваться - управление камерой.

  Рет қаралды 26,258

Begin End

Begin End

3 жыл бұрын

Версия OpenGL 1.1
Это видео для тех, кто ни разу не использовал OpenGL или другие графические движки. Но прошел предыдущие 9 уроков.
► Уроки по языку Си - • Программирование на Си...
В этом видео мы:
+ узнаем как работать с камерой
+ научимся ходить в 3Д пространстве
► Плей лист - • OpenGL - Урок 1 - Перв...
Уроки по теме:
► Создание окна - • Язык Си - Как создать ...
► Простая анимация - • Язык Си - Простая аним...
► Урок 6 - Процедуры, функции, передача параметров - • Программирование на Си...
► урок 21 - Указатели - • Язык Си с нуля - Урок ...
► урок 22 - Передача параметров по указателю - • Язык Си с нуля - Урок ...
► OpenGL - Урок 1 - Первая программа - • OpenGL - Урок 1 - Перв...
► OpenGL - Урок 2 - Простые примитивы - • OpenGL - Урок 2 - точк...
► OpenGL - Урок 3 - Матрица преобразований - • OpenGL - Урок 3 - Матр...
► OpenGL - Урок 5 - ДЗ уроков 1, 2 и 3 - • OpenGL - Урок 5 - Рису...
► OpenGL - Урок 8 - Массивы вершин, Массивы индексов - • OpenGL - Урок 8 - Масс...
► OpenGL - Урок 9 - Ортогональная и перспективная проекции - • OpenGL - Урок 9 - Орто...
Безвозмездная помощь каналу:
VTB - 5368 2900 3162 0349 Антон.

Пікірлер: 61
@beginend95
@beginend95 3 жыл бұрын
Народ! Очень вас прошу воздержаться от оскорблений. Посты с оскорблениями буду удалять. Демократия демократией, но давайте уважать друг друга и право любого человека на свое мнение.
@user-tt1sn6es7h
@user-tt1sn6es7h 3 жыл бұрын
Правильно говоришь)
@mtp7261
@mtp7261 3 жыл бұрын
Ничего лучше в сети по OpenGL не видел. От новичков одно пожелание - Антон, обязательно продолжай, мы хотим освоить GL с самого начала, так как такой подход, думаю, проще для освоения.
@user-ic2wx3qw1w
@user-ic2wx3qw1w 3 жыл бұрын
Да блин, понял я, по меньше буду сидеть. Лучше книжку почитаю. Спасибо за урок по 3D!
@user-jm2rx4dd3h
@user-jm2rx4dd3h 5 ай бұрын
На 5:55 автор перемудрил и написал интуитивно непонятный код, где pos.x почему-то зависит от синуса, а pos.y - от косинуса, хотя вроде как всех в школе учили, что наоборот, x - косинус, а y - синус. Объясняю, как сделать код понятным (для наглядности представляйте в голове единичную окружность из тригонометрии). На 28-й строчке нужно убрать минус перед zAlfa и приплюсовать дополнительно 90 градусов (а потом перевести в радианы). Дело в том, что движение камеры вперёд, которое выбрано здесь в качестве базового движения без изменения угла ugol - это движение вверх (в сторону Y) в двумерной системе координат OXY. А так как угол, равный нулю, направлен в сторону X, нам требуется дополнительный разворот на 90 градусов, а не минусование zAlfa, чтобы просчитать перемещение камеры вперёд. На 32-й строчке нужно не отнять, а прибавить pi/2 к переменной ugol, так как движение влево - это движение в сторону, противоположную X, движение в сторону pi на единичной окружности, то есть к нашему базовому углу в 90 градусов надо прибавить ещё 90, чтобы получить 180 градусов или pi на единичной окружности - желаемое направление. На 33-й строчке - наоборот, нужно отнять pi/2 от угла, так как движение вправо - это движение в сторону нуля на единичной окружности, и базовый угол в 90 градусов надо уменьшить на 90 градусов. Ну и наконец, на 36 и 37 строчках надо поменять синус и косинус местами, чтобы иксу соответствовал косинус, а игреку - синус, как и должно быть.
@Qwaz_5
@Qwaz_5 2 жыл бұрын
Спасибо большое! Самая лучшая и простая реализация камеры. Странно что я об этом сразу не подумал
@BrownAleks
@BrownAleks 3 жыл бұрын
Антоха! Да ты реально круть! Давай, жги! Жду следующие выпуски с нетерпением. =)
@EgorChebotarev
@EgorChebotarev 3 жыл бұрын
Хороший 3д урок для новичков
@ip2alex
@ip2alex 3 ай бұрын
СПАСИБО ТЕБЕ!!!!
@ajaymansur4769
@ajaymansur4769 3 жыл бұрын
Поначалу я думал, что у меня скорость воспроизведения видео стоит на 1,5. Оказалось. Я чуть не обалдел. Вот так скорость набора. Парень талантище
@beginend95
@beginend95 3 жыл бұрын
Я просто куски с набором кода ускоряю)
@stephenhotking4493
@stephenhotking4493 2 жыл бұрын
Камера настолько сильная, что двигает всю систему координат
@user-tv8nn9rb7t
@user-tv8nn9rb7t 2 жыл бұрын
хороший урок урок по песку и воде можно применить и в других местах
@schwabbe
@schwabbe 3 жыл бұрын
Круто! У меня появился вопрос: насколько эффективно вращать/перемещать систему координат, а не саму камеру? Не будет ли это приводить к лагам в какой-нибудь простенькой 3D игре?
@beginend95
@beginend95 3 жыл бұрын
В OpenGL нет камеры) Функция gluLookAt выполняет те же самые преобразования матриц, которые мы выучили в уроке 3. Т.ч. ничего тормозить не будет)
@warriorofredoran958
@warriorofredoran958 3 жыл бұрын
Ураааа!!!! Давай Skyrim! Первая в мире 3D игра на C!
@necrof5127
@necrof5127 2 жыл бұрын
тес5 это первая 3д игра на с? че
@user-vm7hw1in3b
@user-vm7hw1in3b 3 жыл бұрын
Давай про текстуры
@highest3253
@highest3253 3 жыл бұрын
А где вы все это изучали? Книги, сайты?
@kirillpupkov6314
@kirillpupkov6314 2 ай бұрын
Привет, можешь посоветовать книги, по изучению WinApi, OpenGL? И стоит ли сразу переходить к OpenGL без знания WinApi?
@eprst0
@eprst0 10 ай бұрын
Антон хочу купить курс ваш, подскажите когда выйдет?
@korvinliquid1951
@korvinliquid1951 Жыл бұрын
Добрый день. Благодарю за прекрасные уроки. Вопрос - ф-я GetKeyState(VK_SHIFT) после однократного нажатия SHIFT бесконечно возвращает 1, следующие нажание и она бесконечно возвращает 0, так по кругу. Не могу понять это в системе дело, исходнике, или ещё где-го. Публикация исходников помоглабы разбираться с таки моментами. Может они где-то выложены?
@korvinliquid1951
@korvinliquid1951 Жыл бұрын
Всё, нашёл косяк. if (GetKeyState('S')
@atlasua2021
@atlasua2021 3 жыл бұрын
Помню когда на ОГЛ сидел там была и другая типо современная функция работы с камерой вида.
@quadroninja2708
@quadroninja2708 Жыл бұрын
glLookAt, наверное. Она делает в общем-то то же самое, что и в видео, просто поудобнее
@velteck
@velteck Жыл бұрын
Тут используется метод растеризации?
@KloiUA
@KloiUA Жыл бұрын
Все очень класно, но есть вопрос: glRotatef() после вызова изменяет матрицу (очевидно), но ведь когда мы поворачиваем камеру уже по 2й оси - glRotatef() логично будет изменять текущую матрицу, то есть ту которая получилась после первого поворота, а не старую (та которая до 1го поворота), и в таком случае логично вращение является некоректным, разве нет?
@quadroninja2708
@quadroninja2708 Жыл бұрын
Вращение после вращения работает одинаково вне зависимости от порядка операций. Вращение и перемещение - это уже зависит от порядка, и нужно это учитывать
@bl.exagear5966
@bl.exagear5966 Жыл бұрын
Здравствуйте!, у меня случилась кое какая проблема у меня при запуске появляется чёрный экран в место поля
@user-tv8nn9rb7t
@user-tv8nn9rb7t 3 жыл бұрын
можеш написать урок как сделать сохранения и загрузки например в редакторе который создавал в 34 уроке
@beginend95
@beginend95 3 жыл бұрын
Отличное предложение, спасибо! Добавил в план)
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
Почему ты используешь собственный BOOL, а не стандартный _Bool (или bool из stdbool.h )?
@beginend95
@beginend95 3 жыл бұрын
BOOL вполне себе стандартный. Находится в windef.h
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
@@beginend95 А я пишу под GNU/Linux. У меня нет виндовых библиотек :), а сам С99 умеет стандартный _Bool "из коробки" (принимает 0 или 1), или если подключить стандартную либу stdbool, появляется bool (принимает true или false).
@user-tv8nn9rb7t
@user-tv8nn9rb7t 3 жыл бұрын
есть неплохой пример редактора но без текстур и не доработаный на его примере тоже мохно создать урок с обьяснениеми How to Make a Simple 3D Modeling Program OpehGL Tutorial
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
Антон, а что такое M_PI ?
@beginend95
@beginend95 3 жыл бұрын
Это макрос в библиотеке #define M_PI 3.14159265358979323846
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
А можно определение типа данных POINTFLOAT?
@beginend95
@beginend95 3 жыл бұрын
Конечно! Еще можно нажать ПКМ и выбрать find declaration. После этого откроется модуль и место с описанием. typedef struct _POINTFLOAT { FLOAT x; FLOAT y; } POINTFLOAT;
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
@@beginend95 Видимо он тоже из windef.h ?
@zx_gamer1381
@zx_gamer1381 3 жыл бұрын
@@beginend95 Спасибо большое, Антон. Но я призываю использовать в ваших замечательных уроках стандартные функции языка. Спасибо.
@beginend95
@beginend95 3 жыл бұрын
@@zx_gamer1381 Благодарю за замечание! Буду больше обращать на это внимание.
@naku8005
@naku8005 3 жыл бұрын
Здравствуйте , этот видео поможет , если я создаю камеру на visual studio
@beginend95
@beginend95 3 жыл бұрын
Да. В начале первого урока я говорил как запустить в visual studio.
@naku8005
@naku8005 3 жыл бұрын
Begin End спс , но я имел именно это код который вы писали этом видео , без готового кода code blocks
@beginend95
@beginend95 3 жыл бұрын
@@naku8005 Да, поможет. Готовый код просто создает окно и настраивает контекст для работы с OpenGL. Это можно сделать и любым другим способом)
@naku8005
@naku8005 3 жыл бұрын
@@beginend95 я скопировал , и у меня в Visual studio не распознает вот такие слова в void MoveCamera: Pointfloat GetKeystate VK_UP,DOWN,LEFT,RIGHT M_PI
@naku8005
@naku8005 3 жыл бұрын
@@beginend95 а когда скопировал весь код из code blocks в Visual , то у меня не распознает M_PI
@user-tv8nn9rb7t
@user-tv8nn9rb7t 3 жыл бұрын
ЧТО ТО ДАВНО НЕ ДЕЛАЕШ УРОКИ ПО OpenGL ПРИМЕРНО КОГДА БУДУТ
@rubiks7196
@rubiks7196 3 жыл бұрын
Все бы ничего только старую версию используете openGL не порядок..
@dgdarkking266
@dgdarkking266 Жыл бұрын
УУУУфффф Стоит упомянуть почему мы переводим угол из градусов в радианы Тригонометр функции из мат.аш работают с радианами Несколько вещей не понятно 1) Мы делаем сначала поворот системы, а потом перенос системы я чот понять не могу, мы повернули систему и перенос должен проходить в новой повернутой системе, а то что я вижу, когда ещё не была добавлена формула мной - - перенос происходит по обычной системе координат, чо за шаманство (долго пришлось понимать свою ошибку в рассуждениях - я просто рассматривал ситуацию в голове как со стороны системы координат и сразу в некоторый момент переключался на сторону камеры - поэтому была несостыковка в понимании) 2) как это работает - по какому правилу матеши: float rad = -zAlfa / 180 * M_PI; float velocity = 0; if (GetKeyState('W') < 0) velocity = 0.1; if (GetKeyState('S') < 0) velocity = -0.1; if (GetKeyState('D') < 0) { velocity = 0.1; rad += M_PI * 0.5; } if (GetKeyState('A') < 0) { velocity = 0.1; rad -= M_PI * 0.5; } if (velocity != 0) { position.x += sin(rad) * velocity; position.y += cos(rad) * velocity; }!!! Не отправлял этот коммент пока не попробовал разобраться Объясняю ниже, что происходит где про это прочитать просто только одну формулу знаю для нахождения: формула (1) { x = x' * cos(A) - y' * sin(A) { y = x' sin(A) + y' * cos(A) Вот выше представлена мат формула, как можно заметить в коде AD отвечают за ходьбу в оси ИКС Вычисление синусов и косинусов слишком сложно для компа, поэтому оставили одну из частей - в данном случае { x = y' * sin(A) { y = y' * cos(A) здесь y' - это перемещение чтобы компенсировать убранную часть из формулы делается следующие (rad += M_PI * 0.5;) или (rad -= M_PI * 0.5;) Но из-за такой компенсации и одного параметра для перемещения ( получается вектор для одномерного пространства) , мы получаем в результате, что клавиши AD - перемещение по ИКСу будет забирать на себя приоритет P.S. Тут автор мою голову давно не занимавшуюся матешей заставил жёстко подумать, что у него написано и как это чудо работает, но чтобы всё работало можно было в отдельные переменные вычислить кос и син и жить спокойно и с нормальной формулой
@user-tv8nn9rb7t
@user-tv8nn9rb7t 2 жыл бұрын
ЧТО ТО ДАВНО НЕ ДЕЛАЕШ УРОКИ ПО OpenGL ПРИМЕРНО КОГДА БУДУТ
@beginend95
@beginend95 2 жыл бұрын
ща игру на С++ сделаю, потом домашка для Си и С++, потом вернемся к ОпенГЛ)
OpenGL - Урок 11 - ДЗ уроков 8, 9 и 10
8:06
Begin End
Рет қаралды 9 М.
Китайка и Пчелка 4 серия😂😆
00:19
KITAYKA
Рет қаралды 1,5 МЛН
Would you like a delicious big mooncake? #shorts#Mooncake #China #Chinesefood
00:30
Создание сборщика мусора | С
16:02
Winderton
Рет қаралды 132 М.
Полиморфизм на практике
10:42
ExtremeCode
Рет қаралды 177 М.
OpenGL - Урок 16 - Основы освещения.
9:27
Begin End
Рет қаралды 13 М.