24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Рисуй треугольник! Треугольник сам себя не нарисует!
Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси. Добро пожаловать. Снова.
Какие-то остальные ссылки: полезные книжки по комп. графике, какие-то полезные исходники/библиотеки, статьи, презентации и прочее - думаю стоит добавлять по ходу треда. В шапке, на мой взгляд, должна быть общая информация без какой-то конкретизации.
Насколько я понимаю, все серьезные геймдевелоперы перевелись, тред создан зря. Но если нет, то такой вопрос: какую версию используете на коммерческих проектах? Я вот сижу на 3.2 и думаю — не слишком ли жирно? Алсо, на говнокарты от интел уже завезли нормальные драйвера?
>>195369 >6 лет назад Да кажись вообще 7-8. Но моя стационарная пека больше не поддерживает. При этом комфортно играю на ней в игры до 2011 включительно на средне-высоких. Среди новых ААА игр с йоба графонием довольно мало годных, на мой взгляд, так что еще пару лет можно не апгрейдить. Я к тому, что среди ца, людей с такой же точкой зрения может быть довольно большой процент, только пеку они купили не в 2008или 2009, не помню, ка к я, а на год раньше.
>>195381 > В нем обратная совместимость будет? НЕ-БУ-ДЕТ >>195378 > Вот выкатят Vulkan, и OpenGL станет legacy весь. Для каких-то мегасложных вещей, игре те же, вполне себе да. А для простого будет хватать и старого ogl'a.
Перекачусь-ка я сюда. Пытаюсь пилить движок на с++ сразу под браузеры. Хочу сказать, что Emscripten пока что довольно сырая штука. В GLFW половина функций не работает. Наверное перепишу под GLUT.
Сегодня весь день пытаюсь запилить pointer lock. Пока работает только в полноэкранном режиме. И glfwSetMousePos не работает, видимо, придётся обрабатывать событие mouse move (на десктопе я привык просто получать координаты в цикле и ставить их в середину окна, естественно с выключенным GLFW_MOUSE_CURSOR)
>>195421 На десктопе мне всё давно известно. Портировать готовый браузерный код на десктоп намного легче. Этим я займусь совсем скоро, когда смогу в браузере хотя бы просто БРОДИТЬ по миру.
Я пишу сразу браузерный код. Когда освоюсь в нём, сделаю порт на декстоп - потребуется не больше, чем пара #ifdef (например, в Emscripten для основного цикла есть своя функция, а десктопном варианте будет стандартный while (running) { ... }).
Например, сейчас я выяснил, что GLFW не очень хорошо поддерживается емскриптеном. Скорее всего перепишу на [free]GLUT/SDL. Не придётся делать это потом, когда будет уже много кода.
>>195442 Вторую. Третья не работает, опять же, хотя поддержка есть.
Короче, я посмотрел эмулятор GLFW в емскриптене - на многих функциях просто заглушки. В HTML5 невозможно установить позиуию курсора, но я надеялся, что он хотя бы в эмуляторе имеет промежуточные переменные.
Придётся как-то преобразовывать абсолютные координаты захваченного курсора (они могу расти бесконечно) в координаты относительно последней обработки. Пошёл смотреть исходники всяких движков, портированных на webgl
>>195446 Всё, решение найдено. Надо обрабатывать событие HTML mousemove (через API эмскриптена). Там есть movementX и movementY, содержащие значение относительно предыдущего такого события
Поясните пожалуйста. Есть у меня 3д координаты фигуры. Я умножаю каждую вершину(допустим, без шейдеров), как в обычном пайплайне, на матрицы. Scale->Rotate->Translate->View->Projection. В итоге имею 4вектор, в котором последняя координата - флаг. Теперь я должен рисовать эту вершину, используя первый и второй элемент(Х и Y)? Получается, третий элемент вообще не используется теперь?
>>195492 Четвёртая координата - это глубина. Используется для отсечения невидимых поверхностей. Пока что автоматически, вручную ты будешь ей оперировать, например, при реализации прозрачности.
>>195492 Вообще, ты не прав. После умножения вершины на матрицы модели, вида и проекции у тебя по прежнему вектор положения в трёхмерном пространстве, только уже относительно камеры. Используя 3 координаты и глубину видеокарта уже рассчитывает положение на экране.
Народ, поясните за это дерьмо Установил себе вижуал студио, попытался в нём запилить лабораторку из универа - нихуя опенгл не пашет. Попытался запилить на Qt - та же хуйня Ругается или на библиотеки, или я даже хуй знает на что
Что там надо поставить чтоб оно нормально блядь работало без всяких выебонов?
>>195527 там всё на хохляцком в двух словах - треугольник, у которого цвета меняются и идут градиентом от одного угла к другому (разноцветный треугольник)
>>195576 Утверждается, что можно в одном треде контекст отпустить, в другом принять и рисовать. Но что-то с такой системой заморачиваться неохота, даже для теста.
Подскажите по поводу выделения памяти под массивы вершин. Добавил в сцену поддержку нескольких объектов. Все они хранят вершины в одном массиве. При добавлении вершин в массив хочу увеличивать его realloc'ом. Вроде как должно избавить от фрагментации памяти, да и на видеокарту так эффективнее отправляется. Но меня беспокоит скорость перемещения данных при realloc'е.
Массив элементов для каждого объекта пока отдельный, потому что я не нашёл, как можно отрисовать только несколько элементов из массива. Это вообще возможно?
В целом, подскажите, как лучше выделять память и хранить эти данные.
>>195620 Я же написал >Вроде как должно избавить от фрагментации памяти, да и на видеокарту так эффективнее отправляется. Да чего эти массивы, по-твоему, придумали?
>>195623 Я и говорю байтоеб. Между тобой и железом еще сидит драйвер, со своими понятиями. Вот ты думаешь дал ему указатель на данные в ram и они потекли по шине в vram? Нихуя. Пока не скажешь glFinish или SwapBuffers, драйвер имеет право курить бамбук. Все зависит от реализации.
ОБЪЯСНИТЕ, МНЕ, БЛЯДЬ, МОЛЮ!!! ПОЧЕМУ ФУНКЦИЯ GLSL noise1 ВСЕГДА(!)АБСОЛЮТНО ВСЕГДА ЁБ ЕЁ МАТЬ(!!!!!!) ВОЗВРАЩАЕТ 0??????????? ЭТО ЖЕ ШУМ, ОН ДОЛЖЕН БЫТЬ РАЗНЫМ, ПИЗДЕЦ КАРОЧЕ! КАК СДЕЛАТЬ?????
>>195718 На примере перлин нойза из флэша помню, что в перлин нойз нужно передавать любое число, для целей рандома. Возможно у тебя похожая ситуация и тебе надо в какую-то глобальную переменную записывать какое-то псевдо-случайное число.
>>195728 У меня есть переменная, которая содержит в себе прошедшее с запуска программы время. Она может подойти как параметр. Осталось передать его в функцию, которая не работает.
>>195729 Это спецификация. Кто как хочет так её и реализовывает. Не хочет реализовывать нойз - не реализует. Вендор железа сам решает и никому не отчитывается.
>>195766 > Вендор обязан реализовать то что входит в объявленную им поддерживаемой версию стандарта. Пидарашьи вопли мамкиног опетуха. Иди и реализовывай. Я уверен, что ты даже на стажера в н-видиа не пройдешь.
>>195846 Иначе вендор пиздит про поддерживаемую версию. Потому что версии определяются в основном именно принятием в них расширений. Сверх версии - пожалуйста, пили свои glYOBAStreamSparsedDataArrayBufferPointers.
В директхуе все просто? А сколько не-железячников в нем участвует? Точнее если не мелкомягкие, то кто?
>>195852 Очередной типичный СНГ-максимализм из ничего. Вендор никому ничего не должен. И как может реализовать стандарт, так и реализовывает. Придумывая свои ext_ и прочее. Он тебе ничего не должен. Поэтому у нас и нет нихуя. Что всякие пидарасы вроде тебя не могут в рационализм. А хотят всё и сразу. НИ ОДНА ВИДЕОКАРТА НИКОГДА НЕ ПОДДЕРЖИВАЛА ВЕСЬ ВТАНДАРТ! НИКОГДА!
>>195854 Но тогда это означает, что оборудование тупо не соответствует стандарту. Вот представь себе, ты купил мышку, вполне норм на вид, заводится с обычным HID-драйвером. А взяв в руку понимаешь, что у нее оси перепутаны. Кагбе на 90 градусов свернуты. Лезешь на сайт производителя, драйвер оттуда ставишь, получаешь тупые свистоперделки "100500 функций по нажатию на среднюю клавишу при ритмичном пошатывании колесика и попердывании в микрофон", а с осями проблема никуда не девается. Что это такое? КО-КО-КО-ПРОИЗВОДИТЕЛЬ-МНЕ-НИХУЯ-НЕ-ОБЯЗАН-БУДУ-РАБОТАТЬ-ТАК или производитель таки налажал? Реально у меня такая мышка лежит, и к сожалению была распакована слишком поздно, чтоб вернуть в магазин.
Подозреваю, что ты в основном насиловал встроенные видеокарты в ноутах, там риальне всякие уродцы бывают, чего только стоит вообще идея разделяемой оперативки. А одно время даже на каких-то игорях писали "mobile-видеокарты не поддерживаются".
>>195857 > оборудование тупо не соответствует стандарту Манямирок абосраташа-юнити-петуха лопнул. Если я тебе скажу, что на консолях еще на asm пишут и железо гавняное, что приходится извращаться еще так. И на боксе и на пс3. Всё консольное железо и видеокарты - полное гавно. Было есть и будет. _Boris Batkin at Naughty Dog_
>>195865 Не буду сомневаться, что писать под сосноли процесс в принципе изъебистый и еще наполовину анально огороженный вендорами. Изъебистость его в основном вызвана тем, что 1) у каждой сосноли свой фиксированный набор железа, и если девелопер собирается выпускать игоря сразу на всем что под руку попадется, то ебля его кодомакак с кучей железа где у каждого гпу свои тараканы разумеется обеспечена; 2) желание запилить графон круче чем вчера, но на том же говне мамонта, что и позавчера, и это пожалуй основной генератор секса.
>>195446 Ебать ты обосранец. Думаешь, кто-то будет играть в твоё говно в браузере? Нахуй тащить в браузер неприспособленные для этого вещи? Может, мне насрать тебе на лицо потому, что сейчас модно так делать среди тупорылых макак? Пиши нормальный, оптимизированный код под десктоп. Нет блядь, я сожру гигабайты оперативки и высру говно с графоном хуже, чем в 1997 году, при этом это говно будет тормозить сильнее третьего крузиса, но зато ЕБАТЬ Я МОДНЫЙ ДЕВЕЛОПЕР У МАМЫ, ТРИДЕ, В БРАУЗЕРЕ, СМАТРИТИ ВСЕ!!!11 Веб зашёл в тупик в тот момент, когда js-макаки внезпно решили, что они тоже у мам программисты и устроили пир во время чумы, запихивая в браузер абсолютно всё говно, не приспособленное для этого.
>>195619 Ты ебанутый? Что ты там оптимизируешь, блядь? Очнись, нахуй, твой говнокод транслируется в жс-дрисню, это говно по определению не может быстро работать, там нечего оптимизировать.
>>195874 Луддит сука штоле? Вебгл есть, значит кому то это нужно. Само 3д в браузере тормозит не больше чем на десктопе, узкое место это жс, т.е. физика, а она не нужна для браузеродрочилен. В итоге получаем идеальную мультиплатформу, не нужна ни анальная жава, ни моно, ни анус твоей мамки - только браузер, а он стоит на любой микроволновке и на радость детям выводит трехмерные кубы прямо по соседству с вкладкой порнотьюба. Прогресс не остановить, мудак ты тупой.
>>195885 >трехмерные кубы >прогресс Проснись, ты обосрался. Массивы вершин, текстуры хранить/сортировать/обновлять ты где собрался? Не в тормозной js-дрисне? Или ты думаешь, что все данные сразу же волшебным образом попадут в гпу? Это говно не нужно никому, кроме мамкиных отрисовщиков кубов и цветных треугольников, и прогресса в этом не больше, чем в пожирании говна только потому, что кто-то заикнулся, что так модно.
>>195887 Разуй глаза, в соседнем треде обсуждают уе4 где сцена БЕЗ ВСЕГО дает 10 фпс и это считается нормальным, плюсы ёба, безграничные возможности. А человек с мозгами сможет написать быстрый код и на жс. Никто не говорит что браузер не потянет крузис 4, такие игры для веба нет смысла пилить. Зато для индипараши как замена флешу - то что надо. Пиздуй на порталы популярных вебжл либ и смотри примеры, диванный кармак блядь, там отнюдь не одни кубы показывают и нихуя не тормозит.
>>195874 >я сожру гигабайты оперативки >говно будет тормозить сильнее третьего крузиса >>195876 >твой говнокод транслируется в жс-дрисню, это говно по определению не может быстро работать Сыкнул на вас, на таких опущей, что в 2015 году не слышали про Asm.js и WebAssembly
>>195894 Спустил тебе на лицо, а потом в туза выебал. Что только не придумают скриптомакаки, лишь бы не учить нормальные языки и при этом ощущать себя нормальными программистами. Ассемблер в браузере - это как подрочить, стоя на одной руке вверх ногами, и кончить себе в рот при этом. Круто, конечно, молодцы ребята, но нахуй никому не нужно, кроме пары конченых извращенцев.
>>195885 >Само 3д в браузере тормозит не больше чем на десктопе, узкое место это жс, т.е. физика, а она не нужна для браузеродрочилен. Кстати, физику переносят на GPU с помощью шейдеров. >Никто не говорит что браузер потянет крузис 4, такие игры для веба нет смысла пилить. Вопрос времени.
>>195897 Тащемта жаваскрипт уже давно комилируется всеми браузерами на лету в нативный код. В противном случае у тебя бы даже ютуб не запустился. Жаваскрипт код скомпилированный Emscripten работает в некоторых браузерах всего в 2 раза медленее С++ кода и быстрее жавы.
>>195904 Пиздец ты тупой. Иногда даже страшно становится от того, какой беспросветный пиздец творится в головах js-макак. Конечно, ютуб работает именно на джаваскрипте, который на лету компилируется в машинные коды и проигрывает тебе видео. Не сомневайся. Даже не задумывайся о том, что сервер шлёт сырые данные, которые затем проигрываются ядром браузера с помощью кодеков, написанных на сишке. Жаваскрипт работает медленнее всего в два раза, не сомневайся. Даже не задумывайся о том, как оно всё устроено внутри, как работает компьютер, зачем нужен кеш процессора и что такое браузер, что такое блокирующий/неблокирующий ввод/вывод, какие вообще могут быть узкие места у программы. Вообще старайся не думать, думать вредно, пусть разработчики браузера за тебя думают, они умные дяди. Просто пиши на жаваскрипте, думать не надо.
Тем временем подведу итоги треда: >Пидарашьи вопли мамкиног опетуха >Очередной типичный СНГ-максимализм из ничего >Манямирок абосраташа-юнити-петуха лопнул >Ебать ты обосранец >Ты ебанутый? >Проснись, ты обосрался >Сыкнул на вас, на таких опущей >Спустил тебе на лицо, а потом в туза выебал >ты очень тупой >Пиздец ты тупой
>>195718 Ее никто не реализует. О тебе заботятся, дурилка глупая. Чтобы ты не падал в обморок когда, не только текстуры везде по разному накладываются, но и нойз имеет разную реализацию и хитрые баги. Сделой его сам, это просто.
Мой видимый прогресс за более чем сутки невелик - сделал текстуры, и то пока всё захардкожено, а ы консоли WebGL сыплет сообщениями. Зато изнутри отрефакторил код, разбил на классы. Теперь новые возможности вводить намного проще.
>>196173 То есть ты серьезно думаешь, что если ты напишешь на С++, а потом переведешь в жс, то оно будет работать быстрее, чем если б ты сразу на жс писал?
>>196156 В ams.js >>196178 Так-то да >>196173 JS можно оптимизировать. Можно даже asm.js-код вручную писать. Но это очень муторно. Вот пример asm.js кода: https://gist.github.com/jeresig/5293608 Как на ассемблере писать вручную. Вдобавок, в дальнейшем, если WebAssembly победит asm.js, можно будет его использовать как целевую платформу - код не изменится >>196179 Неинтересно
>>196187 А давай я буду делать то, что мне нравится? Как тебе? >>196186 Это подсказка компилятору. Почитай ты уже про asm.js, Сёма. Весь тред своими глупыми догадками засрал.
>>196180 Ну будет твоя параша компилироваться сразу в псевдо-байткод, охуеть теперь. Получишь speedup в 20-30%. Учитывая то, что оно все еще запускается на виртуальной машине, использует сборщик мусора и т.д., твой движок будет супер тормозным. Это конечно не мое дело, каждый дрочит как хочет, но ты реально долбоеб.
>>196191 >asm.js >компилироваться сразу в псевдо-байткод >оно все еще запускается на виртуальной машине >использует сборщик мусора Твоя тупизна непробиваема
>>196195 В последний раз отвечаю тебе, даун, только чтобы у читающих не возникло сомнений в твоей тупизне: http://asmjs.org/faq.html >Q. Does the fact that asm.js is JavaScript mean you can't get predictable performance? A. An ahead-of-time (AOT) compiler for asm.js can generate code with very predictable performance, because validated asm.js code is limited to an extremely restricted subset of JavaScript that provides only strictly-typed integers, floats, arithmetic, function calls, and heap accesses. >Q. Can asm.js serve as a VM for managed languages, like the JVM or CLR? A. Right now, asm.js has no direct access to garbage-collected data; an asm.js program can only interact indirectly with external data via numeric handles.
>>196180 > https://gist.github.com/jeresig/5293608 Как на ассемблере писать вручную. Это по-твоему ассемблер? Обычный js-код где немного поебывают байты. Могу написать x / 2, а могу x >> 2, но от этого код ассемблером не становится. Раздел где делают игры, я ебал.
>>196201 поскольку это с++ транслированный в жс, то теоретически можно сделать обратное в жс движке браузера для оптимизации. в этом собственно вся суть
>>196197 Ну ты реально конченый чмошник. С твоей же ссылки: >Q. Is asm.js a new language? >A. No, it's just (a subset of) JavaScript.
>asm.js code is limited to an extremely restricted subset of JavaScript that provides only strictly-typed integers, floats, arithmetic, function calls, and heap accesses
А если вкратце, то ПСЕВДО-БАЙТКОД. Который потом исполняется на V8 или любом другом интерпретаторе.
Ну и еще: >Q. What kind of performance benefits can I expect to get with asm.js? >A. It's early to say, but our preliminary benchmarks of C programs compiled to asm.js are usually within a factor of 2 slowdown over native compilation with clang. We will publish more benchmarks as we collect them.
Короче, удачи с написанием производительного движка, хуесос.
>>196204 >А если вкратце, то ПСЕВДО-БАЙТКОД. какой еще байткот? цитата значит только то, что 99% жаваскрипт функций использовать низзя, иначе это будет "ненастоящий" asm.js. Вот и все.
>>196214 Гугли как работают интерпретаторы, и тогда поймешь почему эту хуйня — это типа байткод. У них даже в факе есть соответствующий вопрос: >Why don't you specify a bytecode syntax instead of strange JavaScript idioms?
>>196215 Их ебанутый фак составлен в аспекте ОЛОЛО МЫ ПРИДУМАЛИ НОВЫЙ ЯЗЫК ДЛЯ ВЕБА. хотя на самом деле это просто вспомогательная библиотечка для компилятора с++ в жс
Пока вы тут срётесь, я начинаю реализовывать направленное освещение. Пока что оно намертво забито в шейдер. Сейчас сделаю получение данных от приложения, запилю класс Light::Sun.
Кажется, я не учитываю положение и вращение объекта. Проблема в том, что я не знаю, что передавать в шейдер. Я сначала получаю матрицу модели-вида-проекции всей сцены (относительно камеры), потом для каждого объекта смещаю её, затем поворачиваю. Т.е. как таковой "матрицы обекта" у меня нет, в его методе draw я произвожу операции над глобальной матрицей, а не единичной. Может кто-то подсказать, что в таком случае передавать в шейдер? Может я вообще всё в неправильном порядке делаю? Код: http://pastebin.com/D3Z4wrbd
Получается, я освещаю объект так, будто он находится в начале координат и не повёрнут. Значит мне надо умножить нормали на матрицу модели-вида этого обекта?
>>196259 Я сейчас немного занят, чтобы копаться в твоем коде, поэтому я просто выкладу как делал я, возможно оно тебе поможет. И так, матрица которую передаем в шейдер: m_WVPMatrix = m_projMatrix m_camera->getViewMatrix() m_worldMatrix; Тут: - матрица проекции m_projMatrix = glm::perspective(45.0f, 1.33f, 1.0f, 10.0f); как и у тебя, походу; - матрица вида (камеры), считается так m_viewMatrix = glm::lookAt(m_position, m_target, m_up); ты, как я понял, крутишь камеру вручную матрицами - мировая матрица (положение объекта в мире, для каждого объекта своя в отличие от двух первых) m_worldMatrix = trans_matrix rotZ_matrix rotY_matrix rotX_matrix scale_matrix; соответственно матрицы из которых она собирается: --- масштабирование glm::mat4 scale_matrix = glm::scale(glm::mat4(1.0f), m_scale); --- поворот glm::mat4 rotX_matrix = glm::rotate(glm::mat4(1.0f), m_rotation.x, glm::vec3(1.0f, 0.0f, 0.0f)); glm::mat4 rotY_matrix = glm::rotate(glm::mat4(1.0f), m_rotation.y, glm::vec3(0.0f, 1.0f, 0.0f)); glm::mat4 rotZ_matrix = glm::rotate(glm::mat4(1.0f), m_rotation.z, glm::vec3(0.0f, 0.0f, 1.0f)); --- перенос в пространстве glm::mat4 trans_matrix = glm::translate(glm::mat4(1.0f), m_translate);
Надеюсь, чем нибудь тебе это поможет, удачи тебе анон.
>>196271 а, думаю что и так очевидно, но на всякий случай - m_scale, m_rotation и m_translate - это glm::vec3 содержащие информацию про масштабирование, поворот и сдвиг объекта по/вокруг осей х, у, z соответственно
>>196271 Спасибо! Посмотрев твой код, я понял, что можно вместо translate относительно матрицы MVP сделать translate относительно единичной,а потом MVP умножить на результат (надо бы освежить в памяти теорию по матрицам).
Начал задумываться над архитектурой движка. Сейчас есть классы Object и Camera, оба наследуются от Transformation - он хранит положение и вращение относительно некоторой начальной точки (сейчас только начало координат, но потом будет возможность указать любой другой transformation, чтобы объекты могли прикреплятьс друк к другу. например, камера позади персонажа).
Непонятный для меня момент - это шейдеры и шейдерные программы. Я уже столкнулся с необходимостью в нескольких шейдерных программах (текстурированные объекты, цветные объекты, интерфейс). К чему должна относиться шейдерная программа? К модели? Как тогда быть с интерфейсом, который моделью являться не будет?
Пока что планирую захардкодить три упомянутые шейдерные программы, реализовать интерфейс, добавить сложности в сцену, и после уже решить. Но буду рад любому совету. Также подскажите несложные движки с хорошим кодом, чтобы посмотреть, как там сделано.
Пытаюсь сделать зеркало (большой прямоуольник на скрине) с помощью stencil-буфера. Почему отражённые объекты рисуются и за пределами зеркала? Код рендера: http://pastebin.com/0ZTv5XKJ
>>196685 >у тебя будет 1.5 fps У меня 60 фпс, и то это искуственное ограничение. Что я делаю не так? Не занимаюсь преждевременной оптимизацией? >рискованная часть Ты не любитель тестов, да?
>>196701 Скринов полон тред. Я к тому, что пока не даже сцены как таковой. Об оптимизации тут и речи быть не может. >Ты хотел сказать render sandbox'ов? Я имел ввиду автоматизированное тестирование. Обычно я пишу тесты до кода, но опыта в С++ и в игровых движках у меня мало, и я даже не представляю, как можно их тестировать. Но планирую приступить к написанию тестов как только архитектура более-менее устаканится
>>196617 Я чайлды сделал так - Transform хранит родителя, при доставании координаты складывает с родительской, и так рекурсивно пока не упрётся в конец дерева. Для шейдеров/текстур запили объекта материала, как в юниче. Для интерфейса вхардкодь какой-нибудь убершейдер с ползунками, лол.
>>196713 >архитектура движка >классы >наследование Думаю, это типичные вопросы, возникающие у неопытных в плюсах и геймдеве разработчиков. А я и не претендую - я пишу сейчас это чтобы кресты выучить.
>gamedev >TDD Я не предлагал использовать этот подход в гд. Я спросил, как можно автоматизировать тестирование неизолированных сущностей, которые юнит-тестированию не поддаются.
И таки я вижу применение TDD в геймдеве - например, если стоит задача оптимизировать какое-томесто в движке, то первым делом следует написать тесты производительности (а как иначе ты её замеришь?)
>>196718 >Я чайлды сделал так - Transform хранит родителя, при доставании координаты складывает с родительской, и так рекурсивно пока не упрётся в конец дерева. Надеюсь, ты сохраняешь значение, чтобы если у объекта несколько дочерних, для каждого не пересчитывать >Для шейдеров/текстур запили объекта материала А в формате md5mesh шейдер указывается для модели. Правда этот формат и не умеет хранить материалы. Так что, наверное, так и сделаю, как ты сказал.
>>196721 В тестирование на С++ я не вникал. Утилит полно, например, классическая Check. Надо смотреть гайды по конкретному инструменту. А по общем принципам тестирования целые книги есть.
Посоны, отвлекитесь ненадолго от жарких споров и подскажите, есть ли смысл на десктопе юзать opengl es 2 вместо opengl 2.1? Пишу на некроноуте, который поддерживает максимум эти версии. Игрушка несложная будет, в 2d, в принципе, много фич мне и не надо. Хочу получить core профиль без deprecated функционала. Как обстоят дела с языком шейдеров у gles 2? Сильно отличается от opengl 2/3? Стоит оно того или нет?
>>196756 GLES 2.0 суть то же самое, что GL 4.0 кокрастыке без депрекейтед фич. Все ограничения GLES 2.0 легко обходятся. GLSL такой же, единственное, что нужно - это писать точность переменных в шейдерах (highp, lowp и т.д), а так никаких отличий. Единственное, в чём я сомневаюсь - взлетит ли глес2 на винде, ни разу не пробовал ещё.
>>196779 >DX9 Для меня кросс-платформа во главе угла, сам под линуксом прогаю. Под шином планирую только компилять шин-версию. Под линуксом ES работает, видеокарта - встроенная Intel. >>196761 А я про винду и не задумался даже, под линуксом всё норм взлетело сходу, думал, что и под шином будет норм. Надо будет попробовать.
А glViewport - дорогая операция? Можно использовать её на каждый элемент интерфейса прямоугольной формы, или лучше для производительности делать весь интерфейс в одном вьюпорте?
>>196842 >Почему тогда не убрали glViewport из OpenGL ES? Прост шоб был. >Все остальные матричные операции выкинули И хорошо. Программируемый пайплайн наше фсё.
Сделал прикрепление объектов сцены друг к другу через, добавив произвольную базовую матрицу трансформации объекта. Получил таким образом полноценную камеру третьего лица.
>>197082 Завезу, когда сделаю скелетную анимацию, ибо сейчас надо разобраться с мешами и обектами - понять, кому какие данные нужны для рендеринга, и на основании этого строить классы и их отношения.
Я вот заметил, что кости скелетной анимации и объекты сцены - суть одно и то же: имеют родительский объект и дочерние, матрицу трансформации относительно родителя и локальную. Стоит ли их делать одной сущностью (или потомками одной сущности)?
Почему код, работающий на моих 3 машинах не работает на других? Сделал подарок бате на день рождения, протестировал у себя и на своём планшете, прогнал через gDEBugger - всё отлично, за исключением deprecated функций. А у бати оно не запускается, пиздец! gluErrorString охуеть какой информативный метод. Недопустимая операция, вот это да! А почему gDEBugger ничего не ловит? Непонимат.
>>197534 Спектр возможных причин очень широк и выловить такую хуйню, судя по моему опыту, очень сложно. У меня, например, была такая ситуация: в одном месте я вместо glGenVertexArrays написал glCreateVertexArrays, которые совершенно идентичны за исключением того, что последнюю ввели в стандарт только в 4.5 версии. А я таргетил 3.2. Поэтому неудивительно, что почти на всех компах, кроме моего, моя поделка крашилась. И даже тут интересно: мой комп поддерживает только 4.2 версию
>>197539 Отправил версию, в которой пишется номер строки, на которой нашлась ошибка. Алсо, нельзя ли настроить gDEBugger, чтобы он проверял совместимость с другими версиями OGL? Было бы здорово.
Ковырял opengl несколько лет назад, сейчас задумался над парой проектов и возник вопрос. Меня интересует исключительно 2d графика в обоих проектах. Стоит ли из-за этого вкурить современный ogl или взять какое-нибудь простое средство уровня sdl/sfml и работать на нём?
>>197598 >Стоит ли из-за этого вкурить современный ogl >или взять какое-нибудь простое средство уровня sdl/sfml А где связь? sdl/sfml создают тебе окно с контекстом и обрабатывают ввод. А версия gl зависит от того, что поддерживает видеокарта и какие драйвера стоят. Библиотеку я бы посоветовад glfw. А ogl конечно бери 3.0+, уже не осталось, наверное, компов, которые хотя бы его не поддерживали. Хуле с легаси ебаться
>>197601 У сдл/сфмл есть свои упрощенные функции для рендеринга, вот где связь.
>>197598 Начни с одной из двух библиотек. Если возможностей окажется мало, то сверху напишешь свой OpenGL-рендерер и будешь его вызывать. Можешь сразу написать класс-обертку над sdl/sfml-рендерером и делать все через нее, чтобы потом легче было переходить на огл.
>>197741 Если тут не хочешь выкладывать, можешь связаться со мной в токсе https://tox.chat/ мой ID: 37C1675B1ECC30BF7C09714E5FCE11DFA998EB3641F9816C1D621BF261DDF85711D3F8AAC9E7 Отпиши тут, если напишешь, на всякий случай
Посоны, такая тема. Вот есть дефолтный фреймбуффер в GL, он подгоняется под размер окна. Я пилю игру на некроноуте, и когда окошко развернуто на максимум, начинает неслабо подтормаживать, ФПС падает с 140 до 50. Вопрос - можно ли управлять размером этого фреймбуффера? Например, чтобы высота всегда была 600, а ширина подгонялась под ratio. И чтобы итоговая картинка как бы ресайзилась и подгонялась под окно. Можно ли так сделать? Использую голый glfw.
У бати на ноутбуке программа отваливается на вот этой строчке: glGenBuffers(1, &this->VBO); Отваливается с GL_INVALID_OPERATION. У меня на этой строчке она не отваливается. В чём может быть проблема?
>>198233 Запросто, если у него старая видеокарта или банально не стоят дрова - может быть доступна только версия 1.1, а VBO появились в 1.5 Если так, то ничем не поможешь, в 1.1 только deprecated функционал, glBegin/glEnd, display lists.
Вкатываюсь с вопросом. Есть некробук eee, с процессором N450. Официально заявлено, что это поддерживает OpenGL 1.5, а glxinfo говорит "Mesa GL 2.1". То есть Mesa мне сэмулирует то, что есть в OpenGL 2.1 на железе, которое в него не может, так? И интересно, на какую глюкавость можно рассчитывать?
http://mrdoob.github.io/three.js/ Кто все эти люди? Для чего они делают проекты с таким-то графонием? Им за это платят? Почему в этом треде нет ни 1 картинки, похожей на какую-нибудь из тех проектов? Да что там этот тред, даже дети из унреал и юнити-тредов не делают ничего такого! Что движет этими людьми, делающими графоний на чистом опенгл под браузеры?
>>199133 Зашел в одну демку. Кубики и шарики цветные, для 2001 года довольно красиво. Тормозит только сильно. Зашел во вторую - моментально были отожраны 2гб оперативки, комп вошёл в ступор и завис, пришлось ребутаться. Ну и нахуй нужно такое 3д в браузере?
в чём писать? на вижуал студио нихуя не понятно, на кьютэ ругается на glut какой-то можно эту херню как-то поставить и чтоб оно без проблем работало, или всё через жопу как всегда?
>>200568 Что значит специально? Я могу и свои загрузить, вон как выше видео: несколько коробок соединённых проёмами и всё. А квейковские карты я беру как эталон. Если они работают правильно и загружаются, то значит я не ошибся.
Рисовал треугольники еще на второй версии. Сейчас решил вспомнить молодость и нихуя не понятно. Зачем pushmatrix выпилили, например? Самому теперь эту херню пилить?
>>201357 Яснопонятно. Я бы на твоем месте (хрен когда доберусь даже до такого уровня) попробовал свежий формат карт от Валв. В кишках тот же bsp, но побогаче будет.
>>201444 Да bsp это, видимо, структура для хранения данных. Хочется ещё разобраться с форматом карт в думе 3. Там уже порталы юзаются, а не заранее рассчитанный pvs.
Судя по всему сделал столкновения. Проблема опять была с системой координат. Теперь надо допилить скольжение вдоль стены, а то сейчас как-будто бы за стенки/пол зацепляешься. Добавить гравитацию и может быть прыжки.
>>202092 А. Это цвет которым буфер очищаешь. Я эти "дыры" тоже заметил сразу, особенно когда камеру быстро вращаешь. Почему так происходит я не могу точно сказать. Скорее всего из-за того, что процессор не может достаточно быстро отсылать команды видеокарте чтобы та всегда была нагружена и из-за этого могут быть такие дыры. Думаю можно решить или как-то сгладить этот косяк тем, что я буду запоминать в каком листе дерева я был на предыдущем кадре и при вычисления новой позиции я будут сравнивать со старой. Если они совпадают то и считать видимость заново не имеет смысла.
>>202103 Мда, вот это, как мне кажется, плохо. А сколько времени уходит на построение? Может не так уж и дорого каждый кадр его делать? Да и обходились же как-то одним потоком раньше.
>>202115 > А сколько времени уходит на построение? Может не так уж и дорого каждый кадр его делать? Да и обходились же как-то одним потоком раньше. Всё происходит крайне быстро. Я имел ввиду то, что видеокарта работает гораздо быстрее процессора и из-за этого он не может за ней угнаться.
>>202088 Как пилить BSP уровни? Только в хаммере? Блендер не может их экспортить? Всегда загружал octree и в хуй не дул, а тут такие возможности! Тоже хочу BSP. И как у этого формата с открытыми большими пространствами? Нужно будет подгружать отдельные куски, как в первом полураспаде?
Аноны, в универе предложили несколько тем, связанных с рендерингом. Некоторые из них кратко: запилить сглаживание для объемной визуализации (3д-текстура); антиалясинг для depth peeling; исследовать инструментарий или запилить свой для работы с блоком шейдеров. Для меня интересно разобраться в этой теме, но я пока крайне поверхностно шарю в этом. Вопрос в том, с чего начать изучение рендеринга? Если я просто научусь работать с OpenGL по туториалам, то хватит ли мне знаний, чтобы уверенно разбираться в этом и нормально запилить задания? Или нужно более глубокие знания OpenGL? Или вообще стоит начать с каких-то вообще азов рендеринга? Если так, то какие ресурсы или книги можете посоветовать для этого?
>>204005 Хера се у вас универ, я прям завидую. Насчет изучения рендеринга, то я бы посоветовал начать с изучения rendering pipeline (можно даже начать со статьи в википедии https://en.wikipedia.org/wiki/Graphics_pipeline, и дальше по ссылкам). И параллельно делай туториалы, да. И параллельно читай спецификации (например OpenGL https://www.opengl.org/registry/doc/glspec43.core.20120806.pdf . Да, спецификации написаны довольно сложным языком, но если сможешь осилить и понять, что там написано, то это будет громадный бонус). Также учи матан: матрицы, векторы, вот это все. По темам, гугли whitepapers: много умного народа уже наверняка глубоко исследовала эти темы, так что сначала полезно изучить все достижения в этой области, прежде чем пилить свой велосипед.
>>204995 > Почему когда я делаю их порядком тысячи, начинает тормозить? Юзай инстансинг.
> А еще, что бы изменить размеры куба, надо же вершины менять? У каждого куба есть матрица модели. Там ты можешь через неё менять размер, угол поворота и др.
>>207300 Первая и вторая ссылки вроде норм. Я по этому начал изучать: http://www.learnopengl.com/ Там и про сборку библиотек написано, и про пайплайн с шейдерами написано, и за математику вроде годно поясняется, и в конце уроков даже небольшие упражнения на закрепление материала есть.
>>208314 > Я же должен для каждого куба бинд делать? Оно несколько иначе работает. Биндишь текстуру и рисуешь свои кубы. То есть текстура биндится один раз в определённый слот я про glActiveTexture перед отрисовкой.
> Получается для каждого класса я буду делать свой VAO? Типа для куба, треугольника, и.т.д? Не. VAO помогает тебе устанавливать атрибуты для рисования glEnableVertexAttribArray, glVertexAttribPointer. То есть есть смысл именно в том, что ты объединяешь при помощи этого VAO меши с похожими атрибутами.
>>208190 > освещение P.T. Там дохера всего. Если брать только core, то это physics based shading + global illumination. Остальное уже всякие SSAO и прочее. Если ты не работал и не знаешь, как обстоят дела с артом в ААА на западе, то я тебе поясню: шейдера и постэффекты делают художники, а не программисты. Их не копипастят из интернета. Программисты только оптимизируют всякое гавно + фичи.
>>208653 Какое же ты быдло обоссаное. Если ты пишешь свой движок, то ты пишешь pbr+gi сам. Если делаешь игру на движке, то всё делает лайтинг/енвайромент артист в редакторе.
Khronos launched the Vulkan 1.0 specification on February 16th, 2016 and Khronos members released Vulkan drivers and SDKs on the same day. Below you will find everything you need to come up to speed on Vulkan and to forge ahead and explore whether Vulkan is right for your engine or application.
>>225786 В плюсовом враппере первый аргумент уйдет, так как это будет метод класса, три пары переменных "количество хреней-указатель на хрени" заменят векторы хреней. Ну и количество аргументов нифига не будет самой большой проблемой при программировании движка на вулкане. Да что же всё так лагает с бета-драйвером? Амуда, пожалуйста.
>>226753 > Да что же всё так лагает с бета-драйвером? Амуда, пожалуйста. А мой видюхи в бета драйверах вообще нету почему-то хотя писали, что вулкан будет работать на видео с огл 4 и выше.
>>242740 ну так Россия же книга по погроммированию с обложкой на которой бесконечной цикл книга по тридэмаксу с обложкой на которой лента мёбиуса книга по пикселарту с обложкой на которой кисточка и палитра
Лол, чёт я нихрена не понял, а как мне не делить вертикальную синхронизацию между всем программами на opengl? Сочетания dx+gl/dx+dx уживаются спокойно друг с другом. Но gl в количестве больше одного стакается с другими, пусть там что мои программы, что чужие игры. Первый пик, всё на gl, второй - три игры на dx.
А в чём суть новых версий gl? Каждая версия это просто некоторый минимум поддерживаемых расширений, или что? Я просто много лет инициализирую gl как версию 1.0, а к всяким шейдерам/хуэйдерам как к расширениям отношусь. По скорости вроде как всё соотвествует чужим программам, никаких недостатков. В чём разница, зачем нужны версии, кроме как чтоб кратко говорить о примерном уровне карты?
>>243912 glew, glm. Ниже не имеет смысл копать. Всё есть в коде этих либ, если захочешь глубоко копнуть. > В чём разница C opengl 2.0 появился программируемый пайплаин. А это +100 человек в отделе рендера и +10000 больше строк кода + шейдеров для норм картинки. Фактически это ёба-монст для графона. OpenGL 5 = OpenGL 1 + тоны расширений от всяких ати-нвидиа.
>>244254 Но ведь для этого не требуется геометрический шейдер вовсе. Не знаю как сейчас, но несколько лет назад геометрические шейдеры были очень тормозные, так как из-за них карте неизвестно заранее сколько геометрии нужно будет рисовать, и использовать их для изменения размеров спрайтов по меньшей мере неэффективно. Так то, спрайты в зависимости от расстояния до камеры можно было менять ещё даже через низкоуровневый вершинный шейдер, который ARB_vertex_program, когда про glsl никто ещё даже не слышал.
>>244279 >из-за них карте неизвестно заранее сколько геометрии нужно будет рисовать >layout (triangle_strip, max_vertices = 4) out; >max_vertices Передаем точку из неё геом шейдер делает парочку треугольников. Выгода. Мимо
>>244490 За openGL никто не следит. Он открытый, микрософтам например не выгодно делать чтоб openGL был каким-то популярным, так как тогда куда большая часть игр перекатится на люниксы или ещё куда, и со всякими нвидиями у них договор какой-нибудь, быть может. Мне кажется дело в дровах. Вот такой баг есть (>>243413 ), например. Я в /pr поспрашивал, у кого-то всё в норме, у кого-то такой же эффект. Помимо этого, OBS не может захватывать программы на openGL. Причём, если запускать те же программы на встроенной карте от интела, всё работает. Что синхронизация в норме, что obs изи захватывает. То есть проблема конкретно в драйвере нвидии, и видимо с быстродействием что-то подобное. А с dx везде всё работает правильно, и захватывается всё как надо.
>>244543 >большая часть игр перекатится на люниксы
Ты такой дегенерат, что просто пиздец. Даже так - пизденящий душу пиздец. Кому твоя ссаная прошивка для роутеров нужна, у которой доля на десктопах - в пределах погрешности измерений?
>>244546 Большая часть не в смысле, что >50%, а в смысле что несколько более крупная доля игр, чем сейчас. Я же написал "куда большая", что говорит конкретно какое значение я имел ввиду. Например 15%, заместо 5%. >Ты такой дегенерат, что просто пиздец. Ага. Я не разбираясь в теме с потолка предположил первый бред который в голову пришёл, по идее то микрософтам вообще может не быть дела до OpenGL.
http://pastebin.com/r0Bd2Yih Что я делаю не так? c# Tao (обертка над GLUT) gl4csharp (обертка над GL) Качество кода, комментов и прочее - говно, ведь я ебаный ньюфаг. Скажите лучше что не так с ГЛ вызовами. По итогу я вижу только заливку и ИНОГДА в центре бывает одна точка.
>>256412 Ну я только начал. Читаю Addison Wesley: OpenGL Programming Guide. Он там уже про 4.3 кряхтит что-то с самого начала и шейдер загоняет сразу же. Сорцов не искал его и посмотрел, как в на офсайте опенгл загружают шейдеры, сделал по подобию.
>>256414 Юзай glGetError после каждого (почти) вызова.
Осторожно: сразу после инициалиации могут быть коды ошибок. Есть смысл ее подергать в цикле в самом начале, пока не вернет GL_NO_ERROR.
В твоей книге, кстати, в самом начале есть пример, как вытаскивать ошибки компиляции шейдеров. Сделай такую штуку у себя. Вообще сделай инфраструктуру для обработки ошибок, потом сам себе спасибо скажешь.
>>256409 >> glEnableVertexAttribArray(0); вот на этом месте какую-то хуйню написал, вместо нуля, который, как я понимаю, ставится в соответствие vPosition шейдера
>>256421 Ну, потому что любой вызов может быть неуспешным. Если вызывать в конце, ты не разберешься потом, какой именно.
Я у себя запили макрос HANDLE_OPENGL_ERRORS, который втыкаю после каждой функции. Он мне в случае чего кидает исключение с именем файла, номером строки и ошибкой. Можны и вызовы в макросы завернуть, конечно.
Аноны, поясните, пожалуйста, мне вот за такую херню. Читаю сейчас тут супербиблию 7 опенгл . Там тип рассказывает, как биндить VAO, сначала биндит буфер, потом VAO и далее: glVertexArrayBinding glVertexArrayAttribFormat glEnableVertexArrayAttrib
Нашел в другом месте, что в более ранних версиях делалось так: glEnableVertexAttrib glVertexAttribPointer
В чем профит первого способа, если он длиннее получается?
Ананасы, подскажите, пожалуйста, почему не заводится. Рисую в image2D, но, первое - не биндится image2d (invalid operation выдает, но вот схуяли, даже в руководстве нет такой хуйни), а второе - в шейдере где-то косяк, но это, мне кажется, уже отсылка к первому. http://pastebin.com/X46RMZ3c
>>259797 http://pastebin.com/7gJQp9Gd Нашел косяки некоторые, исправил шейдер. Мне кажется, что CUDA здесь пизже въедет и без изъебов, но, в общем, теперь выдает Compute shader(s) failed to link. Compute link error: INVALID_OPERATION. ERROR: error(#404) local work size runs out of limitaion
>>259807 Бля, ну и насрал же я тут. Извините. Вот эта залупа уже хочет работать, только вот почему все упирается в ограничение на 1024 элемента (для вычисления, естественно)? Его можно обойти, или для таких случаев использовать OpenCL? Только вот тут поебота - надо будет интероп писать. http://pastebin.com/RjRg02YH
>>259813 NVIDIA не может в человеческий OpenСL, так что не поможет. Есть ограничение на количество потоков (по видимому, 1024, но можно как-то запросить). Делаешь цикл, чтобы каждый поток обрабатывал несколько элементов с шагом в 1024.
Я вот думаю на чем писать свою игру, с одной стороны я неплохо знаю opengl es но с другой стороны он – устаревшее говно и пора бы уже переходить на Vulkan, он гораздо производительней, но и гораздо сложнее и более низкоуровневый, думаете стоит заморочиться и сделать рендерер на вулкане?
>>260003 AMD'шники соснут, потому что с их дровишками OpenGL 4.5 доступен только для HD7000 серии и выше, а у Nvidia от 400 и далее. Вообще, бесит меня политика AMD в плане поддержки железа. Конченая компания.
>>260014 HD 7000 в 2013 вышли. То, что старше, уже дрова же. >>260003 Чтобы сделать движок на Вулкане быстрее AZDO OpenGL, нужно быть готовым маленькие куски переписывать под каждого вендора. Тык этому готов?
>>260021 >Чтобы сделать движок на Вулкане быстрее AZDO OpenGL, нужно быть готовым маленькие куски переписывать под каждого вендора. С какого перепуга? Производительность вулкана выше уже по дефолту так как можно управлять синхронизацией и командными буфферами.
>>259813 Так, продолжаю запускать говнопримеры. В общем, настроил вычислительный шейдер, 1024 элемента, да и хуй бы с ним, тут у меня invalid enumeration валится при использовании glGetTexImage http://pastebin.com/jYZjRXM5
>>260003 > с одной стороны я неплохо знаю opengl es но с другой стороны он – устаревшее говно и пора бы уже переходить на Vulkan По моему ты просто даун. Спецификация Вулкана вышла буквально несколько месяцев назад. Чтобы что-то делать на Вулкане и чтобы это было доступно конечный продукт имеется ввиду как можно большему числу пользователей, пройдёт ещё несколько лет.
>>258652 Не обращай внимания, проходи мимо. Тебе в соседний тред. А здесь сидят те, кто хочет созидать своими руками, а не сосать хуй разработчиков юнити, причмокивая и сглатывая сперму.
>>260477 OpenGL ES 3 Cookbook с нее можешь начать. Там все просто расписано и применимо к OpenGL настольному (хотя у кастрата есть модификаторы точности и прочая хуйня). А вот книгу с начала поста, которая идет офиицальным руководством OpenGL вообще не советую читать - просто каша. Супербиблия неплохая, но для начала тоже не самый хороший вариант, тем более что примеры, которые там приведены рассматриваются крайне скудно и больше времени уделяется на описание API как такового.
КАК ПРАВИЛЬНО РЕНДЕРИТЬ МНОГО ОБЪЕКТОВ? Скажем, у меня есть программа, в которую юзер добавляет новые высокополигональные модели. Чайнички там всякие, к примеру. Как это сделать правильно? Я создал структуру myObject. В ней следующие поля: GLuint gWorld; GLuint VBO; GLuint IBO;
То-есть, юзер жамкает на кнопку. Создаётся массив с вершинами/индексами и заполняются буфферы VBO/IBO через: glGenBuffers(1, &(obj->VBO)); glBindBuffer(GL_ARRAY_BUFFER, obj->VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
Далее в методе отрисовки у меня цикл: for(int i = 0; i < guiObjects.size(); ++i){ // Тут вычисляется WVP матрица, используя уже готовую World матрицу. Matrix4f mat4f = p.GetTrans((guiObjects.world)); // Тут матрица передаётся в единую для всех юниформ переменную glUniformMatrix4fv(gWVPLocation, 1, GL_TRUE, (const GLfloat)mat4f.m);
glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); // Тут биндятся VBO/IBO, у каждого объекта свой. glBindBuffer(GL_ARRAY_BUFFER, guiObjects.VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid)12);
glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); } Вроде должно быть нормально, но начинаются дикие лаги, почти ничего не перерисовывается. Даже, если объект всего один.
>>262044 Всегда возникает ошибка в glGenVertexArrays и glGenBuffers. В гугле написано только, что надо поставить glewExperimental = true, но это не помогает. Что здесь не так?
>>264211 У меня "OpenGL 3.3 API is not available". Это не исправляется никак? У меня около года назад все работало нормально, с тех пор я не трогал опенгл, и все забыл. Взялся заново, а тут такая хуйня. Думал, может проблема с подключением библиотек или еще чего.
>>264214 С путями все нормально, иначе тогда ошибка была бы во время линковки. Бинарник glew32.dll (других же нет?) перекинут в директорию проекта. glewinfo вот.
Короче, решил тут я себе BuGLe подтянуть, вытянул сорцы, значит, вытянул с репа gtk2-devel (сьюзи у меня), и что бы вы думали - а хуй тебе, не гуй. Короче, поебался я 5 минут тут, три семерки вся хуйня. Не стал искать правильный путь - поменял в SConscript'e gldb: have_gtk = True И идут нахуй, все работает сука.
Скажите, пожалуйста, что у меня не так в этом коде. Я уже заебался эти туториалы по 50 раз перечитывать, никак не могу понять, как работают эти злоебучие шейдеры. И туториалов много, так проблема, что везде написано по-разному, что вообще сбивает с толку. И вдобавок ни один из приведенных в них примерах не работает. http://pastebin.com/EU7pQniF
Пытаюсь разобраться с наложением текстур, делая лабу для вуза. Не могу понять как сделать так, чтобы одна текстура натягивалась на несколько полигонов сразу. Не повторялась, а именно чтобы например на квадрате 5x5 лежал один кусок текстуры.
Пока смог только ручками решить эту проблему при генерации прямоугольников с разбиением: для каждого полигона разбиения вычисляются нужные текстурные координаты. Функция на пике.
Но что с остальными примитивами делать я не знаю, их я строил функциями из glu glut, а не своими.
>>264932 > Не могу понять как сделать так, чтобы одна текстура натягивалась на несколько полигонов сразу. Не повторялась, а именно чтобы например на квадрате 5x5 лежал один кусок текстуры. Передавай в шейдер сразу 2 текстуры. И для какой-то из них ебашь текстурные координаты для твоего прямоугольника. Ну или рисуй в том месте ещё полигоны и натягивай на них нужную текстуру. Но тогда может возникнуть такая проблема: https://upload.wikimedia.org/wikipedia/commons/5/5f/ZfightingCB.png
Ребят, я ламер пока что, но забрел вот в такие дербри. Можно ли как то избегать переопределения объекта класса? Или это так и должно быть? Проблема в том, что определение попадает в цикл, где каждые 0.15 секунд инициализируются довольно крупные вещи, а это затратно для ресурсов. Где можно почитать на счет отрисовки множества объектов через классы?
>>265732 приходится...тут display функция уходит в петлю, то есть каждый раз перезаписывается все, что внутри него. мне нужно отрисовать объект. Его конструкция описана в классе. как это сделать грамотно? получается, что каждый раз, когда перерисовывается экран создается заново(!) объект класса, ему снова присваиваются координаты. Так и должно быть или я просто дебил?
>>265749 короче, раз уж у тебя спрайты там отрисовываются, то можно отрисовку спрайтов сделать одной пачкой (за один вызов gl), но при этом рисовать надо будет н устаревшими способами (glVertex, glTexCoord, glBegin/end). Почитай про буферы, там, в целом, все очень просто, да и быстрее работать будет, это однозначно.
>>265834 OpenGL 2.0 для мобилок, веба и индиговна будет жить еще очень долго. Вулкан станет основным API для ААА, если MS будет продолжать тупить с UWP.
>>266018 Просто я запариваюсь над тем, что начинать учить, чтоб не зря было. Пока что овладел нормально только плюсами и парой тройкой библиотек к нему. Очень хотел юзать opengl, а тут вот говорят лучше вещь сделали.
>>266105 А за это большое спасибо. Разумеется с драйверами 340 из репозитория дебиана оно не встанет? там вроде от 368 версии на картах с opengl 4.5 поддержкой. Это крашит систему. Кто пытался поставить под linux?
Так, ананасы, вопрос следующий: Есть, значит, у меня моделька с кучкой материалов (.obj и .mtl файлы, короче), и тут я решил их по-маленьку зарендерить, но вот в чем дело, у GLSL на шейдер ограничение в 16 текстур (вроде и до 32 можно), а вот стандарт .mtl, который вейвфронт замутили, подразумевает наличие до 9 текстур от просто изображения предмета до каких-то залуп (алсо, забавно, что нет маски нормалей, а бампинг есть), так вот. Каким образом мне лучше сделать - мусор повыкидывать (оставить только основную текстуру, бампинга, отражения, прозрачности) или разбить объект на куски (под каждый отдельный материал) и затем рендерить его в несколько проходов (но это получается сильно затратнее), может есть что-то по-лучше, да и вообще нахуя мне столько текстур?
>>272522 Спасибо. А что делать для видеокарт, у которых размер текстуры маленький (2к х 2к, к примеру, для модели-то ведь точно хватит, а вот для какого-то ландшафта, например, окажется маловато (если тужа еще запихивать карту бампинга, нормалей, диффузии и пр.)). Херить качество?
>>272564 > если тужа еще запихивать карту бампинга, нормалей, диффузии и пр. куда ты их запихивать собрался, госпади Я НЕ КАРТА ВЫСОТ Я ТЕКСТУРКА НЕ ЗАПИХИВАЙ МЕНЯ, ПОДУМОЙ
>>272601 Ну ведь бампинг на физическую высоту (имею в виду объекта) не влияет >>272597 Спасибо, тоже о них подумал, но где-то кто-то пиздякнул мне на ухо, что текстуры массива должны быть одного размера, а оказывается нет.
Кстати, тут еще один вопрос. У меня следующий кусок в шейдере: http://pastebin.com/MeHspyQ2 Размер структуры равен 76 байт (если посчитать), но gl_uniform_block_data_size показывает, что размер униформа равен 636 байт. Я, так понимаю, 4 байта между структурами добавляется длы 16-байтного выравнивания данных?
>>272624 > Ну ведь бампинг на физическую высоту (имею в виду объекта) не влияет при чем тут это ландскейп совершенно не так делается, ландскейпу свой шейдер пишешь карта высот я имел в виду топология ландшафта, разумеется, она хайрезная, а эти мелкие текстурки что на траве, земле, песке и прочем их по 512 делай если печешься за производительность на древневидюхах или в несколько проходов можно рендерить (наверное, я сам не умею). я про то что там процедурный подход нужен
>>272624 > Размер структуры равен 76 байт (если посчитать), но gl_uniform_block_data_size показывает, что размер униформа равен 636 байт. Я, так понимаю, 4 байта между структурами добавляется длы 16-байтного выравнивания данных? http://steps3d.narod.ru/tutorials/ubo-tutorial.html
>>272711 Спасибо. В общем, на верочку, решил прочитать индексы и смещения, и, похоже делаю это вообще неправильно: http://pastebin.com/WZMKJq0j Вывод следующий: >> u_materials: 4294967295 offset 0 >> u_materials.materials: 4294967295 offset 0 >> u_materials.materials[0]: 4294967295 offset 0 >> u_materials.materials.ambientTexture: 4294967295 offset 0 >> u_materials.materials[0].ambientTexture: 4294967295 offset 0 >> MaterialsBlock.materials: 4294967295 offset 0 >> MaterialsBlock.materials[0]: 4294967295 offset 0 >> MaterialsBlock.materials.ambientTexture: 4294967295 offset 0 >> MaterialsBlock.materials[0].ambientTexture: 4294967295 offset 0 >> materials: 4294967295 offset 0 >> materials[0]: 4294967295 offset 0 >> materials.ambientTexture: 4294967295 offset 0 >> materials[0].ambientTexture: 4294967295 offset 0 >> Materials block size 636 Нихуя не нашел, короче говоря, но зато размер блока выводит, сука. Я вот вкурить не могу, как он их ищет то блять. По имени переменной обратился, по имени блока тоже, даже блять без имени, но все тщетно.
>>273389 Так, короче, хуй с этими поисками размещений, по std140 разобрался, теперь это не нужно (а хотелось бы понять, как делать-то). Но, в общем, мне не дает покоя конченый шейдер, а дело вот в чем, имею вот такой шейдер (делает чуть более, чем нихуя - применяет краску и все): http://pastebin.com/g8TEaFfx (выводит пикрелейтед 1) Однако, стоит мне заменить тело main'a на вот это: > MaterialStruct m = u_materials.materials[vs_out.material]; > fs_color = vec4(m.diffuseColor.rgb (vs_out.normalCoords.z + 1) 2, 1); Коричневый цвет сразу уебывает в звенящие дали, оставляя цвет только от первого материала. Видимо, компилятор сделал какую-то охуительную оптимизацию и все накрылось пиздой. Как сделать правильно?
>>274494 в normalCoords я пока что просто пробрасываю значение gl_Position, а вообще просто решил подзатенить чутка, чтобы трехмерно выглядело. Короче, один тип подсказал, что нужен квалификатор flat для переменной материала, чтобы он не интерполировался, вот теперь заработало, да.
Я просто хотел сказать, что меня ЗАЕБАЛИ шейдеры и GLSL. Ебучий матан, ебучая тригонометрия, ебучие матрицы, всё руками делать, охуевать трижды, гроб, гроб, кладбище, пидоры, всё. Спасибо за внимание.
в glsl во фрагментном шейдере есть возможность сохранить данные в промежуточном буфере ну допустим выполнили какие то операции на данном фрагменте, установили для него цвет сохранили какие то данные в переменных -> перешли к следующему фрагменту, взяли прошлые данные опять выполнили действия опять сохранили данные -> перешли к следующему фрагменту итд
Ну или на крайний случай параллельный буфер, допустим выполнили операции установили цвет в gl_FragColor, установили цвет в буфере -> перешли к следующему фрагменту взяли цвет из буфера прошлого фрагмента, выполнили операции, установили цвет в gl_FragColor, установили цвет в буфере -> перешли к следующему
>>288783 есть атомики, если тебе нужно в одном проходе хранить данные. Можно зарендерить во фреймбуфер и потом его ебать следующим проходом (так делают тени, и карты отражения, в частности)
>>288806 ладно иначе сформулирую вопрос, с этим у меня проблема на пике можно увидеть РАЗМАЗЫВАНИЕ, и вот я ни как не пойму как такое сделать в glsl, ну те если бы изображение было бы массивом то все просто, но вот в glsl же иначе
>>288897 Не нужно. Это совсем не так делается. Но тебе ещё рано задумываться об этом, раз ты такую простейшую трансформацию осилить не можешь. Рекомендую изучить базу glsl для начала.
>>288972 В идеале должна получиться пиксель арт игрушка с нетривиальным сюжетом в нуаркиберпанк bladerunner сеттинге, с боевкой частично как в child of light, но пока графена нет тк художник учится, а я вот на системой света работаю.
>>288929 этот метод не позоволит нормально использовать карту света, да и тени там не очень они общие для всех источников света 0:53 а я хочу как раз имея на входе карту света, для каждого исочника света ее по своему модифицировать (добавляя тень) и уже потом просто рендерить сам свет так даже дешевле будет чем то что на видео, но вот я никак не пойму как это размазывание реализовать
>>289005 черд вот этого я и хотел избежать - фором по всей высоте экрана проходить в каждом фргаменте, но видимо не получится усидеть на двух стульях, и либо дешево либо красиво
Сап, велосипедисты. Кто-нибудь знает, в чём может быть проблема? Первый пик - правильный вид игры. Второй и третий пики - так, как игра выглядит у других людей.
>>290573 Начни с проверки того, что у тебя окно с правильной глубиной цвета создаётся. OpenGL'у же пофиг, он будет пытаться хоть что-то отобразить в любом случае.
>>290788 Это игра на twg, тут очень много мест, которые можно было бы оптимизировать. Например, добавить кеш для шейдеров, чтобы не загружать один и тот же шейдер несколько раз. В серьёзном проекте я бы это реализовал, но тут не вижу особого смысла.
>>290796 У каждого объекта dream::engine::entity есть свой dream::gl::vertex_buffer_object, у которого есть dream::gl::shader. Все треугольники - энтити.
>>290800 >>290801 > Я осознаю, что это неправильно и нуждается в оптимизации. Это не просто не правильно. Это ужасно.
Лучше пусть каждать энтить хранит позицию в игровом мире, цвет, ещё какие-то настройки. Перед отрисовкой отсекай те треугольники, который за экраном. Получится что-то вроде пикрелейтеда.
Что будет, если использовать гейзерную программу и установить в ней значение одной из юниформ, использовать другую шейдерную программу, а потом опять установить первую программу? Сохранится ли значение юниформы?
... Uniforms are program object-specific state. They retain their values once loaded, and their values are restored whenever a program object is used, as long as the program object has not been re-linked. ...
Двощик, почему у меня не получается передать две текстуры в шейдер? Делаю все по науке - бинжу тектсуры на разные юниты, передаю номера юнитов в шейдер. При отрисовке в обоих семплерах текстура из нулевого юнита. Везде написано, что все делается именно так, но у меня не робит. хотя я уверен, что там где-то просто косяк, но я не вижу, где.
Сталкивался кто с проблемой отрисовки нескольких сотен двигающихся спрайтов с анимациями(мобы типа)? Я вот погуглил, говорят нужно через один динамический VBO рендерить за один glDrawElements. Пока думаю сделать два буфера: геометрии и текстурных координат, их перестраивать через glBufferSubData. Может есть какой оптимальный путь? Алсо треугольники или квады? Говорят лучше треугольники, типа карты под них заточены. очевидный ньюфаг
>>295273 1) Делаешь один спрайтшит на всех и аплоадишь его в одну текстуру. 2) Каждый объект представляется координатами на экране и индексом спрайта. Фигаришь их в буфер с параметром GL_DYNAMIC_DRAW. 3) В геометрическом шейдере генеришь квады и готовые текстурные координаты, простые как амеба вершинный и фрагментный шейдеры кушают и высирают на экран. И все это за один drawcall. 4) ... 5) ПРОФИТ!!!!!
Пояснение: квады начиная с OpenGL 3.1 выпилены нахуй, делай TRIANGLE_STRIPE или TRIANGLE_FAN, про квады забудь.
Аноны, поясните мне, пожалуйста. Вот есть OpenGL ES 2.0, там, как и положено, пишется версия шейдера #version 120 и т.п. А вот и пришел GL ES 3.0, а там уже блять другое #version 300 es Они что, опидорели там в своем комитете?!
Ананасы, раздумывал тут на тему приемлемого освещения (для мобилок, естественно), хотелось бы получить что-то похожее на террарию, но там, как мне кажется, используется многопроходовый матричный фильтр с проверкой текущей ячейки на прозрачность для света (для прозрачных нулевой коэффициент затухания, для непрозрачных - другой), в общем, получается-то в целом довольно неплохо при 8+ проходах и при этом работа не зависит от количества источников света (натыкал точек и готово), напихал следующее: http://pastebin.com/d0FUUfQ7 Получается что-то вроде пикрелейтеда, но проблема, в общем-то понятна - матричный фильтр и большие затраты, у меня это будет выдавать нормальный FPS даже при максимальном разрешении текстур, однако на мобиле железо сосущее, как известно, и будут некоторые веселости с залипаниями и торможениями.
Пробовал рейкастинг, но мне не очень понравился результат, для него нужно считать столкновения с препятствиями, при малом количестве это еще куда ни шло, но с ростом их числа проц заметно проседает в производительности, ну и, собственно, гладкое освещение плохо сочетается с пиксельной графикой.
Еще, как вариант, мне кажется, можно попробовать тепловые карты и этот вариант я тоже пробовал, но регулировать яркость освещения я пока не допер как. Ну и, естественно, чтобы свет появлялся вовремя нужно рендерить за пределами области видимости причем неплохо так, зато ресурсов почти не отжирает (почти тот же матричный фильтр, только за один проход). Может подскажете еще варианты какие? Хотел бы, конечно, тепловые карты задействовать, но не допер, как считать передачу света (если его заменить теплом), то есть с какими поэффициентами и как уничтожение света, чтобы не залило всю карту.
>>295939 Короче, подумтил тут шейдер для flood-fill'a, как в террарии используется, похоже (но там он программный был, насколько мне помнится), получается гораздо приятнее, чем на основе передачи тепла, только побочный продукт - ромбик очень уж не нравится
>>295939 > (для мобилок, естественно) Ну раз мобилки, то может не стоит городить что-то уж слишком сложное? Может для начала попробовать простые техники?
>>296790 Сначала тоже так подумал, а потом решил разные способы попытать в поисках самого привлекательного, все равно сроков не ставил, у меня это как своеобразная развлекуха получается, не просто же целый день сидеть без дела
Нужно написать простенький редактор уровней для своего игрового движка на OpenGL + Physx. Для него нужен ГУИ фреймфорк. Подумав, взял wxWidgets. Мотивация - не такой тяжелый, как QT, не требует шаманства со вспециальными аддонами для студии, сразу есть компонент для отображения OpenGL контента.
Пизданутый мобильный геймдев, меня он просто колотит блять. Под GLES 2.0 нет функции texture, а вместо нее старая-престарая texture2D, которую, сука, в 3.0 заменили на универсальную texture, а старую просто выкинули нахуй. У меня от них DIRECTX!
Поясните за такую штуку: у некоторых этот код рисует круги(как и нужно), а у некоторых рисуются квадраты. Причём, у меня в одном приложении этот код рисует круги, а в другом - квадраты. А у других рисуются квадраты и в том приложении, в котором у меня рисуются круги. Использую LWJGL
>>297856 Вангую поинтсайз(который кстати КВАДРАТ) много больше радиуса выводимой окружности. Получается маленькая окружность выведеная вершинами с очень большими квадратами, которые толпятся все в точке +-2 пикселя. Почему везде по разному - хз.
Короче, ананасы, вопрос такой. Допустим у меня есть точка, я нормирую ее координаты (от -1 до 1) в пределах некоторого вида, для этого вида у меня есть совершенно конкретные значения ширины и высота области видимости в пикселах. Так вот, допустим, ширина области будет 200, а позиция х точки 0.01375, это получается ее координата (в пикселах) теперь окажется равной 101.375, что нецелое число, естественно, так вот, каким образом OpenGL определит ее позицию на экране, он вернет 101 или 102, то есть мне важно не само число, а способ его получения.
И вроде как можно отцеплять шейдер от программы и прицеплять другой шейдер.
> Ок, а есть способ сохранить имена переменных? Можешь также ещё попробовать юзать uniform buffer object Или заранее задавать индекс переменной прямо в тексте шейдера.
>>300071 Сделал связывание через layout (location).
Блять, решил выебнутся - сделать вытягивание шэдоу волюма в геометри шейдере, оказалось GL_EXT_gpu_shader4 (нижняя граница совместимости для которой я пишу) не поддерживает GS инстансинг (invocations). За один проход стрипами не вытянишь силуэтные грани. Сука.
Аноны, ответьте пожалуйста на один вопрос. Имеется у меня модель, полученная из OBJ-файла, соотвественно там поверхности состоят из четырехуголников, которые я рендерю веером и использую буфер индексов, чтобы было проще с этим работать. Так вот, теперь для наложения карты нормалей мне стало необходимо вычислять векторы касательных дл всех вершин, нашел пикрелейтед для получения их, но вот ведь незадача - веер состоит из нескольких треугольников, да и к тому же каждая вершина в модели вообще будет использоваться по нескольку раз. Так получается, мне теперь придется потеснить буфер индексов и выкинуть его, а модель разбить на отдельные треугольники?
>>300775 Тебе, по идее, нужно тагент посчитать и его тоже на ГПУ загрузить (как и вершины и текстурные координаты, например) И вот таким шейдером рисовать http://pastebin.com/ZJUcY5YA
>>300476 Моделька не замкнутая, поэтому иногда течет. Думаю все же на шедоумапах остановиться. Вот для примера PCF4x4 на 2 скрине. Еще немного поэксперементирую со всякими variance.
>>301741 Kek. У меня значит не-БФГ, там оно GL_CheckErrors( void ). И проверяет не 15, а 10 ошибок. Вообще пушка. Кармак, как ты мог такую хуйню написать?!
Алсо, кстати интересный момент. Вот в индустрии есть крутые чуваки которые делают годные вещи и вообще они люди опытные, много чего написали и попробовали. Интересно читать их статьи и какие-то наблюдения, но не всегда можно посмотреть их код. Ну как-то вдохновиться им, какие-то интересные моменты найти для себя: "Блин круто! Я даже не думал, что так можно написать" и тд и тп.
>>301746 >github Вот так я как раз и думал переписать эту функцию - while, пока все ошибки не собраны. Видимо прошлую версию все же не он писал.
>посмотреть их код ИМХО Кармак действительно один из немногих, чей реально рабочий код можно вот так просто увидеть. Еще есть утекшие исходники HL2, но это по сути наследие Кармака (Quake 1 -> GoldSRC -> Source).
Правда мне больше хотелось бы видеть статьи с разборкой рендера как в блоге http://www.adriancourreges.com/ - там разобраны Doom 2016, Deus Ex HR, GTA 5 и Supreme Commander.
>>301778 Ну вообще вроде как в документации написано, что атрибуты инициализируются какими-то базовыми значениями. Я написал просто чтоб было. Может закомментировать и глянуть как будет работать.
>>301727 И да, > #include <GL/glew.h> Везде вижу использование всяких glew/glu/etc. Зачем? Это же надстройки над opengl. Почему нельзя писать на чистом opengl? Поясни пожалуйста за это.
>>301797 > Почему нельзя писать на чистом opengl? Поясни пожалуйста за это. Тебе придётся вручную получать адреса функций опенгла, писать константы какие-то и тд. Ну а библиотека glew всё делает сразу за тебя.
Так ананасы. По поводу шапки. Нашёл хороший сборник ссылок про то, что касается опенгла сразу на одной странице. https://github.com/eug/awesome-opengl Это нам позволит сократить шапку раза в полтора.
>>301727 Весь день тупил в эту пасту, opengl сложный, не могу понять принципа рисования. Вот есть у меня SDL-окно, opengl и glew тоже инициализировал, как мне нарисовать квадрат 40x40 пикселей? Как с пикселями вообще работать? Аноны, спасайте, голова пиздец болит, сложно-сложно-сложно.
>>301850 Да можно, работай с пикселями, нах - https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml Потом ты скажешь, что OpenGL тормозной, что уеч быстрее спрайты рисует и ты уйдешь из этого треда так и не узнав, что спрайты сейчас рисуют при помощи текстурированных треугольников.
>>301851 Это не то. В том примере, про который я слышал меняли opengl'овский 0.000 и 1.000 на обычные пиксели, в итоге можно было юзать всё как раньше, но размеры указывать в пикселях. Там что-то с glMatrixЧётотам было. Я хочу рисовать текстурированные треугольники в пикселях!
>>301855 Делай матрицу масштабирования с размерами клиентской области, будет тебе натягивание совы на глобус^H^H^H^H^H^H^H^H^H^H^H^H^H^H нормальных координат на оконные.
И все же, прекрати ебать себе могзги, положи их на место и пользуйся по назначению. Что у тебя там, клон марио-террарии-метроидвании с пикселяртом и претензией на олдскул, что ты так в оконные координаты вцепился?
>>301859 Блин. Ты треугольник хотя бы нарисовал уже? А то я не знаю, на каком языке с тобой вообще говорить.
>Яж не разберусь. >У меня просто 2D игра, зачем мне что-то помимо пикселей? Ну нахуя ты в OpenGL-треде вообще? Надо чтоб "Стильно, модно, молодежно", так что ли?
>>301863 > Ты треугольник хотя бы нарисовал уже? Нет, там двумерный массив, а это страшно, сложно, я решил отложить и изучить теорию.
> Надо чтоб "Стильно, модно, молодежно", так что ли? Да я вообще к трудэ не хочу прикасаться, но надо ускорение от карточки. Алсо, "Стильно, модно, молодёжно" это вулкан, скорее.
> microsoft.com
И всё же, поясни за матрицу. Неужели я на столько сильно туплю?
> code.google.com Зачем заливать что-то на такие анальные сайты? Без JS оно не работает, с JS тоже не работает, сукаблядь, бесит. Ладно, хватит баттхёрта, открыл в другом браузере. Буду разбираться, спасибо.
И да, у меня ещё один вопрос на счёт OpenGL, мне всю свою жизнь придётся ебать числа с плавающей точкой? Все эти флоаты, даблы, к чему? С интами нельзя будет работать? Оно же и производительность режет, и просто неприятно.
>>301867 >Пожалуйста, начни вот отсюда (забудь про игру пока): https://code.google.com/archive/p/gl33lessons/ Виндоблядство какое-то, да и объясняет плохо. В общем я решил твою пасту переписывать. Дошел до шейдеров и охуел, сложно, но хотя бы понятно что происходит. Пикрелейтед, сигфолт, почему? Debug1 ещё выводится, debug2 и debug3 — нет. Уже пол часа пытаюсь найти причину.
>>301888 Включаю режим Ванги: shader_file после fopen у тебя на null показывает, поскольку файл с текстом шейдера не лежит там где его пытается открыть программа. По дефолту клади его пока рядом с экзешником (с путями потом будешь разбираться). > Huintel core i7-3770, 16Gb RAM. Нормальная тачила. Sizeof( int ) == sizeof( uint32_t ) == 4 == sizeof( float ). Про производительность не думай пока у тебя нет вообще ничего. Ты же не пишешь песочницу с отработкой дохулиарда взаимодействий, а значит про производительность не думай пока. Кармак с float работает, значит норм.
>>301889 > поскольку файл с текстом шейдера не лежит там где его пытается открыть программа Стоп, какой файл?
> По дефолту клади его пока рядом с экзешником Что и зачем мне куда-то класть? Он же программой создаётся, нет? Не понял немного. Зачем вообще шейдеры нужны? Я думал они для того, чтобы йоба-грофен сделоть.
> Кармак с float работает, значит норм. У Кармака задачи другие.
>>301890 Читай глазками, а не ректальным очком анальной жопы: > После того как исходный код шейдеров написан их можно загрузить из программы и создать из них шейдерную программу. Исходный код шейдера это обычный текст, загрузить его можно как обычный текстовой файл, в исходника к статье для этого используется функция LoadFile, которая открывает файл, узнает его размер, выделяет под данные файла память и читает весь файл в память, после чего эти данные можно использовать.
>>301891 Я ту статью вообще дропнул. Сейчас перечитал, стало понятнее, чувствую прилив знаний. Однако я по прежнему не понимаю где мне взять шейдеры не злись, Анончик, я туповат. Вот эта паста http://pastebin.com/raw/rWcQg0QQ генерит сраный шейдер или нет? Я же её переписываю.
>>301868 >Все эти флоаты, даблы, к чему? С интами нельзя будет работать? Оно же и производительность режет Шёл 2016й год, а дауны всё ещё не знали, что операции с плавающей точкой стали быстрее целочисленных операций ещё два поколения назад(а уже в первых пентиумах их производительность сравнялась).
>>301898 Разобрался! Вроде как. Результата не вижу, просто сигфолта нет. Короче вот мой инит, на который я убил полные сутки, если не больше, оно уже рабочее? Как, например, фон белым цветом залить? Мне нужен хоть какой-то результат и я съебу в мир снов, ибо заебался, вас также перестану доёбывать некоторое время. Треугольник рисовать не хочу, эт сложно.
Функция "build_shader" полностью скопипизжена из аналогичного примера на пастбине.
>>301923 > как залить фон белым цветом glClearColor + glClear например.
Болезный, ты сейчас спрашиваешь как написать сочинение про курочку Рябу (про "Мертвые души" или "Войну и мир" уже не обсуждаем, это недостижимая планка большинства местных кириллов), когда сам еще не заполнил палочками прописи за первую четверть первого класса, и после этого обижаешься, что тебя тут не любят. Понял?
>>301925 Я пытался так сделать, ничего не работает, вот и спрашиваю что забыл.
> Понял? Я всё понимаю, и мне за это стыдно, честно-честно, но я ведь сам не справлюсь. Вот я сейчас этот хелловорд добью и больше тут по таким глупостям какать не буду, только с хелловордом помогите.
Двач, помоги. Как исправить исчезание тайлов (вембрелейтед)? Это как-то связано с камерой, но так как я полное дно и учу OpenGL лишь неделю, я просто не понимаю как это фиксить.
Я что-то второй день уже туплю, и никак не соображу, как реализовать линейную интерполяцию текстурных координат на треугольнике(имитацию отсутствия коррекции перспективы). Ткните меня носом в готовое решение, пожалуйста(оно же должно быть).
>>303233 Нет, нашёл всё-таки. Надо всего-то было передавать текстурные координаты с типом noperspective. Шейдер, имитирующий говнографику PS1, почти готов!
Поясните за буфер глубины. В общем решил постигать Constructive solid geometry через буферы stencil и depth, но не могу понять, почему моя сфера исчезает, когда я задаю glDepthFunc(GL_GREATER). Т.е. я ожидаю, что буду видеть задние стенки сферы, а вижу ровно нихуя. Боюсь, что где-то фундаментально неправ. алсо GL ES2.
Чем изначально инициализирован буфер глубины? Или невидимые стенки каким-то хером не рендерятся вообще? Вырубание кулфейсов не помогает что-то увидеть
Рендерю тут кубы через GS(знаю, что он для этого не предназначен). А ничо так, миллион кубов на экране без просадок на офисной интегрированной видеокарте. Можно свой майнкрафт(который на этой машине даже не запускается) пилить, лол.
>>244623 Ну я же не только отрисовкой занят. Мне еще, знаешь ли, физику симулировать нужно, звук проиграть, подготовить анимацию, обработать сетевые данные и локальный ввод. Обеспечить работу геймплейных фич и ИИ. И все это тратит время, причем вполне прилично. Так что хорошо бы, что бы кадры рисовались быстрее, что бы на прочие дела времени оставалось больше.
>>306190 не, вот что было. Что-то привык к undef-айнам надо было: glClearDepth(0.0); >Since the depth buffer values maps 0.0 to the near clip plane, and 1.0 to the far clip plane, there is no chance for any object under any situation to have a depth buffer value above 1.0. If it has, it's beyond the far clip plane and will be clipped instead. If it's not, it's value is less than 1.0 and is rejected by the depth buffer test.
Какую либу для создания контекстного окна для рендеринга и инпут/аутпута стоит использовать вместе с OpenGL в 2016почти 2017 году? Использовал раньше GLUT но сейчас начинаю новый проект и думаю начать использовать что-нибудь по-новее, если есть.
Есть какие-нибудь понятныи книжки/туториалы по PBR в реал-тайме? Я неплохо разбираюсь в обычном PBR рендеринге, во всяких GI алгоритмах, алгоритмах семплинга, брдф, хочу вот почитать про реалтайм рендеринг теперь.
> Я неплохо разбираюсь в обычном PBR рендеринге, во всяких GI алгоритмах, алгоритмах семплинга, брдф А вот на счёт этого что можешь посоветовать почитать/посмотреть? Ну чтобы понять о чём это и ориентироваться в теме.
>>307753 ну вот я подумал ок возьму от квейка, ток чот в гугл не осилил документацию как устроен мап файл что там ваще надо чтоб загрузить такую карту себе в прогу
Тут все юзают Visual Studio? Никого не смущает, что там блядский MSVC вместо нормального компилятора? И в чём смысл юзать вообще OpenGL тогда, если всё это будет работать только под виндой?
>>307827 Мне почему-то кажется, что если проект большой и там присутствуют всякие точные расчёты, то если скомпилить потом на другом компиляторе, получится нерабочая хуйня. Как минимум будут проблемы со всякими там округлениями. Хотя если использовать только GL типы, то хуй знает. У кого-нибудь есть опыт подобный?
>>307819 >2016 >программировать под шиндовс >в студии Как же жалко спермохлёбов, которые качают многогигабайтную VS, чтобы скомпилировать несколько десятков строк кода. И к тому же, лишены таких полезных штук, как clang и valgrind. Я вот хз как еще под виндой профилировать эффективность использования процессорного кеша. Наверное только какие-нибудь платные профайлеры от интел.
>>307830 Детерминизм может иметь значение только в сетевом коде. В графике всем на это довольно сильно похуй, так как ты всё равно не сможешь наговнокодить погрешности достаточно крупные хотя бы для того, чтобы у тебя хоть один пиксель не совпал. Короче, ты хуйнёй страдаешь. >>307850 А вот и нитакоекакфсе красноглазое уёбище подползло. Которое студию видело последний раз, наверное, десять лет назад, и не знает, что нынче она обладает самым мощным и удобным дебаггером, до которого валгриндам срать и срать, и всё равно не просраться. И да, профилировать использование процессорного кэша она тоже умеет. И загрузку процессорных каналов показывает. И распределение инструкций по ядрам. И скомпилированный код вплоть до уровня машинных кодов. И ещё много чего, но ты же ведь всё равно не поверишь, а посмотреть и убедиться сам не можешь, потому что ставить окнеблядиксное говно принципиально не будешь(экспресс-версия которого весит 160мб, хуй знает где ты гигабайты нашёл)?
Я тут писал всё время на opengl3.3 и сейчас решил перекатиться на 4.0+. Видеокарта позволяет(посмотрел через GL View Extension или что-то такое + на сайте). В интернете пишут что-то про драйвера, но ведь opengl32.lib валяется в папке с компилятором. Кароче, я не понимаю. Что мне нужно сделать?
>>307855 Вот и пиздабол подъехал. Во-первых, выпуски express устарели лет на 6 и уже давно не поддерживаются. Они более чем всраты, никакого вразумительного дебага ты там не найдешь, а компилятор даже с++11 поддерживает не полностью. Во-вторых, дебаггер самый обычный, ничем не отличающийся от оного в любой опенсорсной среде типа codelite или qt creator. В-третьих, попробуй поставить visual studio 2015 community, и охуеешь от размера, минималка (только цепепе, без шершавого и тулзов для мобилок/веба) выйдет в несколько Гб. Полный комплект исчисляется уже десятками гигабайт.
Например лучше модель хранить в одном запакованом файле, или в папке где обж файл, текстурка рядом лежит и прочие вещи. Или в одном гиганском файле хранить все модели. Такая же фигня и с картами.
Алсо вопрос по шейдерам, шейдер привязан к карте, или шейдер больше относится к модели? Тоесть мне на каждую модель хранить шейдер? или например внутри шейдера построить условия например что мне нужно на одной модельке сделать рефлекшн, а на другой не нужен он, мне передавать в шейдер булевую униформу? как вообще с шейдером работать, при наличии множества моделей в сцене.
Книжки из оп поста и сайты смотрел, большинство из них рендрит треугольник а потом начинает сразу рендрить готовые сцены, что бы описать всякие фишки работы с шейдером.
Может кто-нибудь рассказать, зачем вообще нужны GL типы данных? Типа GLfloat, GLuint ну вы поняли. В каких случаях их стоит использовать? Например, скажем, я написал свой бичёвый аналог glm (вектора/матрицы/всякие трансформации). Что будет, если я перепишу с GLfloat вместо float?
>>308630 В С и С++ встроенные типы данных могут иметь разные размеры, в зависимости от версии компилятора или платформы. Использование псевдонимов позволяет повысить платформонезависимость.
>>310291 ...Но все равно получается криво. Ты, либо, разрешение текстур подними, вместе с размерами экранного буфера, либо разрешение карты нормалей сделай соответствующим.
>>310326 Не, это я параллакс мэппинг хуйнул, но поначалу проебался с инвертированными координатами и тем, что текстуру высот без сглаживания скармливал(охуеть артефакты от этого лезут). Плюс у меня все текстуры в одном атласе, и если для цвета и нормалей тайлить всё норм, то для текстуры глубины я пока так и не могу окнчательно избавиться от шакальных артефактов на стыках. Похоже, придётся для глубины каждый тайл отдельной текстурой делать всё же(которые, впрочем, всё равно можно нарезать из одного файла прямо в коде).
>>311139 насколько помню в ярости мегатекстуры всем кускам текстуры ещё в "атласе" (что и есть мега-текстура) обрезали не по рамке, а ещё толи 16 пикселей "за рамкой" оставляли чтобы артефактов не было
>>311148 Шутан. Хотя кого я обманываю, движок я пилю. >>311160 Как все организуют. >>311179 Я знаю, что это артефакты оверсэмплинга, т.к. разрешения флоатов не хватает. По-видимому, придётся всё же добивать по краям линию.
>>311139 Охуеть, два дня с этой хуергой трахался, но подебил таки. Итого выяснилось, что артефакты на стыках лезут не из-за протекания текстур, а из-за того, что на стыках неправильно определяются ЛОДы, и берётся мипмэп не того уровня, как остальная текстура. Проблема известная, но только вот почти нихуя не описанная нигде. Лечится обычно хранением в атласе текстуры в четыре раза большего размера, но я вылечил просто отключением нахуй мипмэпов, так как всё равно вместо текстур у меня гигантские говнопиксели, выглядящие одинаково на любых имеющихся расстояниях.
Я полный ноль в триде, второй день сижу, ебусь с матрицами. Вроде, понял, как работает камера, нашел функцию lookAt, которая автоматически берет некоторые параметры камеры и вычисляет позицию вершин с их учетом. Есть функция paintGL, которая выполняется каждый фрейм. Логично засунуть lookAt туда, но тогда у меня выходит, что результирующая матрица постоянно меняет свое значение при том, что камера все время находится на одном месте, и отрисовывается, будто кубик постепенно отдаляется. Как быть?
А кто-нибудь подскажет, как камеру вращать? Ничего не гуглится нормального, википедия предлагает хуячить невъебенную матрицу вращения. Это пиздец какой-то, можно же сделать попроще. Больше ничего найти не могу. Либо какая-то хуйня написана, либо ничего не работает.
>>312779 То есть, если я не могу что-то осилить, значит нельзя к этому прикасаться? А какие базовые вещи ты подразумеваешь - матрицу поворота, представляющую из себя ебаное нагромождение тригонометрального хаоса? А вообще я уже разобрался, просто гуглил немного неправильно.
>>312810 Речь о линейной алгебре и шла, болван. И да, все детали знать все равно невозможно. Никто и не мог подумать, что поворот можно описывать несколькими разными способами, ведь ни в википедии, ни в некоторых учебниках, приведенных в шапке об этом не было сказано ни слова.
>>312839 Учитывая, что в первом же туториале из шапки это подробнейшим образом расписывается со всей математикой, то болван тут только ты. Иди уже возьми юнити, там всё за тебя сделано.
Итого двухуровневая процедурная трава на GS, работает приемлемо на встроенной Intel видяхе. Только после всех правок и отладок мне самому на геометри шейдер смотреть страшно теперь.
>>313053 Есть такое. Чтобы нормально выглядело, теперь надо нарисовать приличные спрайты травы(а не взять первый попавшийся из гугла), добавить освещение, анимацию и тени на переднем уровне. А то пока что свет считается банально по нормали земли. >>313061 Ничего не пилю. Просто нарабатываю скиллы и изучаю возможности.
Скажите, как эффективнее всего (по роизводительности) показывать двухмерную картинку (массив цветовых значений) в клиентской области окна? Можно ли напрямую попиксельно выводить в color buffer?
>>313248 Зачем заморачиваться на производительность при такой задаче, с отрисовкой одной двухмерной картинки даже самая древняя видеокарта справится на ура. Так что >>313252 - cамый простой способ.
>>313252 >Статичную? Нет. Есть поток изображений от прибора (рентген-аппарт), нужно наложить на них некоторый цифровой фильт и показать результат в окне. Так как скорость потока заранее неизвестна, нужно позаботиться о производительности в самом нагруженном случае. Может есть достатчно быстрый способ выводить в идеопамять (без OpenGL), желательно с двойной буферизацией? >Двумя треугольниками с текстурой Не понимаю. Какие треугольники и текстура? У меня нет 3D моделей, у меня - 2D изображения. Не бейте сильно - я раньше с графикой не работал.
>>313312 Тебе нужно просто выводить прямоугольник с текстурой, как тут: http://www.learnopengl.com/#!Getting-started/Textures 3D это 2D с еще одним измерением. Обрабатываешь свой результат, как тебе нужно, а потом просто делаешь из него текстуру и загружаешь. Ты уверен, что тебе нужен OpenGL? Может тебе и какой-нибудь GDI+ подойдет?
>>195874 ВебГЛ - это отличная идея для демоверсий, например, чтобы не парить юзера качанием бинарника и установкой его на свой компьютер, а ты - ёбаный даун.
>>313321 >Ты уверен...? Нет, не уверен. >OpenGL или GDI+ А как у GDI+ со скоростью и двойной буферизацией? И вот ещё вопрос к профессионалам. Как согласовать частоту кадров (и моменты производства кадров) с частотой работы видеосистемы? Может быть видеосистема может посылать какой-нибудь сигнал о том что нужно, чтобы приложение срочно выдало ей следующий кадр (не знаю как правильно сформулировать)?
Суть - нихуя не работает матрица перспективы. Перепробовал и считать ее в функции, и подставлять константную - хуй там плавал, черный прямоугольник. Если заменить на единичную - разумеется все работает (это же все равно что ее и нет), но тогда нихуя нету перспективы - как камеру от объекта не удаляй, он сука всегда одного и того же размера.
Это нормально что фрагментный шейдер игнорируется напрочь? Вставил шейдер после кода с дисплейными списками старого ГЛ (glbegin-end), в итоге все рисуется цветом предыдущих объектов. Инициализирую правильно, по крайней мере отдельно рисует треугольники нужными цветами.
>>317796 > не слушай этого дебила Программа, которая ищет (и не находит) компилятор в реестре и по захардкоженным путям, в то время, когда он настроен и есть в PATH, просто не заслуживает аргументированного обсуждения.
Здравствуйте, мои няшки! Пишет вам полный GL ньюфаня. Вопросов есть у меня. 1. Я пытаюсь нарисовать плоскую картинку из квадратных спрайтов по типу как на пике. Для этого я прохожу в цикле по всем тайлам и каждый накладываю, как текстуру. В принципе получается нормально, но только тогда, когда размер текстуры в пикселах совпадает с размером области ее наложения. Когда я пытаюсь зумить изображение, оно превращается в тыкву, текстуры уродуются и становятся заметны швы между ними. По-видимому, как-то нужно это дело сглаживать. Как? 2. У меня есть условно неподвижный пользовательский интерфейс на переднем плане и некий 2д вид на заднем, который может двигаться и отдаляться. Сейчас я использую для всего одни фиксированные координаты по типу GL.Ortho (0, w, h, 0, -1, 1); GL.Viewport(0, 0, w, h); Мне приходится заниматься неудобными пересчетами координат. Подозреваю, что есть более рациональный способ это организовать. Как? 3. Мне приходится рисовать линии и точки. Я освоился со стандартными методами вроде GL.Begin(PrimitiveType.Lines); Но все нарисованное выглядит пиксельно и убого. Хочется рисовать красивые плавные линии ( к примеру, с градиентом цвета от середины линии к краям в перпендикулярном направлении). Как это делать? Пока все, может потом еще вспомню. Спасибо.
>>318170 Во-первых, всё, что ниже GL 3.3 выкинь на помойку. Во-вторых, для какого-то простого 2д лучше юзай SFML. Там, кстати, есть возможность использования шейдеров.
Дело такое. Как заменить цвет определенных пикселов при наложении текстуры? Например у меня есть текстура со спрайтом котика. Я хочу использовать ее для рисования котиков с разноцветными глазами. Для этого пикселы глаз в текстуре я рисую например маджентой. Как мне при наложении перекрасить их в нужный цвет не меняя остальные?
Привет, такой вопрос. На каком языке еще можно что-то пытаться делать в опенгле кроме сей? Идеально было бы что-то вроде руби или хаскелла, но в инете по этому я нашел чуть более чем нихуя.
Есть множество текстур 6464 (вернее это одна большая текстура с кусками по 6464), нужно прорисовывать фон соответствующий размерам экрана из этих кусков по 64. Сначала я думал на ходу генерировать одну текстуру размером с экран и просто отправлять её на прорисовку как фон. Однако после движения камеры (внутренней камеры) фон должен смещаться. И здесь нужно его пере генерировать, смещая часть и дорисовывая другие блоки с другой стороны. После этого меня посетила идея разбить фон на участки скажем по 512*512, и генерировать их. И прорисовывать фон из этих текстур. И генерировать новые при необходимости. Или не стоит заворачиваться и просто пере генерировать фоновую текстуру каждый раз?
>>318627 Опенггл это набор си функций. Практически любой язык поддерживает вызов си функций из себя. Вот к примеру один такой список: https://www.khronos.org/opengl/wiki/Language_bindings первая ссылка в гугле. Естественно ты не найдёшь материалов по этим библиотекам. По сути там просто обёртка вызова аналогичных си функций из твоего языка программирования. И что бы написать, что то на нужном тебе языке тебе нужно: Знать какую функцию ты хочешь вызвать на си - это написано в книжках по опенгл и не важно на каком языке все функции всегда вызываются одинаково. И знать как запись этой функции выглядит в твоём языке, это написано в мануале библиотеки обёртки. Конечно некоторые библиотеки поддерживают всякие плюшки, но об этом написано отдельно в их мануалах.
Пишу свой велосипед, идея такая: есть главный поток, в котором крутится окно, получается ввод (мыша, клава, джойстики всякие), и есть поток рендера, который как получил контекст, так и крутит его сам. Проблем с контекстом OpenGL в отдельном потоке не было ни разу, просто получать его надо именно тем потоком, который его использует.
Сижу под бубунтой, видяха nvidia 980, контекст пробую 3.3 core, почти все устраивает, но вот внезапно пришла хрень. Пока был банальный треугольник хардкодом прямо в потоке рендера, все было норм. Потом стал переводить все на классы, класс меша, класс шейдерной программы, и т.п, там своих заморочек дофуя, и пока еще не закончил. Впрочем так или иначе, пока в потоке рендера не вызывается glDrawElements, все ок, а когда glDrawElements появляется, то через несколько сотен кадров все падает где-то в недрах glxSwapBuffers с SIGABRT.
Грешил сначала на API - вначале писал на чистом xlib, думал хрень в работе с потоками, но XInitThreads у меня уже стоял давно в самом начале, XLockDisplay не помог. Переписал класс окна на xcb - тоже самое. Плюнул на идиосинкразию к моде на библиотеки и переписал класс окна на SDL - опять тоже самое. Переставил дрова с 367 на 375 - опять тоже самое.
Я понимаю, что у меня там торчит VAO недоделанный из-за того, что я еще не допетрил с glGetAttribLocation->glBindAttribLocation, пишу систему атрибутов, чтоб можно было грузить меши с дополнительными слоями данных, и все дохуя сложно (когда вообще glGetAttribLocation перестал нормально работать, в каком году?). Но все же, схуяли там SIGABRT прилетел? Кто мне его вообще кидает? Драйвер что ли? В стеке вызовов между glxSwapBuffers и stdlib/abort.c еще 4 пустых строчки - типа неизвестно чьи заголовки должны быть, все пострипано нахуй.
Все, выговорился. Если кто имеет соображения - буду рад услышать.
Сап, Господа. Вроде пишу по тутариалу, но возникла такая проблема. Решил обратиться в тред, т.к. сам я разбираться буду от одного дня и до недели/двух недель. Можете объяснить в чём возникла проблема? Серьёзно, исходный код, прилагающийся к тутариалу, смотрел уже. Если есть какие-то арф. ошибки в посте, то сори
>>319335 Да, именно так, цикл фактически где только glClear и glxSwapBuffers - не падает. Я пока дописываю свою хреноту с атрибутами, просто дико странно, что такое падение происходит. Сейчас еще попробовал glGetError воткнуть в цикл - получил ошибку 0х0500, надо тогда glGetError напихать ВООБЩЕ ВЕЗДЕ, может что и накопается.
>>319335 >>319370 Бля! Нашел! Классическая копипастная ошибка, в результате которой при заполнении VAO один (!) раз (за все время выполнения) был сделан вызов glBindBuffer c единицей в первом параметре вместо положенной константы GL_ARRAY_BUFFER, и из-за такой хрени - утечка в драйвере. Пиздец.
Есть объект , состоящий из quads , проблема в том, что квады прорисовываться сразу и так получается , что внешние не видят внутренние , и все они ориентируются на фон ( за прозрачными частями не видно сзади стоящие квады, а сразу видно фон) . сообсвенно вопрос , как это исправить.
>>322535 Ты на какой версии стандарта пишешь? Если хотя бы 3.2, заведи геометрический шейдер, скармливай ему в каждом кадре сортированный набор точек, пусть он из них генерит квады. Сколько у тебя частиц (примерный порядок назови)?
>>322538 Странно, вроде верно. Можешь залить оригинал текстуры?
Советую подумать насчет сортировки частиц. Если их не 10кк, то можно быстро отсортировать, только не пузырьком, я например предпочитаю поразрядную сортировку - время почти O(n), только памяти жрет примерно дополнительно 200% от исходного массива, если делать побитово.
>>322558 Во, теперь лучше выглядит. Еще одна мысля - раз у тебя там такие облака среди гор - хорошо может пойти normal-mapping, чтобы облака были немного неоднородными. Пацаны правда уже на вокселях и с самозатенением делают, но ведь с чего-то надо начинать кириллу.
>>322559 >Советую подумать насчет сортировки частиц. Если их не 10кк, то можно быстро отсортировать, только не пузырьком, я например предпочитаю поразрядную сортировку - время почти O(n), только памяти жрет примерно дополнительно 200% от исходного массива, если делать побитово. частиц всего 5к использую движок, там он немного специфичен http://rgho.st/8fWZFQMSr
>>322561 Ага, значит геометрический шейдер есть. Уже клево. Осталось ему в атрибут points регулярно загонять координаты сортированным по расстоянию до камеры списком. Движок поддерживает GL_DYNAMIC_DRAW буфер?
"if( texColor.a < 0.1) discard;" - это я бы выкинул, и возможно, что тут "fragColor = vec4( texColor.xyz , texColor.a );" стоит поэкспериментировать с умножением обоих параметров на коэффициенты в районе (0.7;1.0).
В принципе с однородными частицами сортировка может быть и не нужна, но лучше освоить, особенно пригодится при разнородных (разноцветных) частицах, да и просто при прорисовке прозрачных объектов.
>>322559 Слушай, сделал сортировку но все равно если писать в буфер глубины, то получается херня как на скрине, только теперь с другой стороны( ну раньше грубо говоря смотря слева так было, теперь справа)
>>322583 и еще , ровно в центре моей текстуры вот такая поебота , фпс на ней падает в 100-150 раз! не знаю откуда она и как ее убрать( думал там много частитиц алгоритм нагенерил в одном месте, сделал сортировку на выброс рядом стоящих и одинаковых , но не помогло)
>>323966 >>323968 Во, про "не писать в zbuffer" забыл сказать. Хотя по идее, если вывод от дальних к ближним, и они не пересекаются (кстати, это надо код геометрического шейдера перечитать, убедиться, что квады параллельны экранной плоскости), то все должно проходить нормально. Короче второй вариант - это то, что должно быть. И еще имеет смысл добавить прозрачность при приближении к камере, чтобы они не просто мгновенно пропадали при пересечении ближней плоскости, а растворялись перед этим (заметно на краях облака), но это если ты делаешь облака с возможностью летать через них.
Разницу в одну частицу сделать можно - отсекай конец от буфера вершин, который подается, там же какой-нибудь glDrawArray стоит для передачи вершин в шейдерную программу, а в нем есть параметр "количество подаваемых примитивов".
Я бы добавил для имитации затенения карту нормалей к частице, а сами частицы еще поворачивал бы, но это уже следующий уровень. Пока поэкспериментируй с их яркостью и прозрачностью, помнишь про домножение итоговых частей вектора цвета во фрагментном шейдере?
>>323971 >Пока поэкспериментируй с их яркостью и прозрачностью, помнишь про домножение итоговых частей вектора цвета во фрагментном шейдере? Помню-помню) я еще за освещение не брался. >И еще имеет смысл добавить прозрачность при приближении к камере а как это сделать?
>>323981 В конце надо домножать альфу на одну хитрую функцию (ее надо придумать, и желательно без if), которая будет на промежутке от zNear до zAlmostNear монотонно возрастать от нуля до единицы, а на промежутке от zAlmostNear до zFar оставаться равной единице. Соответственно zNear - значение ближней плоскости отсечения, zAlmostNear - это zNear плюс небольшая константа, zFar - дальняя плоскость отсечения. Если zNear и zFar у тебя всегда постоянны, то можешь использовать в шейдере числовые константы, иначе придется их юниформами загонять.
Например такая функция: alpha = min(1.0, (z - zNear) / (zAlmostNear - zNear)); Это дешево и сердито, возможно на синусах-арктангенсах будет лучше смотреться, но будет дороже для вычисления.
>>323982 Поворачивать я имел в виду в экранной плоскости.
>>324002 >В конце надо домножать альфу на одну хитрую функцию у меня кстати еще трабл, у меня ща альфа умножена на 0.7 если умножать на меньшее значение , текстура начинает светиться по ебаному , ща покажу
>>324015 >>324020 По-моему это хрень связанная с premultipled. То есть оно зависит одновременно от собственного цвета пикселя, от собственной альфы, и от цвета фона. Я пока сам не очень вкурил как оно все вместе происходит, но факт такого говна действительно имеет место быть. Попробуй на эту функцию умножать не одну альфу, а весь цвет.
>>327118 Вот про это я и хотел написать. Там надо в геометрическом шейдере поправить генерацию частиц, полосы от того, что все частицы одинакового размера и ориентации, и наверняка их координаты у тебя на регулярную сетку ложатся.
Подскажите, я правильно понимаю, как работает v-sync? Если, например, я установил swap interval равным 1 (в духе setSwapInterval(1)); далее, если вход в функцию SwapBuffers() произойдёт раньше чем драйвер получит v-blank-сигнал от монитора, то этот поток будет остановлен до получения этого v-blank-сигнала драйвером. Сразу после этого передний и задний буферы поменяются местами и монитор считает изобржение из переднего буфера без разрывов ("tearing"), а поток, вызвавший SwapBuffers(), будет "разбужен" драйвером. То есть приём и обработка событий (пользовательского ввода, таймера...), которые могут произойти пока первый поток "спит" (в SwapBuffers()), нужно производить в других потоках. Если же драйвер получит v-blank-сигнал раньше, чем будет вызвана SwapBuffers(), то поток, вызвавший SwapBuffers(), не блокируется, буферы меняются сразу же, ну и тк делее. Это всё верно, или нет? Не очень понятно, поток будет остановлен точно внтри SwapBuffers(), или есть вероятность, что он может проскочить дальше?
Я хочу детектить столкновение в 2д пространстве через рендер в свой фреймбуффер с каким-нибудь stencil буфером. Что-нибудь в буфер и положу, а как потом эффективно прочитать оттуда? Или может все же как-то можно передать флажок из шейдера?
>>329305 Текстурки кривые, описать формально сложно. Так-то, конечно, и без gpu не с хер задержка в двадэ-то, но хочется чтоб малейшее соприкосновение на экране детектилось. Да и спортивный инетрес.
Мб в дальнейшем будут тысячи невыпуклых фигур -- поди посчитай все!
>>329369 Многоуровневая кластеризация объектов. Восьмеричное дерево, k-дерево. Прокси-объекты. Пиксели дадут тебе целочисленные координаты, точность никакая соответственно. Какой-нибудь Box2d пощупай. Там в факе как раз написано, почему нельзя пользоваться пикселями.
>>329369 Видеокарта для такого не подходит из-за сильных задержек и доступа через PCI-E. Сделай софтовый растеризатор с консервативной растеризатором, должно выйти если не годно, то хотя бы забавно..
>>327904 если setSwapInterval(1), и SwapBuffers() ждет двух событий: когда закончится рендер и затем v-blank-сигнала, пока эти события не произойдут поток заблокирован.
> То есть приём и обработка событий, нужно производить в других потоках. Если нужно управление, пока рендер тупит, да, нужно всю параллельную обработку выносить в параллельный поток.
> Для этого я прохожу в цикле по всем тайлам и каждый накладываю, как текстуру Текстурные атласы используй. Это более гибкий способ, карту можно, например, хранить в текстуре: один пиксель - индекс тайла, тайлы отрисовывать на плоскость на лету из атласа. (Кольцо вычетов по модулю - наше все, да)
>Когда я пытаюсь зумить изображение, оно превращается в тыкву, текстуры уродуются и становятся заметны швы между ними. Не хрена не понял из твоего описания. Просто зумить текстуру ты можешь матрицей в вершинном шейдере, но разумеется, она будет обрезаться / уродоваться (в зависимости от настройки границ) по границам полигона на который ты её натягиваешь. Если ты работаешь с тайлами, зумь полигоны, а текстурные координаты не трогай.
> Мне приходится заниматься неудобными пересчетами координат. Нахуй не надо ничего пресчитывать (в твоём случае). Умножение в вершинном шейдере геометрии на одну-две (если с вращением) элементарные матрицы выдранные из википедии решат твою проблему. Не забывай, что умножение матриц некоммутативно (некоммутативная группа по умножению, да).
> Хочется рисовать красивые плавные линии Это отдельная песня. Можно формировать точки для сплайна на Си и рисовать линии шейдером, но что бы они были красивые и плавные точки надо брать опираясь на производные - чем резче изгибы, тем быстрее меняются производные, тем чаще выбираешь точки. Можно хуярить сплайны прям в шейдере, но придется ебашить построцессингом и рендерить во фреймбуффер, да и циклы в шейдере - вещь дорогая.
> Пока все, может потом еще вспомню. В какой среде хуяришь? Видюха какая?
>>318311 В пиксельном шейдере при отрисовке кота заменяешь условный цвет глаз, на тот который передаёшь снаружи через uniform переменную.
Более нормальный подход: используешь для задания цвета смещение его в спектре в цветовой модели HSV/HSB, нак удобне поменять желтый на зеленый с оттенками. Для обозначения областей можешь использовать альфа-канал, размечая разные области для закраски можешь использовать альфаканал.
>>332790 Эта машина сожрала параметр, который по здравому смыслу лучше было бы проигнорировать. По крайней мере я так пишу, что если в функцию приходит параметр, который выходит за границы допустимых значений, то она не пытается сову на глобус натянуть, а мирно завершается с False.
>>329129 Возьми любой физический движок и заюзай библиотеку обнаружения столкновений из него. Для столкновений уже давно придуманы быстрые алгоритмы, не надо изобретать велосипед.
>>195365 (OP) Хуй знает, туда ли вкатился, но попробую. Решил попробовать попипасть под ГейОСь на СДЛ, запилил по первому попавшемуся туториалу окошко - а в нем какие-то артефакты, и хуй знает, нормально ли это и как их убрать. SDL_RenderClear пробовал, не помогает. Что я делаю не так?
>>370584 Я про гры ни слова не написал. В любых других областях используют движки. Или ты думаешь что NASA отрисовывает треугольники и изучает GL_BLENDы, бесконечными списки ARB констант и всякое говно вида glEnable glDisable.
>>369110 >>368929 Немного разобрался. Теперь я умею выводить квадратики, менять цвета и считывать ввод с клавиатуры/мыши. Сейчас буду разбираться с рендерингом шрифтов и png. Ву-ху!
>>371429 >FreeType В нём метода нарисовать_заебись(строку), рисует он исключительно по буквам, а потом эти буквы ещё и в слова собрать нужно будет. Это только кажется тривиальным, пока не знаешь, что такое кернинг и лигатуры (а если ещё захочешь для жирного саудовского рынка что-то напедалить - тогда вообще можно будет повеситься с арабским письмом). Короче, использовать нужно harfbuzz.
>>371429 >Хорошо, для шрифтов - FreeType. Нахуя этого монстра тащить? Для всего хватает stb_truetype, да и свой рендер навелосипедить - дело пары недель.
>>375644 Спасибо за предложение. Проблема вот какая была: кручу через шейдер, если текстурки не передаю, то всё чорное. Нужно было, что при отсутствии текстур, fragment shader считал хотя бы то нормалям отражённый свет. Решением было (как советовали на ссылке), делать вкл/выкл через uniform
Сделал вот так:
uniform float no_tex;
void main() { // if(no_tex == 0.0) { ct = vec3(1.0, 1.0, 1.0); // fiat lux cykablat! at = 1.0; } else { ct = texel.rgb; // from the texture at = texel.a; }
>>375925 это для меня сейчас временная мера, пока не разобрался, как решено с текстурами у второй модели. Первая - PMD, вторая - PMX. Но японец, написавший парсер, сваял два класса с несовместимыми по духу структурами данных. Поэтому во второй ещё ничего не биндится совсем.
Вообще у меня такое чувство, что моя прога - куча из OpenGL версий от 1 до 3.1. Эти говна ещё раскидать надо будет
>>375943 Текстуру тебе надо всегда передавать во фрагментный шейдер. Если, например, хочешь отключить отображение текстур на мешах моделях либо делай отдельный шейдер либо передавай прозрачную текстуру.
> Вообще у меня такое чувство, что моя прога - куча из OpenGL версий от 1 до 3.1. Эти говна ещё раскидать надо будет
Есть одна задача, к которой я никак не могу найти решение. Помоги мне, анон?
У меня есть необходимость рендерить в 3д пространстве большое количество плоских поверхностей с составным содержимым. Можно воспринимать это как карточки, они могут состоять из большого количества слоев - фон, рамка, текст, элементы декора. Порядок слоев определен. Плоскости могут быть повернуты в пространстве.
Я не могу рендерить каждую вариацию в свою текстуру (или в одну мегатекстуру), на это уйдет вся память, их может быть около 1000 разных и каждая должна иметь разрешение в районе 1000х1000х32бпп, а это уже 4гб. Я хочу найти способ как мне эффективно рендерить слоеные плоскости в трехмерном пространстве. Может быть есть известные решения? Можно, наверное, их постоянно сортировать и рисовать без z-буфера, но я не знаю насколько это эффективно (учитывая что они довольно часто перемещаются в пространстве, хотя камера в основном неподвижна).
>>378149 Ну смотри, у тебя есть карточка. У нее есть рамка, рисунок, подпись. Все это в каком-то лэйауте лежит на плоском кваде. Вот лэйаут задается набором квадов, лежащих в одной плоскости. У каждого лэйаута свои размеры и своя текстура. Это как слои в фотошопе, только разного размера, а не каждый слой по размеру листа.
>>378288 Но квады лежат в одной плоскости, там будет z-tearing, если включить z-buffer. А если выключить, то придется на каждое движение все сортировать.
>>380840 Это костыли. Если объект будет достаточно далеко от камеры, проекционная матрица съест всю точность и будет тот же z-fighting. А если делать отступы с рассчетом на дальность, то при приближении они будут слишком большими.
>>380858 Рендери свои квады тогда на определённом расстоянии друг от друга и мастурбируй. Чем ближе квад к камере тем он меньше. И если смотреть под определённым углом то будет казаться, что они все в 1 плоскости.
>>381768 Ну, можно и VBO мацать. Я про то спрашивал, не перданут ли их из стандарта, продумав замену.
О своей махарайке: парсю японские PMD/PMX. Как и везде, материалы и прилежащие текстурки относятся к отдельным частям модельки. То есть для рисовки прокручиваю список материалов, для каждого ставлю свет, альфу, текстуры. Эта часть выглядит как из прошлого века при том, что вершинки с нормальками рисуются через VBO/VAO.
У всех с материалами/текстурами такая же фигня (ручками блеат) или я делаю через жёпу?
VAO запоминает порядок вызова glBindBuffer, glVertexAttribPointer(), glEnableVertexAttribArray(), glBindBuffer() То есть помогает с вершинами, нормалями, цветами. Текстуры и материалы как бы этим методом не покрываются. Их ручками.
Кстати, анончики, такой вот вопрос. В GL4.5 добавили вкуснях с именованными хранилищами и прочими именованными ништяками, только вот вопрос в том, стоит ли это все использовать, поскольку, неизбежно, на данный момент времени имеются карточки (впрочем, мне кажется, их довольно много), которые этого не поддерживают (скорее всего, карточки то могут, хули там такого, только ленивые производители драйверов клали хуй на это)?
>>382306 Вот анон подтолкнул меня к одной мысли. Надо ли при перекате делать подробное шапку? Не однократно в треде всплывали дауны которые упорно не видят шапки.
>>382059 По факту то ведь, с появления первых игор на вулкане уже прошло более года, и, насколько мне известно, вулкан - новое название для OpenGL Next, то бишь дальше 4.5 версии он не пойдет? Думаю теперь, а не стоит ли заранее начать изучать новую технологию.
>>382358 Vulkan пока что не имеет костылей, в отличие от OpenGL. Но, видится мне, с развитием технологий он, как и GL, неизбежно их приобретет. А сам OpenGL забрасывать не планировали. Его будут саппортить еще лет 20 как минимум.
>>382333 Видел шапку, но в ней мало конкретики, порог вхождения довольно высокий. Извините если грубо ворвался в тред, просто заметил дружественную атмосферу треда и попросил пояснить по хардкору. Разбираюсь в графоне и фичах, сам тридешник, но очень хочется получить знания богов индустрии, благодаря которым мы, холопы тут без сарказма существуем.
>>195365 (OP) Здорова, бандиты. Не совсем по теме, но посоветуйте какую-нибудь годную либу для звука, чтобы поддерживала максимальное количество платформ, была без LGPL-параши в лицензии и поддерживала статическую линковку.
Ананасы, я тут слышал, что уже давненько SDL завезли под мобильные платформы, а это значит, что можно говнокодить и под ведроидом, я так понимаю. Есть какие костыли известные? Кокос2д не хочу, потому что пошел он нахуй, вот почему (а на самом деле у него кучка довольно неприятных и я даже сказал бы ебаненьких багов)
>>371291 А я продолжаю пилить свой 2D-движок. Для PNG сначала писал свой костыль, но потом нашел отличную маленькую либу upng с хорошей лицензией - и встроил ее. Запилил биндинги для Lua, пишу документацию. Может, когда-нибудь и на гитхаб выложу.
>>387768 >>387703 Да, stb_image явно лучше upng - поддержка куча форматов и плюх вроде интерлейсинга. Разве что собирается долго - аж целых две секунды. Есть вопрос по блендингу - появилась какая-то непонятная для меня вещь: Сначала включаю glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), рендерю свет. Потом - glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA) и рендерю соника - но вокруг него вдруг появляется какая-то левая рамка, причем разная для разных изображений. Знаю, что двухмерный свет надо делать по-другому - сначала рендерятся предметы, затем отдельный черный фреймбуфер для сплошной тени, потом из него вырезаются кружки света, и уже потом он рендерится поверх всего остального. Но все равно интересно, отчего такое происходит. Хоть в какую сторону копать?
Как загрузить текстуру так, чтобы загружать не из отдельного файла, а из кода? То есть я напишу хекс код картинки и она будет загружена в текстуру? как это сделать?
>>387768 >Хм, вижу, что там и рендеринг шрифтов есть Неужели рисовать текст так сложно? Велосипедный SDF рендер текста пишеться за пару дней. За неделю можно написать лейаут для рич текста.
>>389308 Но зачем? Велосипеды велосипедами, но зачем решать задачу, которая была тысячу раз решена для тебя и существуют проверенные, вылизанные до мелочей решения, лучше которых ты всё равно не сделаешь?
>>389346 >которая была тысячу раз решена С чего ты взял, что она решена? До сих пор нет нормального способа векторную графику рисовать целиком на видяхе. С текстом такая же хрень.
>>389346 >существуют проверенные, вылизанные до мелочей решения Которые тянут тысячи зависимостей и которые ты заебешься собирать под нужные платформы.
>>389352 >До сих пор нет нормального способа векторную графику рисовать целиком на видяхе. Настало время прохладных историй. Приятно, наверное, ощущать себя дебилом, сидя в треде про OpenGL и утверждая, что нет способов рисовать векторную графику на видяхе? >>389372 У того же stb_truetype 0(ноль, нуль, зеро, О с черточкой, нисколько, ни одного, отсутствуют) зависимостей, кроме CRT(но блеать мы не на ассемблере пишем, чтобы зависимостей от CRT не было).
>>389389 >нет способов рисовать векторную графику на видяхе? Представь себе, именно так дело и обстоит. На мобилках есть OpenVG, на десктопе решения у отдельных вендоров вроде NV_path_rendering, а нормальной (корректно рисующей) полностью ускоренной либы для графики до сих пор нет. Skia, например, частично на проце все рисует, direct2d - тоже.
>>389389 > stb_truetype > вылизанные до мелочей решения Там такой же велосипедный рендер на коленке, причем тормозной и кривоватый. Она вполне может неправильно рассчитать геометрию для какого-нибудь хитрожопого глифа и нарисовать тебе сегфолт или тихо насрать в память.
Подскажите, пожалуйста, кто знает. Раньше в OpenGL можно было рисовать, используя не float, а integer-координаты. Тогда они означали пикселы. Сейчас, с приходом разных шейдеров, функции вроде glVertex2i устарели, не так ли (теперь, DrawElements и проч.)? Какой наилучший способ рисовать 2D в пиксельных координатах сейчас? Насколько я понял, что бы я не передавал в вертексный шейдер, gl_position всегда ждёт флоаты в формате vec4.
Я спрашиваю просто из-за такой проблемы, что когда масштабирую окно, картинка на мгновение растягивается (особенно заметно в верхней части окна), а только потом перерисовывается правильно. Потом попробую сделать как тут ОП пишет - вызывать swapBuffers не после рендера, а до glViewport. https://groups.google.com/forum/#!topic/angleproject/RvyVkjRCQGU
>>389512 Там проблема ниже, чем glfw. Где-то в wgl/xgl. Отрисовка окна происходит быстрее, чем изменение размера контекста, из-за этого и артефакты. Обычно на это все забивают, все равно через кадр все устаканивается.
>>389654 >>389667 Перечитал вопрос и понял что это не то, что тебе надо. Так, как ты хочешь, сделать нельзя, PBO и текстура это слишком разные вещи, чтобы быть взаимозаменяемыми. Там данные хранятся в разных форматах.
>>389668 PBO и прочая шняга это условности. Нужно замапить видеопамять и перегнать из системной все что нужно в любом формате. А так получается лишний оверхед на копирование. Надеюсь в Вулкане такой хуйни нет.
>>389697 Надейся. Первое что тебе придется делать в вулкане, елси ты хочешь использовать физическую память на видеокарте, - это самому перегонять кучу данных сначала в область памяти API (та же оперативка, только ОСОБЕННАЯ), а уже потом удаленными командами для видяхи коипровать их в видеопамять.
Почему не получается наложить текстуру? Она накладывается как попало (2). И вверху блоки должны быть другого цвета (3). Текстура (4). Код: http://pastebin.com/iZQuARGw
>>391177 Нет, почему в Опенгле такая ебанутая система координат? Впрочем это наверное моя оплошность, ведь я его пытаюсь использовать для создания 2D игры. А сам опенгл очень лёгок. Я SDL не осилил, на простом WinAPI жуткие тормоза, а Опенгл легче всего этого дерьма. Но другие библиотеки для создания 2D игры я не нашёл.
>>391186 >такая ебанутая система координат? Почему ебанутая? Как в математике: если х вправо, то у - вверх, x cross y = z, y cross z = x, z cross x = y. Все строго и логично. Плюс матрицы в памяти лежат по столбцам, что гораздо удобнее - можно сразу с векторами базиса работать.
>>391482 >два треугольника хорошо. спрошу подробнее. мне нужно нарисовать изображение с помощью примитивов и использовать его потом, как текстуру. очевидные ответы вроде "используй fbo " мне не помогут. я не очень хорошо умею в жл.
Хелоу аноны. Мне нужно размыть модельку. Всю сцену я могу розмыть, это не проблема. Мне нужно размыть только одну модель, и при этом только видимую ее часть если ее что-то заслоняет. Как в FBO забрать только видимую часть модели в данный момент? Я придумал конечено же какую-то хуйню не производительную, забирать сцену с моделью и без а потом находить разницу и размывать ее, но я думаю что это херово два раза рендерить в FBO. Как это нормальные люди делают?
Здрасьте. Есть вопрос по поводу, как сформировать текстуру в виде массива с данными, не используя при этом отдельный bmp/jpg-файл в идеале, ссылку на лит-ру/мануал-пример. Смысл в том, что формируется два (на самом деле нужен один) массива, в одном даны числовые значения (values), во втором - им соответствующие параметры цвета (colors). В текущем варианте использую готовый способ считывания файла с jpg-текстурой (готовая цветовая шкала) из библиотеки FreeImage, но это не то, нужна возможность динамического изменения её (шкалы) свойств что-то типа bitmap без файла, отдаленно
>>392303 Ну то есть мне надо засунуть массив, задаваемый в проге, из 128 RGB цветов, своих, не используя для этого файлов и сторонних библиотек. >>392304 Надеюсь поможет
Сейчас дошёл до матриц, хочу крутить треугольник. Везде для этого предлагают библиотеку GLM, но работает ли она под Си? На википедии написано, что это для C++, в 3.5 статей всё на C++, у неё заголовки .hpp, я не могу скомпилять прогу с ней, gcc ругается. То есть только кресты? Есть ещё какие-то библиотеки? Я бы не хотел велосипедить всё это дело, я хочу трудэ писать.
>>392868 В шейдере нельзя в texelFetch задавать вещественный тип. Я конечно могу сам смешивать цвета, например, если координата 98,3, то взять координату 98 и тупо прибавить к каждой rgb-составляющей 30% от разницы между цветом[99] и цветом[98]. Просто не хочу лишний раз нагружать шейдеры еще и этим (хотя если сделать это в вершинном, то вроде сильно не скажется).
>>392717 >Я бы не хотел велосипедить всё это дело, я хочу трудэ писать Написать базовую либу для векторов/матриц - дело пары дней. Заодно и разберешься что там к чему. Хинт: инверсия матрицы 4х4 общего вида требуется в 0.0001% случаев.
>>392867 > Однако не нравится формат "текстурных координат" в формате 0-:-127 (допустим цветов 128), вместо 0-:-1, целочисленные, короче. В смысле? Можно попробовать упаковывать во float16 координаты.
>>392869 Ну texelFetch для дискретных и быстрых выборок используется. Я не думаю, что твоя линейная интерполяция будет работать быстрее, чем встроенная.
>>392871 Да мне бы с самим opengl сначала разобраться. А то два дня пердолился а понял ровным счётом нихуя. Сейчас всё переписал, вдумчиво, и чёто-както дошло до головы-то моей, но захотелось мне камеру повращать, а тут матрицы, бляяяя пиздеееец, сложно. И вот сейчас я кажись понял суть ШОК КАМЕРА НЕ ДВИГАЕТСЯ ЭТО ПРОСТРАНСТВО ВОКРУГ МЕНЯЕТСЯ, и надо бы воплотить всё в жизнь закрепив знания, а ты предлагаешь мне на написание своей либы отвлечься. Нельзя так делать, нельзя отвлекаться.
>>392888 > Если ты матриц не понимаешь, то за трехмерку можешь даже не браться. Ты так говоришь, как будто все с рождения гуру матриц а я особенный. Всё приходит со временем. Спасибо.
>>392885 > Да мне бы с самим opengl сначала разобраться. Блять, да что с тобой такое? То не нравятся ему туторы на С++, то не нравится ему шинда, то не устраивает версия ГЛа. Может просто заткнуться и взять готовое, научиться, а потом от этого отталкиваться с понимаем что ты делаешь и к чему это приведёт?
>>392895 > То не нравятся ему туторы на С++ Я запутаюсь. > то не нравится ему шинда Сложно. > то не устраивает версия ГЛа. Я не разобрался, о чём уже писал. Извиняюсь за это.
> Может просто заткнуться и взять готовое Либу уже нашёл, так бы временно использовал glm.
>>392885 Бля, не осиляю камеру. Может кто доставить понятный гайд по ней? Если этот гайд будет на русском, то вообще заебись. Просто посчитать я посчитаю, а куда дальше просчёты отправлять, что с ними делать, зачем что-то с ними делать, как быть с шейдерами и т.д. непонятно. Помогите, Анончики. Нужно доходчивое объяснение.
>>392922 Кресты? RAII, смартпоинтеры, исключения, стандартную библиотеку (коллекции на шаблонах, треды, файлы, строки, регекспы и т.п.), ООП в конце концов.
А ещё лучше - пиши на джаве, там всё то же, только лучше.
>>392931 Ты вот сейчас шутки шутишь, а потом для своего ёба-оптимизированного движка на Ши будешь писать логику на каком-нибудь говноскрипте с багами, тормозным рантаймом, ебанутым ГЦ и прочими радостями опенсорса.
>>392928 То чувство, когда в джаве нет деструкторов... Пичаль беда, хотя бы на GC деструкторы завязывали бы, а то так, как ни крути, на крестах ресурсами в некоторых случаях управлять гораздо удобнее.
>>393163 > А почему он должен быть плохим? Не знаю, мне он вполне нравится, да и выглядит логичным. Главное запомнить как называются все элементы, а то без комплнетишинов тяжело писать-приходится вечно в доки лазить. > В GLFW вроде бы добавили поддержку Вулкана. Так это всё равно интерпритатор в API вулкана, не нужно.
> Скажу то, что раз ты юзаешь библиотеки Qt то почему бы контекст создавать безо всяких сторонних либ того же SDL?
Ты имееншь ввиду зачем мне QT? В нём удобные сигналы, и цикл выполнения. На чистых крестах пришлось бы делать что-то вроде while (true). Или ты спрашиваешь зачем мне SDL если есть QT? В кт опенгл какой-то непонятный, почти нет документации. Ни асилил короче.
Итак, анон. Наступило время переката. И вот вопрос. Как организовывать шапку? Есть мысля залить её на https://gist.github.com/ и со временем что-то убирать/добавлять т.к. в текущей шапке есть мёртвые линки (ну по крайней мере месяц назад точно). И в будущем всё равно найдутся долбаёбы которые просят ссылки на туторы игнорирую шапку вообще. Что скажешь?
Сука, почему когда я два часа серчу инет в поисках очередного говна, которое мне нужно вымучить за неделю и сдать в свой говновузик, чтобы не отчислили нахуй, рано или поздно все сводится к тому, что я прихожу на ебучий двач? Что блять пошло не так в моей жизни?
Треугольник сам себя не нарисует!
Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси.
Добро пожаловать. Снова.
Архив:
http://arhivach.org/thread/28624/ - 1
http://arhivach.org/thread/47586/ - 2
http://arhivach.org/thread/64117/ - 3
Документация:
https://www.opengl.org/sdk/docs/man3/ - OpenGL 3.3
https://www.opengl.org/sdk/docs/man4/ - OpenGL 4.5
https://www.opengl.org/wiki/Main_Page
http://docs.gl/
Тьюториалы:
> OpenGL
http://www.learnopengl.com/
https://code.google.com/p/gl33lessons/
https://triplepointfive.github.io/ogltutor/index.html
http://opengl-tutorial.blogspot.ru/
http://www.opengl-tutorial.org/
http://www.tomdalling.com/blog/category/modern-opengl/
http://www.lighthouse3d.com/tutorials/glsl-tutorial/glsl-core-tutorial-index/
https://en.wikibooks.org/wiki/Category:OpenGL_Programming
> Математика
http://www.rossprogrammproduct.com/translations/Matrix%20and%20Quaternion%20FAQ.htm
http://www.gamedev.ru/code/articles/faq_matrix_quat
http://www.gamedev.ru/code/articles/?id=4215
Библиотеки:
> Контекст
https://www.libsdl.org/
http://www.glfw.org/
http://www.sfml-dev.org/
> Загрузка текстур
https://www.libsdl.org/projects/SDL_image/
https://github.com/nothings/stb
http://gli.g-truc.net/0.7.0/index.html
> Математика
http://glm.g-truc.net/0.9.7/index.html
> Расширения
http://glew.sourceforge.net/
Книги:
> OpenGL
http://rutracker.org/forum/viewtopic.php?t=5047442 - Superbibile 7 (вышла летом)
http://www.amazon.com/OpenGL-Shading-Language-Cookbook-Second/dp/1782167021/
http://www.amazon.com/OpenGL-Programming-Guide-Official-Learning/dp/0321773039/
> Математика
http://sernam.ru/book_mm3d.php
http://www.amazon.com/Math-Primer-Graphics-Game-Development/dp/1568817231
http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Edition/dp/1435458869
Полезные ссылки:
http://tfc.duke.free.fr/
http://tfpsly.free.fr/bookmarks.html
https://www.youtube.com/user/BSVino/playlists
https://www.youtube.com/user/thebennybox/playlists