В этом видео я расскажу о Vertex Array Object и Vertex Buffer Object на примере отрисовки треугольника. ================================ Ссылки alex2772.ru - мой сайт
Пікірлер: 160
@Alex27724 жыл бұрын
Если возникнут какие-либо проблемы, пожалуйста, пишите сюда: alex2772.ru/forums/
@Alex27724 жыл бұрын
@Beginer Programming Я мог бы сразу игру на юнити сделать и не париться со своим движком. Этот спор можно продолжать до бесконечности.
@Alex27724 жыл бұрын
@Beginer Programming если вылетит исключение, то стандарт C++ гарантирует, что он вызовет деструкторы, а значит, и деинициализацию glfw.
@devvvnull4 жыл бұрын
@Beginer Programming Да
@user-no7xn4qt5k Жыл бұрын
Боже, сколько нужно было посмотреть видеороликов по OpenGL, чтобы услышать внятное объяснение сути VAO и VBO. Спасибо тебе большое!
@4rtemtrickster4684 жыл бұрын
Туторы реально годные! Смотрю тебя с уже оч давно! хотелось бы весь исходный код с иерархией файлов видеть в доступе на твоем сайте
@Alex27724 жыл бұрын
В следующем видосе я скину ссылки на репозиторий с кодом из туториалов + исходный код Craftgame
@illoprin4 жыл бұрын
Шалом. Тутор как всегда понятный и информативный! Лайк. Кста жду новую версию Craft Game
@Alex27724 жыл бұрын
Благо, их хоть кто-то понимает)
@Oxewow4 жыл бұрын
Круто! Продолжай в том же духе
@DOCtorActoAntohich4 жыл бұрын
6:38 "двоеточсие-двоеточие-слэш Гэ-Лэ (б-дь)"
@den_in_yt2 жыл бұрын
Какое объявление было у кода: { mWindow = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr); } просто я пропустил
@atlasua20213 жыл бұрын
Такой красивый почерк))
@elderlyoparysh28003 жыл бұрын
может это я тупой, но лично мне было не просто усваивать новую информацию в таком темпе, а в остальном вообще заебись, спасибо за ролик.
@jemm83634 жыл бұрын
После графической части будешь подключать и синхронить физ. дивиг?
@Alex27724 жыл бұрын
Не для всех игр нужен физический движок
@user-tb7su2nj4b3 жыл бұрын
Джентльмены, а почему в 4-ой строке в моменте 6:17 Алекс подключает библиотеку , если в include он закидывал папку GL большими буквами?
@Alex27723 жыл бұрын
Потому что винда нечувствительна к регистру букв, а линуксы и макоси - чувствительны. Вижуалка очень не любит, когда в ней пишут кроссплатформенный код. Я ещё её еле отучил от болезни обратного слеша в путях инклюдов
@justsample87934 жыл бұрын
Я не знаю, задавали ли тебе этот вопрос, но, как ты изучал c++? И вот про это всё, как к этому дошел?. Сам хочу заняться этим, и был бы очень признателен за ответ. И ещё, спасибо за видосы. Жду продолжения.
@Alex27724 жыл бұрын
Все мои девлоги это и есть процесс обучения C++ и OpenGL
@theoctan85694 жыл бұрын
Надеюсь мы ещё вернёмся к шейдерам) и может никто не спрашивал моего мнения, но как насчёт принципа единственной ответственности для класса VAO, который не только хранит атрибуты, также занимается созданием VBO, так и ещё отрисовкой. Знаю, что всё делалось на скорую руку для быстрой демонстрации. Думаю в будущем разделим обязанности) Надеюсь мой коммент заметят и не сильно осудят за многословие.
@Alex27724 жыл бұрын
Так быстрее и проще. Да, конечно, грамотнее было бы разделить VAO и VBO в отдельные классы, но это неоправданные строчки кода. Пример, как я решил задачу по принадлежности точки к окружности за 150 строк (было 10): gist.github.com/MrLargha/4c9e6de03cb7cd2f30b6aea4097ba7ca
@65565 ай бұрын
Спасибо большое за туторы. Долго на русском языке искал по буферам инфу. Только второй ролик так и не нашел
@torvald3d3 жыл бұрын
Что за комбо счётчик справа вверху когда печатаешь? Какой то плагин?
@Alex27723 жыл бұрын
powermode плагин для вижуалки
@channelbarrel4 жыл бұрын
Очень бы хотелось увидеть продолжение туториалов. Планируешь продолжать?
@Alex27724 жыл бұрын
Конечно планирую
@ilnev37383 жыл бұрын
ряльно полезные уроки
@cppprograms58684 жыл бұрын
неплохо!!!
@Ivan-qb7kc4 жыл бұрын
1:33 - так говоришь, будто это излишняя оптимизация, но ведь ты же вызываешь vector::reserv перед тем, как начать пушить в него элементы, а это тоже самое)
@Alex27724 жыл бұрын
Я не говорю, что оптимизация - это плохо. Речь идёт об усложнении простой задачи новичкам
@user-tp1qn2wt6t3 жыл бұрын
на 1:26 версия опенгл версия 1.0 используется
@eday44904 жыл бұрын
Подними ещё тему. О том где взять программиста гейм дизайнеру. К примеру если есть идея игры и Арты, но програмить игру некому.
@Alex27724 жыл бұрын
Сделаю видос на эту тему
@eday44904 жыл бұрын
Alex2772 спасибо. Может и игрой займусь)))
@ilnev37383 жыл бұрын
Ты художник и программист и гемдизайнист )
@ilnev37383 жыл бұрын
Вот так можно
@ilnev37383 жыл бұрын
Почему когда я меняю местами вершины этого треугольника он отображается не так как раньше?
@Alex27723 жыл бұрын
Потому что в опенгле у треугольника есть лицевая сторона и обратная сторона. При включённом glCullFace обратная сторона не отображается. Какая сторона лицевая, какая - обратная, определяется при помощи векторного произведения. Видимо, когда ты меняешь местами вершины получается так, что треугольник как бы поворачивается к тебе обратной стороной, которая не отображается.
@ilnev37383 жыл бұрын
@@Alex2772 нет, треугольник отображается , но не так как до того как я поменял вершины. Например у: vao.AddVertexBufferObjects({ {0, 0.5, 0 }, {-0.5, -0.5, 0}, { 0.5, -0.5, 0} }); и vao.AddVertexBufferObjects({ {0, 0.5, 0 }, { 0.5, -0.5, 0}, {-0.5, -0.5, 0}, }); разные результаты Но почему отображается по разному? Получается это из за того что он повернут не так или из за чего?
@Alex27723 жыл бұрын
@@ilnev3738 Можешь уточнить, чем результаты отличаются?
@ilnev37383 жыл бұрын
@@Alex2772 треугольники разные по форме
@user-xv4hq9qp4h2 жыл бұрын
Помогите пожалуйста,я написал код все строки но треугольник не отображается где может быть ошибка (2 цикла я тоже написал)заранее спасибо
@Alex27722 жыл бұрын
kzbin.info/www/bejne/pqS4pYucotKnqac
@user-tb7su2nj4b3 жыл бұрын
Тут еще вот такая мистическая фигня происходит: Когдая я подключаю сначала glew.h, а потом GL.h, то высвечивается ошибка "gl.h (именно маленькими буквами) included before glew.h", а если подключать их в обратном порядке, то компилятор найдет множество ошибок в файлах glew.h и GL.h. Как выйти из этого порочного круга?
@Alex27723 жыл бұрын
GL/glew.h и GL/GL.h?
@user-tb7su2nj4b3 жыл бұрын
@@Alex2772 Да. и . В зависимосте от порядка подключения возникают различные ошибки, описанные выше
@Alex27723 жыл бұрын
@@user-tb7su2nj4b В видео мы создали файл gl.h. Убедись, что ты инклюдишь именно его
@user-tb7su2nj4b3 жыл бұрын
@@Alex2772 я создал именно его и подключаю везде именного его. И в зависимости от того, в каком порядке подключаются библиотеки в нем, выскакивают разные ошибки.
@Alex27723 жыл бұрын
@@user-tb7su2nj4b Именно поэтому я стараюсь не добавлять индклюд gl.h в хеадер файлы. Учти, что порядок индклюда может нарушиться от того, что ты инклюдишь хеадер файл, который индклюдит gl.h. Тут очень тонкая грань, нужно смотреть, дерево включаемых файлов и проверять последовательность. Посмотри в гугле, как это делается
@builderNITRO3 жыл бұрын
Что делать как у меня код как у тебя но треугольник не рисуется в консоль ошибок не выдает и может это связано что у меня фон не черный на оранжевый?
@Alex27723 жыл бұрын
kzbin.info/www/bejne/pqS4pYucotKnqac
@builderNITRO3 жыл бұрын
@@Alex2772 Я разобрался в чем проблема я в VAO.cpp в функций addVertexBufferObject() где glVertexAttribPointer вместо 3 написал 1
@user-nk7mt1rn2v Жыл бұрын
Алекс почему ты старые видео по-удалял? они очень полезны для новичком, по типу меня
@Alex2772 Жыл бұрын
Снесу когда сделаю годную альтернативу
@voidptr_t4 жыл бұрын
Когда качаешь всё из nuget и не нужно линковать
@user-tb7su2nj4b3 жыл бұрын
С одной стороны много вопросов, но с другой стороны чем больше комментариев тем популярнее видос. Так вот: Пацаны, для полного понимания, скажите, пожалуйста: 1) что за тип данных такой GLuint? 2) Что делают функции glGenVertexArray() и glGenBuffers()? 3) Я правильно понимаю, что в glGenBuffers() первый параметр - номер VAO, к которому мы привязываем создаваемый VBO? Если да, то почему там еденица? Разве нумерация не с нуля начинается?
@Alex27723 жыл бұрын
1) typedef unsigned int GLuint. В сишных библиотеках считается хорошим тоном определять свои типы. 2) glGenVertexArray - создает VAO. glGenBuffers - создает VBO. 3) Нет, первый аргумент - это количество VBO, которое ты хочешь создать. 2м аргументом задаёшь место, где ты будешь хранить номер созданного VBO. с glGenVertexArray работает точно также
@user-tb7su2nj4b3 жыл бұрын
@@Alex2772 Понял. Спасибо. Можно переходить к 3-ей части.
@alex_xplus71354 жыл бұрын
Ясна, гений(не рили крут)
@neyallen9494 жыл бұрын
О да, зашёл с нового аккаунта в Ютуб и начал набирать твой канал и увидел что видео у тебя вышло 6 часов назад)))))
@Alex27724 жыл бұрын
)
@stepanbazrov63303 жыл бұрын
После конструкции VAO v = VAO() Вызов v.Draw() не будет ничего рисовать, потому что все буферы будут удалены деструктором временного объекта.
@Alex27723 жыл бұрын
У тебя не получится так сделать. 5:06, смотри девятую строчку - запрещаю конструктор копирования
@usernameusernamovich88414 жыл бұрын
Зачем ты отпугиваешь маслят, от языков программирования?
@Alex27724 жыл бұрын
Чтобы было меньше недокодеров
@usernameusernamovich88414 жыл бұрын
@@Alex2772 и как бонус меньше крутых кодеров
@Alex27724 жыл бұрын
Людей, которые хотят стать крутыми кодерами, не отпугнёшь школовидосами на ютубе
@user-tb7su2nj4b3 жыл бұрын
Пацаны, у меня компилятор отказывается открывать и . С проблем не возникло. Можете подсказать, в чем может быть проблема?
@Alex27723 жыл бұрын
Добавь папку src в Дополнительные каталоги включаемых файлов. 6:19
@user-tb7su2nj4b3 жыл бұрын
@@Alex2772 Разобрался. Там глупая ошибка оказалась. Спасибо за ответ
@Alex27723 жыл бұрын
@@user-tb7su2nj4b нет, не влияет. Убедись, что в дополнительных каталогах включаемых файлов есть файлы GLEW'а. Обрати внимание что, откуда и куда я перетаскиваю на 5:32
@user-tb7su2nj4b3 жыл бұрын
@@Alex2772 удалил всё и сделал по-новой, заработало. Фиг его знает, что за магия. В любом случае, огромное спасибо. И за сами ролики, и за ответы на вопросы. За последнее - особенно.
@Alex27723 жыл бұрын
@@user-tb7su2nj4b Рад помочь)
@narzaru Жыл бұрын
Привет со школы 21
@helios85674 жыл бұрын
gl.h before glew.h. Делаю точь в точь, не идёт и всё. Поменял всё местами, один фиг. И это только ради вонючего треугольника! Скинь пожалуйста исходники.
@Alex27724 жыл бұрын
github.com/Alex2772/Engine
@KennyTutorials4 жыл бұрын
За ВАО, ВБО, ГЛ, ГОЛОГЕН = лайк)
@ilnev37383 жыл бұрын
о привет
@user-pg8ry1tm3t Жыл бұрын
Все прекрасно, только мелковатый масштаб для просмотра…
@asx41332 жыл бұрын
Так я не понял как vbo привязывается к vao?
@Alex27722 жыл бұрын
функцией glvertexattribpointer. берёт последний бинденный vao, последний бинденный vbo
@asx41332 жыл бұрын
@@Alex2772 да спасибо
@Vadim-wi4by4 жыл бұрын
Задел так сказать на будущее. Надеюсь чанк будем сделан одним мешем. Ибо очень халтурно копипастить тройным циклом готовые кубы по карте высот. Давай нормальную генерацию и просчёт коллизии.
@Alex27724 жыл бұрын
При халтурном копипасте кубов фпс проседает до одного уже на 10 чанках, что даже не смешно. И хатурного копипаста кубов уже без меня на ютубе навалом
@Vadim-wi4by4 жыл бұрын
@@Alex2772 супер. То есть будет меш? Вот это интересно смотреть! Кстати, рекомендую начать именно с коллизии. Это довольно важный этап. Сам пробовал, но на C# и со стандартной библой DX на NET 2.0. Там коллизия реализована Mesh.Intersect и этот метод всего лишь пускает луч и даёт тебе индекс треугольника и U V точки. Надеюсь на плючах у тебя будут более доработанные методы для просчёта коллизии.
@Alex27724 жыл бұрын
Меш будет обязательно, а хорошая реализация коллизии у меня есть. Эти два этапа я разделю и выпущу в виде отдельных видосов
@Vadim-wi4by4 жыл бұрын
@@Alex2772 ого. Братан, свяжись со мной пожалуйста. Мне нужно узнать у тебя пару вещей. vk.com/vadim_yek
@KennyTutorials4 жыл бұрын
Vertex Array и Vertex Buffer Objects уже давно не новинка в Open GL)
@Alex27724 жыл бұрын
Угу. Вот только до сих пор встречаются такие кадры, которые в 2к19 используют glVertex?f для загрузки вершин.
@KennyTutorials4 жыл бұрын
@@Alex2772Именно это и является проблемой для новичков. Так вот когда я только начал изучать Open Gl, тоже попался на это (это было в начале 18 г), а потом долгое время путался пока не понял, что glBegin glEnd это Fixed Function Pipeline до 3.0, а использование VAO, VBO это New Programable Pipeline 3.0+.
@Alex27724 жыл бұрын
Изначально хотел сказать об этом в видосе. Но чё-то передумал, видимо зря
@stalker63454 жыл бұрын
0:27 УРА БУДУ КОДИТЬ НА C#
@stalker63453 жыл бұрын
@Намыс Чекелеков здесь я и подрузомевал юнити
@Under-Games4 жыл бұрын
Давай новый выпуск!
@Alex27724 жыл бұрын
Угу
@user-yf8nk6jf4r4 жыл бұрын
Я так понял ты забил дальше развивать проект?
@Alex27724 жыл бұрын
Какой проект?
@user-yf8nk6jf4r4 жыл бұрын
@@Alex2772 Ну всмысле движок и игру саму
@Alex27724 жыл бұрын
Нет, не забил. Есть ещё учёба и 3 других проекта
@The-DanFed-One4 жыл бұрын
ПЗДЦ... Я попробывал делать точь в точь как у тебя и нифига не работает. "gl.h after glew.h" и даже '#pragma_once' не помогает....
@Alex27724 жыл бұрын
А я говорил, что писать #include нужно только ПЕРЕД #include . Кроме того, не стоит включать оба эти файла внутри твоих заголовных файлов, иначе может возникнуть та же ошибка с порядком инклюдов и ты задолбаешься искать эту ошибку. Можешь написать на форум alex2772.ru/forums/
@yltravi0let_8804 жыл бұрын
Где видео
@Alex27724 жыл бұрын
У меня форс мажор, извините
@who98994 жыл бұрын
Где мой урок по шейдерам????? Ибо сам хуй разберусь, да и было бы не плохо видеть урок или тему на форуме по поводу как для одного объекта создать VBO и вписать туда значения, например координаты вершин, координаты нормалей, координаты UV, id текстуры...
@Alex27724 жыл бұрын
Уже его озвучиваю.
@user-pg8ry1tm3t Жыл бұрын
И если вы всерьёз думаете, шо сможете обойтись в геймдеве без математики - загуглите термин quaternions…🤪
@voidptr_t3 жыл бұрын
Пишу спустя полтора года. Вообще только биндить вао не безопасно, желательно всегда его "освобождать": glBindVertexArray(0);
@Alex27723 жыл бұрын
Необязательно
@voidptr_t3 жыл бұрын
@@Alex2772 так я сказал "желательно"
@supermole46544 жыл бұрын
Пролетариат требует 3 серию
@Alex27724 жыл бұрын
Когда-нибудь, когда-нибудь ~
@novapc4254 жыл бұрын
Где минуты с 4-й всё становится непонятно, меньше объясняешь и просто делаешь((
@Alex27724 жыл бұрын
Учту
@user-cs9kg4fb9x4 жыл бұрын
Лично я прошел базовый курс С++ и на этом видосе сиду ебалом щелкаю, где учить дополнительные библиотеки вообще и какие самые востребованые?
@Alex27724 жыл бұрын
В 1 части я рассказал, какие библиотеки будем использовать и какие библиотеки самые востребованные в принципе. Там же говорил, что для понимания происходящего потребуются хорошие знания С++
@ZZZ-tf4tx4 жыл бұрын
У тебя есть дискорд?
@Alex27724 жыл бұрын
Есть, но не пользуюсь
@ZZZ-tf4tx4 жыл бұрын
@@Alex2772 Можно с тобой поболтать?
@ZZZ-tf4tx4 жыл бұрын
Я нашел тебя) чекни лс
@Alex27724 жыл бұрын
Звучит как угроза
@ZZZ-tf4tx4 жыл бұрын
@@Alex2772 ты вообще в дс заходишь?
@user-kb8dt1cs4i4 жыл бұрын
На каком языке делать читы на майнкрафт?
@user-og5hn2lc4y4 жыл бұрын
тебе не нужно
@user-kb8dt1cs4i4 жыл бұрын
@@user-og5hn2lc4y Просто интересно
@Alex27724 жыл бұрын
Если просто интересно, но на Java. Как и все моды для майна.
@channelbarrel4 жыл бұрын
на HTML
@ilnev37383 жыл бұрын
На двочином коде
@nikitaserik99384 жыл бұрын
vyt pfitk мне зашел
@user-nd3vv5fn5e4 жыл бұрын
на сколько же SFML проще!
@Alex27724 жыл бұрын
SFML почти всё делает за тебя. Unity+C# ещё проще
@FatherOfPeople3 жыл бұрын
Это что я искал на русском языке
@anoona50154 жыл бұрын
Шутка про ассемблер зашла))))) ну там где про прерывания. оказуалили программирование раньше хочешь микропроцессор юзать учи ассемблер ща ардуино. языки тип python java и особенно вэб типо php способны только на лаганое дерьмо. 100% уверен что если заебаться и на ассемблере написать игру с графой 2019 года(это пиздец я ели змейку написал) она на пентиуме пахать будет(возможно преувеличил но оптимизация капитальная)
@Alex27724 жыл бұрын
Графика больше зависит от видеокарты, чем от центрального процессора. Хотя можно, конечно, изучить ассемблер для видеокарт. Но с оказуаливанием программирования согласен. Яркий тому пример - вышеупомянутый веб-уеб. Мне не совсем понятно, почему весь ор по большой нагрузке на железо веб-браузеров идёт на создателей веб-браузеров, а не уеб-разработчиков. Ведь тупорылые одностраничные говносайты лагают именно из-за уеб-разработчиков, которые не хотят ничего делать и используют громоздкие javascript-фреймворки и библиотеки по типу jquery и vue, что только отрицательно сказывается на производительности. А разработчикам веб-браузеров приходится разгребать всё это их дерьмо и писать оптимизации, которые мамкины уеб-разработчики по курсам "за 2 недели" не умеют делать и, что самое страшное, не хотят научиться.
@anoona50154 жыл бұрын
@@Alex2772 могу скинуть пруфы
@Alex27724 жыл бұрын
Я обвиняю уеб-разработчиков, а не JS или нормальных веб-разработчиков. Тут тонкая грань) Пыха тоже нормальный язык. Не станешь же ты писать хоум-пейдж на свой сайт на си. Про передачу аргументов. Тут тоже всё не так просто. Надо смотреть на итоговый код в дизассемблере. Первые четыре аргумента чаще всего передаются через регистры, т.е. память вообще не задействуется. Всё, что не влезет, передаётся через стек. В случае передачи всего через указатель на структуру в любом случае задействует память, что медленнее, чем через регистры. Про движение травы. От процессора требуется только увеличивать какую-либо переменную с каждым кадром, после чего запихивать её в видеокарту. Движение травы просчитывает вершинный шейдер в видеокарте.
@Alex27724 жыл бұрын
При компиляции с оптимизацией стек по максимуму вычищается.
@zergon3213 жыл бұрын
Если тебе нужны именно компилируемые языки, то можно юзать Go и Rust, а не б-гомерзкий С++.
@Alex27723 жыл бұрын
Дельфи, говорят, тоже компилируемый, и его тоже можно использовать вместо С++
@zergon3213 жыл бұрын
@@Alex2772 Delphi устарел и его никто не использует, а Go и Rust актуальны.
@Alex27723 жыл бұрын
@@zergon321 ну используй rust или go в этом проекте, я что, тебе запрещать буду что-ли
@ilnev37383 жыл бұрын
С++ лучше
@zergon3213 жыл бұрын
@@ilnev3738 чем?
@netjoker10002 жыл бұрын
как же вы достали начинать и бросать уроки по OGL. ни чо на русском нет( . обидно за державу))
@Alex27722 жыл бұрын
"мы" это кто?
@netjoker10002 жыл бұрын
@@Alex2772 ты и такие как ты)
@comachine2 жыл бұрын
Согласен, везде что то по типу - 1 Часть: Запускаем окно 2 Часть: Рисуем квадратик/кружочек/треугольник в окне 3 Часть: Подрубаем какую то хуй пойми какую графическую поеботу в код, которая нихуя не делает 4 Часть: Фиксим и оптимизируем - Ну и всё, а "что вы хотели блять, это начало, для новичков, а остальное читать в 9000 страничных книгах по графике, математике и C++"
@netjoker10002 жыл бұрын
@@comachine да поxyй все равно ютуб закроют наверно(