24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Сап, ананасы. В общем, проблема такая. Когда пробовал и изучал гл по началу, то для вершин, текстурных координат заводил новый vbo и, соответственно, с атрибутами у меня было меньше возни. Ну то есть для вершин, текстурных координат был свой vbo и начало данных в атрибутах я ставил 0. Проблема такая. Как в один буфер поместить все данные и выставить атрибуты правильно?
>>141319 Разобрался. Тащемта, нужно в начале узнать сколько данных в байтах нам надо засунуть в буфер, но не заполнять его данными, а потом через BufferSubData пихать. Примерно так:
Имеется задача: нарисовать в 3d ландшафт. Я реализовал это с помощью старых glBegin/glEnd/glRotate, вот это всё. (Ну, отрисовал треугольниками карту высот) Теперь решил переделать с шейдерами и добавить текстуры. Собственно вопросы: 1) Мне теперь придется самому реализовывать все повороты/увеличения с помощью матриц? 2) Как лучше всего отрисовывать ландшафт?(Имеется карта высот) 3) Какую версию OpenGL юзать? Я читал, в 4+ там появились какие-то еще шейдеры. Они мне нужны вообще? 4) Как мне научиться писать шейдеры? Что лучше прочитать? В основном попадаются просто абсолютно бесполезные статьи, из которых ничего не понятно.
Я понимаю, что вопросы, наверное, очень глупые, но я я буду благодарен, если кто-то пояснит.
>>141454 В отрисовке ландшафта главное запилить алгоритм LOD, а это задача по сложнее чем просто нарисовать треугольники по карте, особенно если нужен большой ландшафт и качество.
Пасаны, я, как узнал про VBO, помешался на нём совершенно. Теперь мне думается, что все объекты даже небо, даже Аллах должны быть сохранены как вершинные буферные объекты, чтобы повысить скорость отрисовки до небес нахуй. Неужели в геймдеве используют только это? glBegin и glEnd же устаревшее говно, которое уже давно никому не сдалось. У меня сомнения насчёт эффективности VBO, когда дело касается динамических объектов. На статичную карту-то похуй, а вот персонажей я захочу сделать двигающихся или там кубик повертеть, мне же придётся сперва себя на хую вертеть и в бубен бить, долго ебаться с установкой всяких указателей на нужные вершины. Развейте мои сомнения насчёт затратности VBO в динамике. И что делать, если я хочу для 1000 кубов создать уникальный VBO, а потом крутить, вертеть кубы, хехей?! Какой максимум на количество VBO объектов определён? На opengl.org что-то читал про 4Mb, но я так понял, это рекомендуемый максимум только на один объект VBO?
>>141470 Что-то я проиграл с твоего поста. Алсо, я вот изучаю код Дума 3, ну который бфг - он переписан на гл 3.3. Так вот я там заметил класс который хранит данные для уровня, ну то есть та геометрия которая не меняется и для данных динамических - противники, оружие и тд. Может быть это оно. Но я вот я уже давно их изучаю да и с гл тоже не первый день, но всё равно не понимаю многого оттуда. https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/renderer/VertexCache.h#L75
>>141470 >И что делать, если я хочу для 1000 кубов Рисуешь куб 1000 раз с 1000 разных матриц. >максимум только на один объект VBO Да. >что все объекты должны быть сохранены как вершинные буферные объекты А кроме ВБО нету способа что-либо нарисовать в ОГЛ 3.2+. ГлБуферСабЭррей тееб в помощ.
Запутался с матрицами совершенно. Есть сцена, с расположенными на ней объектами. Меняется позиция и угол вращения камеры. Код http://pastebin.com/a5sSYqZ0
Вращение объектов происходит относительно глобального центра, а не вокруг собственной оси. Пробовал перемещать позицию игрока в центр и сбрасывать угол камеры, потом крутить объект, перемещать его и возвращать обратно позицию игрока и угол камеры. В итоге не работало. Не понимаю логики работы.
Начал изучать opengl 3.3 и столкнулся с непоняткой. Читаю сейчас http://www.gamedev.ru/community/ogl/articles/lesson02 и в конце, когда делается рендеринг я вижу вот такую строку glDrawArrays(GL_TRIANGLES, 0, vertexCount); Как определяется что именно отрисовывается? Ну например у меня есть массив не из 3, а из 9 элементов. Как они нарисуются? Что мне сделать, чтобы нарисовать, к примеру, куб, который строится по 4 точкам?
>>141146 Кто-нибудь может объяснить почему сглаженные полигоны делаются с помощью какого-то там мультисэмплинга, а не просто алгоритмом Ву? Чего я не улавливаю?
>>141146 Сап, гдач. Начал читать вторую книгу из раздела Maths. Вначале книги говорят о том что читатель должен знать как строятся модели из вершин и полигонов. Так вот, я этого не знаю, что почитать кроме страницы в википедии? Вообще стоит ли мне это изучать, если я не делал ничего кроме тетриса в готовом движке? Мне 21, из Дефолт-сити, нехиккан и я сижу дома, так что время свободное есть, и могу в общение. Наверно таких как я миллион.
>>141865 Ну я тупой. Я хоть и переиграл в кучу игр и немного умею в программирование, не совсем понимаю что значит это. Есть вершины в модели и они соединены полигонами, которые представляют примитивные фигуры?
>>141858 >алгоритмом Ву Для каждого внешнего пикселя полигона нужно посчитать растояние до его ближайшей прямой контура полигона и сделать его полупрозрачным. А если считать что полики рисуются в несколько ядер по сетке, то вангую ошибки смешивания полупрозрачных контуров. А он более затратен, чем простая отрисовка в больше разрешении и масштаб с мультисемплингом.
>>141867 Представить что такое полигон - гугли "карта высот". Представить что такое 3Д фигура - нарисуй куб. Понять - гугли "постоение моделей из треугольников."
Сап, gl-ушаки, как пользовать долбаный индексированый VBO? Есть одна obj модель из которой я вытаскиваю всякие потроха в виде: vector<short> v = {v1.x, v1.y, v1.z, v2.x ... } vector<short> n = {n1.x, n1.y, n1.z, n2.x ... } vector<unsigned short> t = {t1.u, t1.v, t2.y ... } И индексы: vector<unsigned short> e = {V1, N1, T1, V2, N2, T2 ... }
Ананасы, как сделать камеру при помощи glm? http://opengl-tutorial.blogspot.ru/p/6.html Пытался вот по этому уроку делать. Попробовал сделать без движения, просто обзор мышкой. Вышла хуита даже не похожая на камеру. Начинать изучение гла я начинал вот по этим урокам: https://code.google.com/p/gl33lessons/wiki/Lesson04 И вот дошёл до 4 и там как раз камера, но используется своя мат библиотека и соответственно функции немного различаются. Например поворот матрицы.
Ребяты, хочу пилить двумерный движок, в шапке не нашел ни одной статьи и по теме. Прочел пару книжек про ОпенГЛ, но ничего там блядь, про написание графических движков нет.
Знаю про вертексы, знаю про текстуры. Разжился знаниями по ВБО. Хочу собрать их в хорошую, но не шибко сложную архитектуру.
Пробовал читать исходники, но они часто бывают наполнены магическими числами, которые ничего не объясняют.
Хочется какую-нибудь статейку хотя бы с разбором внутреннего содержимого двигла, так чтобы хотя бы с куском теории о том как и зачем все это было написано.
>>142075 Ну началось. Ясен хуй, что все придумано до меня, но я хочу знать, что же там блядь, придумано. Я хочу разбираться в том, что там внутри, как оно работает и почему оно так работает.
Конечно, давайте опять пообсасываем тему того, что нужно использовать движки.
Ну давайте, скажите это тем, кто блядь на Юнити с использованием физического движка будет делать арканоид, жрущий дохуя памяти и тактов процессора на то, чем в действительности он не польлзуется.
Снова выхожу на связь со своими ВБО >>141995-кун. Пересмотрел тутор с opengl-tutorial.org и приуныл. Если я правильно понял, индексируются только одинаковые комплексы атрибутов вершин [координаты, нормаль, текстурные координаты]. Получается, что если даже если на каждую вершину натягивается только одна текстурная координата, из-за нормалей (которые одинаковы для треугольников, а не вершин) эти комплексы будут разные. После индексации мы получим массивы проиндексированных атрибутов, которые по размеру равны неиндексированным. Плюс перерасход памяти на массив индексов. Может можно как-нибудь привязать атрибуты раздельно? ARB_vertex_attrib_binding вроде только с opengl 4.2, а моя говнокарта может только в 3.3.
>>142091 Ты нихуя не понял, читай еще. Я тебе уже пояснил и с кубиком и хуюбиком и тыкнул в то, что у тебя структуры ВБО - говно. Короче, пиздуй читать еще.
Есть вектор, который нужно вращать в системе координат камеры пропорционально dx и dy курсора мышки. Вращать можно последовательно вокруг "верха"(UpVec) на dx, затем "бока" (StrafeVec) на dy. После того как повернутый вектор найден нужно заново расчитать матрицу вида mLookAt(куда). И еще есть морока с определением нового базиса камеры. Камера может "завалится", для избегания этого я всегда беру как ось верха "Y+" вне зависимоти от реального верха как cross(X, Z).
>>142097 Еще забыл добавить, во второй статье рекомедуют на колесо повесить изменение fov'а для приближения без измения позиции. Это требует каждый кадр пересчета матрицы прекции(не как что-то плохоe). Но имхо не очень удобно, у меня по колесу изменение позиции наблюдения вдоль вектора "вперед", т.е. камера приближаться к центру вида.
>>142096 >Ты нихуя не понял Иначе бы не спрашивал. >читай еще. Пять раз перечитал, не понимаю. Вот результат индексации из того примера с кубом, вершин стало использоваться меньше, но почему их осталось 28, а не 8?
>>142110 Потому что при индексировании считается уникальность по всем атрибутам. v(p1, n1, t1) != v(p1, n1, t2) - в индексе такие вершины будут считаться разными.
Для куба хватает 8 позиций которые образуют 12 треугольников или 36 вершин. Внимание вопрос: сколько для куба надо различных нормалей и текстурных координат?
Допустим нормалей тоже 6. Это нормали к грани, а не к вершине. Тогда одна грань куба будет: v(р1, n1) v(р2, n1) (р3, n1) - первый треугольник v(р3, n1) v(р2, n1) (р4, n1) - второй треугольник Занимает 4 вершины в индексе, итого 24 вершины для куба.
Теперь если добавить текстурные координаты у тебя вылезет еще 4 уникальных вершины. Хз почему, зависит от степени ебанутости экспортера и артиста который делал развертку.
>>142113 Вот именно это меня и напрягает, на нормальных моделях экономия при индексации почти никакая, какой толк тогда, если можно пилить VAO и не париться? Или есть другие подходы к этому вопросу?
>>142115 Да можно на простых моделях типа куба особо нет разницы рисовать в лоб 36 вершин или 24 через индекс. Но попрошу заметить, что ультра хардкор сжатие это рисование куба всего за 8 вершин вида v(pN, nN, tN). - сглажениые нормали(четкие грани редко когда нужны) и впритык заполненое текстурное пространство(на это влияет кол-во швов у модели, чем меньше тем меньше дублей вершин по текстурам).
>на нормальных моделях экономия при индексации почти никакая Наоборот максимальная. У твоего сферического примера четкие грани и я нащитал(могу ошибисться) 14 швов. УГ кароч.
>>142117 Пжлс. Хотел еще сказать - не заморачивайся байтоеблей и рисуй все через индекс. Индекс ебут 3д-редакторы и руками строить его не нужно, памяти у видеокарт от 1 гига и дай б-г если 10% ее заполнено сетками и шейдерами, а все остальное тонет в full-hd текстурах. Бери проще!
Поцоны, объясните мипмапы. Не совсем понимаю что с ними делать. Сейчас, когда изучаю, рисую простые кубики и понятное дело можно с мип уровнями не возиться. Но надо будущее надо учесть. Вот есть функция glGenerateMipmap, мне её нужно применять, наверное, не для всех текстур например к текстуре оружия нет, он и так постоянно рядом с near plane. Я так понимаю драйвер сам будет выбирать какой мип уровень использовать?
>>143766 > драйвер сам будет выбирать Да. >glGenerateMipmap, мне её нужно применять, наверное, не для всех текстур И да и нет. Если оружие под углом к плоскости экрана - то мипы нужны.
>>143769 А где про них ещё почитать? Как генерировать? Сколько уровней задавать для текстуры? Удаление их из памяти? Ну в общем пока вот такие вопросы.
>>143766 Если у тебя в работе планируется "использовать" текстуру на разных от камеры расстояниях, то для нее мипмапы нужны. Обычно мипмапы генерируют при сохранении текстур, типа DXT. Драйвер по умолчанию сам выбирает, но можно и самому указывать.
Привет. Есть какая-то русскоязычная книга по OpenGL 3.3+(чтобы обязательно про программирование шейдеров было)? Я могу читать какие-то статьи на английском, но это происходит очень долго. Поэтому хочу почитать русскую книгу. Лучше бы это был перевод, но русский автор тоже пойдёт. Буду рад, если что-то подскажете. Спасибо.
Раньше делали отрисовку в glBegin/glEnd. Потом через буфер (VBO, VAO - всё такое).
gluSphere - какой вариант использует? Если первый - какой тогда вариант есть отрисовки через vertex buffer, кроме как самому генерить вершины(т.е. есть ли стандартые функции)?
Еcли нужно преобразовать первый пик во второй, то нужно сделать дополнительную одномерную текстуру маски по Х c со значением (начало затенения по Y). Это можно сделать через свертку, отдельным проходом.
Затем уже делать чистый проход типа: if (TexCoord.v - Tex1D(TexCoord.u) > 0) FragColor = Белый; else FragColor = Чорный;
Суть это графическое представленя построения одномерной теневой карты, для затенения в двумерном пространстве.
Строится так: Оределяется шаг в градусах как (TexResolution / 2pi) Трасируется луч(начало - позиция ИС, с шагом угла) Ищется пересечение с 2d геометрией. Растояние заносится в тектуру как Tex[CurrentAngle] = Distance(или MaxLightDistance, если нет пересечения ни счем).
Потом, при отрисовке геометрии, растояние из текстуры сравнивается с растоянием текущего пикселя до ИС по заданому углу - елси больше то пиксель в тени, иначе он на свету.
>>144645 Не-не-не, ты не понял. Вот смотри, есть рандомная фоновая картинка. С цветом, и прочим. Например, горелый дарт вейдер. Есть текстура с отрендеренным туда текстом. Прозрачный фон, чёрный текст.
Что делает шейдер: 1) Берёт пиксель из дарта вейдера 2) Инвертирует ему цвет 3) Присваивает этот цвет пикселю, который находится уже в текстуре с текстом.
Таким образом, текст должен быть виден на любом фоне и поебать на цвет фона.
>>144652 Ну бля https://www.shadertoy.com/view/llX3zM На шейдер той нельзя запилить свою пикчу, но я подобрал шахматную доску и сделал ее белый прозрачным, типа чёрные кубики получились.
>>145074 1) Программа стартует. 2) Загружает необходимые данные для уровня, например. 3) Запускается главный цикл. 4) Считывает данные с клавы/мыши. 5) Расчёт игровой логики/мира. 6) Рендеринг 7) Goto 4
Подскажите саму концепцию разработки с опенгл. Я вот заметил что с его помощью можно обрабатывать столкновения объектов. Но стоит ли так делать? Ресурсоёмко ли это?
>>145569 > это спекуляр вылез с обратной стороны Да, это был он. Я убрал передачу его в шейдер и всё ок заработало, но, понятное дело, это не решение проблемы. >>145570 >либо минус у дота потерял Зыс. Я использую GLM, а в тех уроках юзается самописная либо. Так вот, я шейдере ( который у урока, а не мой ) поставил у дота поставил минус и стало также как и у меня! Ну и я, соответственно, поставил у себя минус и у меня эта проблема пропала. Вот эта строка: https://code.google.com/p/gl33lessons/source/browse/tags/lesson04/data/lesson.fs#61
Если данные входные одни и те же, даже шейдеры ( ну почти ) идентичны, то думаю проблема в математической либе. Это ещё и подтверждается тем, что начальные координаты камеры тоже идентичны, однако моя камера стартует где-то в жопе сцены, а в уроке всё норм!
>>145762 Ну дак это я знаю. Перед отправкой их в шейдер view на projection умножаю. Передаю матрицу модели и матрицу нормалей этой модели ( это для освещения ). Ещё эти пляски с освещением не нравятся: > Стоит отметить, что при использовании FFP OpenGL освещение рассчитывалось не в мировой системе координат, а в видовой. На мой взгляд это не очень удобно, т.к. видовая система координат связана с камерой, а источники освещения удобно задавать в мировой системе координат и именно там и производить весь расчет.
>>145773 Ты можешь считать в любой системе в какой нравится. Но в общем освещение считают во вью спейсе, а перевести из мира в вью спейсе - это совсем не проблема. FFP уже лет 10 используется. ВЫкинь нахуй туториал.
Анон, вопрос насчет процесса разработки, гугление на русском и английском не даёт результатов.
Начал изучать OpenGL 3.3 по туториалам с http://opengl-tutorial.org Всё нормально компилируется, но при отладке даже самой первой программы в Visual Studio программа не работает как надо, потому что использует интегрированное видео вместо моей GT630M на ноуте. Как заставить программу использовать дискретное видео по-умолчанию? Неужели для каждого туториала придётся в панели управления видеокарты устанавливать для каждой программы использование GPU вместо CPU?
>>146422 Забыл упомянуть, драйвера на ПЕЧ стоят последние. Может где нужно включить опцию автоматического использования карточки при вызовах процедур OpenGL 3.X?
>>146430 > дебагер как чайлд запустится тоже с интегрированой С дискретной, ты наверно имел в виду? Да, я как раз подумал об этом, потому что при автовыборе дискретки все кому не лень будут использовать её. Однако опять же при запуске скомпилированного приложения не из студии придётся делать лишние движения для запуска приложения с поддержкой GPU. Думаю, на время разработки можно оставить автовыбор GPU.
Посоветуйте пожалуйста что-то почитать по теме. В общем: Использую ogl3.3. Научился генерировать ландшафт, научился настраивать текстуры, двигать камерой, масштабировать, вот это всё. Теперь я хочу научиться, например, создавать шар и двигать его по ландшафту. С чего мне начать? Как происходит взаимодействие шара с ландшафтом (Имеется карта вершин).
>>148724 Самое главное то забыл для js. То есть чтобы я мог в браузере opengl вертеть, чтобы делать вещи типа прилеплейтеда без всяких плагинов, но и без низкоуровневых матриц http://play.ironbane.com/
Аноны, генерирую атлас с символами с помощью freetype, пихаю, соответственно в текстуру формата GL_RED. Какие BlendFunc выставлять, чтобы с прозрачностью выводилось? И самое главное непонятно, как определять какой у меня формат, чтобы менять блендинг. И вообще поясните за смешивание, весь гугол прочитал, не могу понять, что и как.
>>148883 >BlendFunc Пиздуй нахуй со своим Блендом, в шейдере обрезай по значению. Или же делай правильный порядок вывода, чтобы бленд сработал, ато ты рисуешь сначала шрифт а потом остальное.
>>149113 >тот же функционал Какой "тот же", блять. Блендинг состоит из двух частей, мать вашу: Задать в коде програмы: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Ребята, я, наверное, уже тут всех заебал, но у меня так и не вышло нормально задать текстуры. В интернете примеры только со старым ogl и они там просто делают это функцией. Расскажите кто-нибудь, как вы устанавливаете проективные текстуры? Или покажите код. Какой-то анон посоветовал: >Передавать в текстурные координаты нужно только вертексные координаты, умноженные на model матрицу. но это похоже на неправду. Или я просто не понял. Или другой пайплайн. Вот мой тред: https://2ch.hk/gd/res/148803.html Я уже заебался. На стаковерфлоу постоянно кидают эту статью http://home.xyzw.us/~cass/qcoord/, но она нихуя не очевидная. Какие-то вертексы задают vec4 векторами.
>>149185 Объясню популярно еще раз. Итак, для чистоты эксперимента ты будешь передавать в шейдер только координаты вершин. Текстурные координаты оставь в стороне, закомменть. В шейдере, до перемножения на всякие матрицы, ты присваиваешь текстурным координатам (которые vec2) два координаты из позиции вершины (поиграйся со значениями, xy, yz, xz, я хз какая у тебя там система отсчета). Потом ты накладываешь текстуру с помощью этих самых полученных координат и выкладываешь скрины.
>>149262 >>149185 И не забудь про glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
>>149277 А нет, как-то странно просвечиваются некоторые части. Вот на пике пример. Вот это странное пятно - это бугор, который на ландшафте там дальше находится. То-есть, видно его часть снизу-вверх. По-хорошему, нужно сначала освещение сделать, а то хуево видно всё это. Я может напишу еще как-нибудь.
Сап, ГЛьщики. Решил давеча сделать отражения в экранном пространстве, но столкнулся с тем, что трейсинг стреляет уж очень не точно - малейшее движение и пиксели на отражении скачут как кролики весной. Есть у кого идея или статья какая, где описано решение?
Блин, ребятки, какая крутота http://youtu.be/rL8zDgTlXso, я аж прослезился! Может есть у кого-то статья, туториал, видеоурок, как сделать подобное? Нет, не хочу сделать тутор по такому, хочу кубики создавать.
>>153843 Нормально ответить можешь? А то я нашел гайдики на 3.3, но они морально устарели, это не говоря о том, что у меня cmake отказывался что-то там конфигурировать (я нихуя не понел, гугел не помог)
>>153842 Что тебе в тех туториалах не нравится? С 3.3 в пайплайне ничего принципиально не поменялось. Учи базу по этим, дальше уже расширениями и тесселяцией обмазывайся, если так надо.
Суп велосипедистам. Сам велосипедист. Хочу поделиться с аноном своей маленькой находкой, которая возможно не всем очевидна.
В своем велосипеде я хочу дать возможность пользователю легко переключаться между оконным и полноэкранным режимами.
Проблема №1. В винде стандартное окно (с рамкой и заголовком) и для полноэкранного режима (без ничего) - две большие разницы, поскольку нельзя сделать из одного другое после создания. Решение: создавать два окна и переключаться между ними по команде (например в крузисе по wm_maximize для первого и wm_restore для второго, лoл).
Проблема №2. Для первых экспериментов ещё куда ни шло завязывать процедуру рендера на оконные сообщения типа wm_paint, wm_timer, но теперь это мягко говоря странно. Плюс создавать по контексту на каждое окно и потом расшаривать между ними объекты. Гемор наверняка тот ещё будет. Решение: по наденным в инете рецептам видно, что вполне нормально использовать один контекст рендеринга по необходимости переключаясь между несколькими контекстами устройства (окнами). Тогда выносим весь код рендера в отдельный поток, и туда же можно код создания контекста - чтоб оконные потоки уже этим не занимались. Остается только вовремя подавать потоку рендера сообщения о смене контекста устройства и изменении размера окна.
Проблема №3. Первое окно работает, из второго сыплется ошибка 2000 - неправильный формат пикселя. Преамбула: изучение OpenGL ещё во времена 1.1-1.2, привычка писать в одну харю одно окно, спагетти и т.д. Короче процедура создания контекста тогда состояла из установки формата пикселя в контексте устройства и создания контекста рендеринга, и была слеплена воедино, а ныне добавилось еще объявление реального контекста для третьей или более новой версии. Решение: отделяем установку формата пикселя из общей процедуры создания контекста в потоке и переносим ее в обработчик wm_create для каждой формы, а передача контекста устройства при смене окна уже работает.
Итог: рендер работает в собственном потоке независимо от окон (их можно теперь насоздавать пачками), ну и не забываем при закрытии окон сначала завершить поток рендера, освободить ресурсы и закрыть контекст.
>>153220 Ребята, я конечно понимаю, что вопрос тупой, но вот в этой статье код написан на питоне, в чем его можно компильнуть? В статье, я так понял, он работает на Линуксе и начал туда особых Линукс онли ИДЕ, а для Вин64 какие есть аналоги?
Объясните пожалуйста, как нужно делать разные текстуры для разных объектов? Я имею ввиду, нужно передавать в шейдер несколько текстур и там как-то выбирать? Или можно как-то хитро назначить разные текстуры перед отрисовкой? Пытался найти в туториале каком-то, но задолбался разбираться в убогой архитектуре и какой-то виндоус-дрисне. Подскажите пожалуйста.
Почоны, есть ли какая-нибудь книжка по OGL 4 на русском, которая охватывала бы самые простые и общие принципы, чтобы я мог сразу начать писать двигло без вкуривания деталей? Алсо, пешу на кьютэ.
>>156510 Подозреваю, что отрисовка вместе с изменением угла забита тупо в бесконечный цикл. Прибавляй к углу вместо простой константы константу умноженную на время с момента предыдущей итерации. Псевдокод: Перед циклом: OldTime = GetTickCount В цикле: Time = GetTickCount Angle = Time - OldTime * X OldTime = Time
X подбирай изходя из необходимой скорости вращения, в зависимости от того, в градусах или в радианах углы используешь, и с учетом, что GetTickCount возвращает миллисекунды.
>>156536 Упарывался раньше. Не треугольниками, конечно, ведь это бессмысленно. Софтрендер - это воксели, безграничная деталь и все такое. Тут раньше треды были, но постепенно кроме меня все забросили.
Анонасы, знаю что вопрос совсем говно, но уж извиняйте. Сидел 5 лет на с++, щас захотел новых анальных ощущений, хочу перекатиться в ОпенГЛ. И ВНЕЗАПНО огромное количество библиотек для одного и того же. Какую выбрать для нормального изучения? Чтобы и туторов было не 1.5 штуки, и не совсем старье.
>>156800 >>156819 Так я ж говорю, для базового изучения. А то я нашел какие то GLUT, GLEW, и еще какие то. Так вот и вопрос, если они все одно и то же делают, то что выбрать то? Или они все разные а я в глаза ебусь?
>>156944 >>156926 GLUT, FreeGLUT говно мамонта. Бери GLFW, SDL2, SFML для создания контекста. GLEW для подключения расширений чтобы ручками ничего не делать. GLM для математики. Хули тут читать-то?
Посоветуйте какую-нибудь либу для создания окошка, обработки инпута и по возможности аудио. SDL не предлагать, он какой-то ебанутый, хз как его параллелить.
Нужно запилить программу которая отрисовывает трехмерный объект из файла obj оси координат и плоскость. Должна быть возможность вертеть сцену мышкой. Как трудно такое сделать?
>>157681 Кут слишком тяжеловесное говно. 50 мегабайт для пустого окошка? Как-то дохуя. Нет, он хорош, тут не поспоришь. Но не для геймдева. Для энтерпрайза, для тяжелых гуёв. Но для геймдева - очень плохой вариант, ты фактически будешь использовать 5% функциионала, но заплатишь всю цену в виде огромного дистрибутива, недостатка скорости в критичных местах и долгой компиляции проекта. >>157676 Иксы полезно покопать чисто в образовательных целях, когда хочется поближе понять систему, и кроссплатформа не нужна. Для кроссплатформы да, GLFW рулит, тут спору нет.
>>157723 Я и не просил писать лабу, я хотел узнать как много мне нужно знать чтобы сделать это и основываясь на этих знаниях поставить сроки. Проебусь конечно, как всегда
>>157909 Тебе нужно знать как загрузить модель, как ее перевести в ВБОи как этот ВБО нарисовать. Потом тебе нужен класс камеры. Плюс нужен ВБО с осями и ВБО с плоскостью Аж 2 треугольника. А, еще шейдеры, да. Все.
Тебе нужен класс для загрузки модели, класс для перевода в в ВБО, и ВБО тоже в классе должен храниться, как этот ВБО нарисовать тоже должен класс делать. Потом тебе нужен класс камеры. И класс мышки. И класс клавиатуры. Плюс нужен класс ВБО с классом осей и класс ВБО с классом плоскости. Аж 2 класса треугольников. А, еще класс для шейдеров, да. Все.
>>158037 Тогда это был бы "xml для загрузки модели…" етц. У жаборабов выбора нет, да и не лезут они со своими классами куда попало. А вот крестобляди всегда всё начинают с классов. В жопу алгоритмы, в жопу проектирование, в жопу структуры данных - у нас будет класс для хранения вот этой хуйни и ещё класс для обработки вон той хуйни. Повбiвав би.
Тащемта, пока идёт стандартизация можно на годик-полтора забыть о публичных драйверах. Даже сейчас хеллоу ворлд из одного треугольника занимает несколько сотен строк.
>>158203 >Даже сейчас хеллоу ворлд из одного треугольника занимает несколько сотен строк. Это так уже со времен перехода на шейдеры. Ничего не поделаешь, технология усложняется ради повышения производительности. Для упрощения есть движки, конструкторы. А ГЛ всегда был крайне низкоуровневым.
>>158211 >>158212 Не, тут фишка будет в другом. Теперь драйвер будет ещё меньше сам что-то делать. Теперь программист сам будет решать что, как и когда. То есть работы будет ещё больше.
>>158211 Я начинал его осваивать когда треугольник можно было отрисовать кодом умещавшимся в экран тех же времен. Сейчас в принципе так же, только монитор нужен WQXGA.
Рисую OpenGL в WinAPI окно. Сообщения клавиатуры/мыши думаю обрабатывать тоже средствами WinAPI, а потом уже отправлять в заранее приготовленные функции OpenGL. Какие могут быть подводные камни? (просто в туториалах везде создают окна средствами OpenGL, а не WinAPI, поэтому засомневался).
>>158233 Не ссы, все норм будет. Только рекомендую подумать заранее о делении всего этого добра на потоки. Меньше лагать будет когда разжиреет.
>>158236 Он имел в виду всякие врапперы типа GLFW. Я сам когда-то с glScene начинал, а потом понял, что мне не нужен код, который влияет на производительность, который я не контролирую, и который в принципе могу убрать.
Сначала ковырялся с glBegin .. glEnd, но решил перейти на новый способ. Сейчас по туториалам пытаюсь открыть контекст устройства, см. ссылку http://ideone.com/4oKHdK. wglGetProcAddr возвращает NULL, т.е. в драйвер видеокарты не имеет эту функцию. Драйвера последние (2009), видеокарта древняя Intel GMA 3100. При этом старым способом, glBegin glEnd нормально всё рисует. Кто-нибудь сталкивался с таким?
>>158256 Педивикия вангует, что твой потолок на этой карте - OpenGL 1.4, то есть чуть-чуть выше dniwa ebanogo. Это эквивалент nVidia 2002-2003 года выхода. Купи себе хотя бы хотя бы GeForce 210 (самая дешевая с поддержкой OpenGL3), полтора килорубля. Можешь потратить больше - ищи по яндекс-маркету.
>>158257 Ты тут вызываешь команды ГЛ еще до того, как щакончишь с контекстом. Сначала создай контекст потом давой ГЛ. Еще - подключи GLEW - позволит юзать расширения без мозгоебство.
>>158267 Вот эти? glShadeModel(GL_SMOOTH); glClearColor(0.0f,0.0f,0.0f,0.5f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); >>158265 >>158266 Понял. У меня старый ноут, отдельно нельзя. Вот и повод поменять, давно думал об этом. >>158268 Тру хакеры всё делают вручную )))
>>158289 Наконец перестали шатать яндекс-капчу. Есть вариант для мсье знающих толк: Mesa 3D. На офсайте даже написано, что OpenGL 3.3 может, и что под даже под Windows можно поставить.
>>158300 Если у нашего комрада нету бабла на новое железо А я подозреваю что он студент то твой вариант не худший, особенно учитывая некоторое повышение цен на железо и ноуты. Но это надо быть полностью знающим толк
>>158307 Во-первых, до вулкана ещё как до китая раком. Лет через 5 только девайсы появятся. Во-вторых, «старые» девайсы на ogl4 будут жить ещё долго, а дюк нюкем должен умереть
>>158308 > Во-первых, до вулкана ещё как до китая раком. Лет через 5 только девайсы появятся. Смотрим на сайте Кроноса: > Will work on any platform that supports OpenGL ES 3.1 and up Смотрим в вики про OpenGL 3.1: > Supported by Windows, Linux, Android (since Lollipop) on devices with appropriate hardware and drivers, including: > Nvidia GeForce 400 series onwards (Windows) Вывод?
>>158310 Да никакого, кроме того, что ждать придётся на год меньше. Я сейчас в том же положении, что и ты, но 5 лет ждать новый стандарт не собираюсь, и учу OGL сейчас.
Двощ, как организовать камеру? Я так понимаю, перед отрисовкой опенгл-ом, нужно пошаманить с координатами камеры и объекта, а то, что получилось, совать в опенгл? чукча нечитатель
>>159693 И ещё вопрос: как организовать мультипоточный рендер? Всё гарантированно же пойдёт по пизде, если один поток рисует жирную модельку белым цветом, а другому потоку в это время приспичило нарисовать модельку зелёным.
>>159983 Ты чет хуйню написал. ОпенГЛ - либа рисования 3д и соответственно 2д графики. Альтернатива - Direct3D. GLUT - кросплатформенная либа для создания окон с глконтекстом и получинем инпута. SDL - делает тоже самое что и GLUT только есть еще возможность рисования 2д спрайтов в общем, на ней можно сделать платформер без использования опенгл. Так же в сдле еще куча хуйни типо звуков, сети и так далее, никогда ими не пользовался. Я считаю, что и GLUT, и SDL устарели, протухи и нахуй не нужны. Можно самому создавать окна и получать инпут. Благо, операционных систем всего 2.5, не много переписывать придется Тебе скорее всего нужен графон, следовательно OpenGL. Сразу рекомендую туториал: http://ogldev.atspace.co.uk/
>>159996 >Можно самому создавать окна и получать инпут. А можно взять SFML и не париться. Тамошнее окошко и в мультитрединг может, да и код для обработки инпута писать не надо.
>>160345 Я знаю это. Но в моей камере есть матрица проекции 4х4 и 2 вектора: углы поворота и положение в пространстве. Не хотел ещё одну матрицу под вид.
Использую glfw. Так вот когда я не в фуллскрине, то примерно 20-30% процессорного времени отжирается. Когда же я включаю фуллскрин, то там доходит до 50% и больше. Как решить эту проблему? Менял pollEvents на waitEvents и вообще ничего не меняло.
>>141146 Есть тут люди кодящие на FPC в лазарусе под линя? Не могу найти как к нему цепляются библиотеки опенгла. Даже не понимаю, цепляются ли они как внешние .so или там в палитру надо что-то добавлять, или пакеты к ide (как castle_egine), а может как под виндой (там через winAPI) как-то. Короче, кто в теме, поясните мне по хардкору.
>>160458 Цепляются через стандартные модуди gl и glext. Но сейчас есть одна проблема: поменялась спецификация вызова glGetString, из-за этого glext.pp надо переписывать. Раньше glGetString(GL_EXTENSIONS) выдавал цельную строку, которую надо было парсить, сейчас эта функция выдает названия расширений по одному, надо только указать номер расширения в последовательности. У себя я эту проверку вырезал нафиг и тупо гружу все подряд под OpenGL 3.3, хотя формально это неправильно. Хотя я под вендой работаю, не думаю, что под линем будет что-то иначе в этом плане.
>>160464 >Цепляются через стандартные модуди gl и glext Вот это и вызывает у меня непонятки, на вики пишут: > OpenGL units in Lazarus >Lazarus includes a TOpenGLControl - a LCL control with an OpenGL context. The Lazarus package >LazOpenGLContext can be found in lazarus/components/opengl/lazopenglcontext.lpk. An example can be found in lazarus/examples/openglcontrol/openglcontrol_demo.lpi. >If you want to modify TOpenGLControl implementation, for example to add new properties like ColorBits and AuxBuffers, see Extending TOpenGLControl. Third party OpenGL units >GLScene is a Lazarus package with lots of extra features for OpenGL applications. >Castle Game Engine allows you to navigate and render 3D worlds (in VRML, X3D and other 3D formats).
Т.е. под LCL есть стандартные компоненты, под GLUT есть 3парти, второй я попробовал, там фактически готовый 3д движок, не то, что я хотел. Под GLUT я не вижу стандартных компонент. Сам freeglut у меня установлен, вместе с пакетом никаких пакетов самого лазаруса не шло (во всяком случае я не нашел в папках куда он поставился). Вот я и не врубаюсь, как оно цепляется.
>>160494 Вики у лазаря вообще тухлая какая-то, видимо основная аудитория - соскочившие с дельфей где-то около 7 версии, уже научившиеся всему более-менее нужному, и бомбящие от того, что уютная идешечка превратилась в монстростудию.
Ты сначала gl и glext подруби и попробуй создать контекст. Готовые библиотеки и компоненты (ох, как же припекало от запросов "кокой компонент скочать шоб было заебись?") конечно есть, но лучше не надо. GLScene - это наверное уже какой-то недоюнити стал, я помню его ещё году в 2006 щупал. Хотя было зашибись из первой халфы модельки в него пихать и анимацию гонять.
И лучше потрать недельку чтоб понять как оно изнутри фурычит, хотя бы как инициализируется, чем с места, в карьер, да по компонентам. В принципе ничего сложного нет, я даже когда-то писал лапшу из ifdef-ов, и в результате имел недовелосипед (под OpenGL 1.1, лoл), который успешно компилировался сразу и под виндой и под линем. Самое сложное было - заделать кросплатформенно обработку мыши и клавиатуры - у winapi и Хserver отличаются принципы работы с вводом.
>>160502 >Ты сначала gl и glext подруби и попробуй создать контекст Да емае, я это и пытаюсь сделать. Я раньше на DevC ебашил на опенгл, там вообще хидеры подцепил и понеслась. Как в лазаре это делается не пойму хоть убей. Под спермой, через винапи можно ддлку опенгла подключить динамически и оттуда невозбранно вызывать что тебе надо, в лине .so также цеплять или что? >И лучше потрать недельку чтоб понять как оно изнутри фурычит Да я только за, с удовольствием поковыряю, только нет годного гайда. Есть старые православные уроки нехе, как раз по глуту, но они как я понимаю протухли. Конкретно в лазаре все гайды выглядят так, "Создаем приложение - Подключаем опенг компоненты - Ебашим код" и дальше листинг кода, а как все подключается нигде, сука, не написано. Или может я какой-то деревенный? >Посмотри вот это: http://andru-kun.inf.ua/articles/linux_opengl_fpc_part1.html Чет мертвая ссыль, не открывается. >который успешно компилировался сразу и под виндой и под линем Я поэтому лазаря и мучаю, он умеет сразу под кучу платформ без гемороя компилить, типа один раз написал и сразу кросплатформа сплошная.
>>160510 >я это и пытаюсь сделать И что? Неужели пишет "модули не найдены"? Но они же входят в стандартную поставку freepascal.
Модули gl и glext собственно и занимаются динамическим подключением, и сами выбирают через проверку платформы (в compile-time) dll тягать или so. Надеюсь у тебя стоят свежие проприетарные дрова, и ты не будешь мучать проц месой.
А ссылка живая, я спецом для тебя в гугле за минуту нашел ее. Может у тебя особый провайдер, который считает, что лазить в домен ua - instant zashquar? Тогда вот тебе другая ссылка, там статья №1 та же, но теперь кури все три: https://mirgames.ru/topics?tag=freepascal
Ну совсем без геморроя под кучу платформ не выйдет, все равно придется лапшу с ifdef-ами писать, по крайней мере при успешной декомпозиции кода будет не очень много.
Через год-два у нас будет Vulkan, от этой инфы останется только как создать окно и отдать драйверу ссылку на его контекст.
>>160518 >Неужели пишет "модули не найдены"? Да нет же. Ну как-то так, как на пикрелейтед.
Установил фриглут, смотрю список пакетов - его там нет, смотрю стандартную панельку лазаря, там только LCL компонент. Что, куда и как ставить и подключать, вот в чем вопрос. Посмотрел папки с фриглутом, там дохуя разных .so и конфигурационных файлов, .lpk файлов нет. >Может у тебя особый провайдер Через тор тоже не показывал, а заблоченые сайты подругому отображаются. Впрочем спасибо за ссылку, тоже почитаю обязательно.
>>160522 >gl, glext, glx, x, xutil, xlib Да компилится. Только он нихуя не видит функций глута, ни glutSwapBuffers, ни glutInit. Но я тебя понял, тупо хидерами значит цепляется, спасибо просветелел.
>>160522 >>160523 >>160524 Раз уж такая пляска, я тут читаю везде говорят глут говно мамонта и на нем кроме простейших вещей ничего не запилить. С чем вообще тогда серьезные пацаны работают, которые на опенгл игрища и прочие ништяки делают?
>>160523 Glut просто ненужен. Читай те статьи и применяй на практике. Для OpenGL от третьей версии и выше (надеюсь ты не будешь топтаться в 1.х, legacy и FFP), ты будешь делать всё это своими руками сам.
Помогите аноны, ищу не столько готовое решение, сколько теоретические пояснения. Практически все уроки ограничиваются тем, что "создаем шейдер, VAO, VBO, IBO, и рисуем один треугольник/квадрат/куб". Но что делать если я хочу рисовать несколько разных VBO с одним шейдером, или один и тот же VBO с разными шейдерами за кадр? Меня сильно смущает следующее (подозреваю последствия бездумного копирования и безумные умения в говнокоде): в процессе создания VAO-VBO-IBO надо получить из текущей шейдерной программы входные атрибуты для свойств вершин (XYZ, UV, нормали, цвета), и по сути привязать их к VBO. Почему привязать? Ну потому что в glVertexAttribPointer надо указать свойства массива с данными вершин - размер записи по одной вершине и смещение в записи для определенного свойства. И не забыть еще glEnableVertexAttribArray.
Правильно ли я понимаю, следующее: 1) glGetAttribLocation надо выполнить один раз на каждый входной атрибут для каждой шейдерной программы и сохранить в записи/объекте, который будет представлять этот шейдер в моем велосипеде; 2) при создании в runtime уникального объекта, в котором будут храниться ссылки на VAO-VBO-IBO (от уже неуникального меша) надо создать новый VAO, забиндить старые VBO и IBO, и заново привязать атрибуты шейдера к VAO через glVertexAttribPointer; 3) при рисовании не потребуется ничего более, кроме как забиндить соответствующие VAO и шейдер.
>>160705 > 1) glGetAttribLocation надо выполнить один раз на каждый входной атрибут для каждой шейдерной программы и сохранить в записи/объекте, который будет представлять этот шейдер в моем велосипеде; Можно при заполнении буфера установить адреса атрибутов. Гляди пикчи. > 3) при рисовании не потребуется ничего более, кроме как забиндить соответствующие VAO и шейдер. Смотря, что ты рисуешь. Может быть ты рендеришь в текстуру, то для начала надо забиндить текстуру ( ну это для построения теней, например надо ) А так да.
>>160742 Я имел в виду, что хочу по возможности использовать разные VBO с одним шейдером, и наоборот, один VBO с разными шейдерами, и все это в одном кадре. При этом в вершинном "супе" могут быть заданы UV, цвета, нормали, могут быть не заданы (соответственно разные смещения). Я правильно понимаю, что glVertexAttribPointer устанавливает связь между конкретным VAO и конкретным шейдером или нет? Рендерить в текстуру пока не планирую, но вроде там не должно быть больших подводных камней?
>>160745 > Я имел в виду, что хочу по возможности использовать разные VBO с одним шейдером Можно. Например какой-нибудь шейдер для освещения, а там всё равно на что светить. Кубили или шарики. > и наоборот, один VBO с разными шейдерами Можно. Например. Рендерить тот же свет с тенями и без теней. С картами нормалями и без них и тд. > Я правильно понимаю, что glVertexAttribPointer устанавливает связь между конкретным VAO Да, типа того. Но перед рендерингом можешь отключать не нужные атрибуты Типа так: vao.Bind(); glDisableVertexAttribArray( адрес_атрибута ); glDraw... vao.Unbind(); > конкретным шейдером Если ты при написание шейдера не установил явно номер атрибута ( как на 3ей пикче выше ), то видеокарта это сделает за тебя.
>>160752 Ага. То есть по сути надо биндить каждого с каждым заново. Последний тогда вопрос (на закрепление понимания): куча VAO, каждый со своим шейдером, но все с одним VBO-IBO - будет нормально работать как масса объектов с одним мешем и разными материалами, или надо из RAM под каждый VAO заново загонять меш в отдельный VBO-IBO?
>>160760 > То есть по сути надо биндить каждого с каждым заново Не обязательно. > куча VAO, каждый со своим шейдером, но все с одним VBO-IBO - будет нормально работать как масса объектов с одним мешем и разными материалами, или надо из RAM под каждый VAO заново загонять меш в отдельный VBO-IBO? Я нихуя не понял. Чего ты хочешь? https://code.google.com/p/gl33lessons/ Вот эти уроки посмотри.
Чуваки я тут задумался о такой вещи. Что видеокарте отрисовать проще один quad с пустыми участками в текстуре или десяток другой полигонов образующие контур тех мест что заняты на текстуре.
>>161548 значит особой разницы нет, что рисовать два трингла(quad) как плоскость для всей картинки, или произвести отсечение пустых участков образуя контур картинки с помощью полигонов.
Всем привет. Кто-нибудь может пояснить за order independent transparency? Какой самый простой алгоритм, и реально ли новичку реализовать его в программе на opengl? (и обязательно ли для реализации алгоритма работа с шейдерами?)
Был у меня тупой процедурный код, рисовавший один квад, все как положено: vertex array object, vertex buffer object, index buffer object, шейдерная программа (OpenGL 3.3).
Стал я заворачивать все в объекты. Текстура: пиксельный массив (хранится до передачи на видеокарту) и параметры, включая текстурный объект. Материал: шейдерная программа и ссылки на текстуры; Меш: вершины, индексы, vertex buffer object и index buffer object; Модель: ссылки на материал и меш, vertex array object, атрибуты для шейдерной программы.
Основной целью заворачивания было обеспечить асинхронную загрузку ресурсов, и она в целом работает, в память с диска все читается в отдельном потоке, через очередь запускается загрузка в видеокарту в потоке, который владеет контекстом отрисовки, отрабатываются зависимости для повторного использования объектов.
Пока все это барахло писал, ни разу естественно не запускал на отрисовку, только отлаживал взаимодействие между объектами и потоками. Сейчас перенес кусок кода из старой процедуры в метод отрисовки модели и обломался. Ловлю SegFault на вызове glDrawElements/glDrawArrays (однофигственно). Даже попытка вызвать через них отрисовку только первого треугольника падает. Сижу второй день, отлаживая в gDEBugger, он мне показывает, что вроде бы сейчас все норм, все буфера правильно заполнены (была например тупая ошибка экспорта меша, когда я забыл правильно выставить endianness, и еще более тупая, когда не в том порядке читал данные из файла), правильно прицеплены, и т.д. Надеюсь, что gDEBugger доверия заслуживает, и что правильно показывает данные,
которые уже в видеопамяти.
Я даже попробовал вместо загрузки модели из файла заполнить ее буферы с помощью старого кода на один квад (4 вершины по 3 флоата на координаты и 2 на текстурные координаты, 6 индексов - целое без знака). Результат тот же самый - Segmentation Fault. Кто выбивает его? Не понимаю вообще.
>>163736 ГДач! Ты резиновая уточка! Я потратил два дня на отладку, полчаса на вдумчивое описание проблемы, а через десять минут заметил, что в методе загрузки модели на видеокарту (то место, где связываются меш и шейдер) ПРОСТО ОТСУТСТВУЕТ привязка входных атрибутов шейдера к непосредственно разреженным данным в вершинном супе (glVertexAttribPointer). Разумеется glDrawArray/glDrawElements охреневает от моей попытки послать его читать неопределенный указатель. Всем удачи, успехов, и тоже быть повнимательнее!
Почему в доках для OpenGL ES 2 написано, что glVertexAttribPointer можно кормить всякими приколюхами таких типов: GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_FIXED, GL_FLOAT.
А в доках для GLSL 1.0 (который юзается в этом огл), написано что есть только такие типы: bool, int, float.
Есть какой-то смысл, чтоб скармливать glVertexAttribPointer GL_UNSIGNED_BYTE, GL_SHORT etc, или есть смысл кормить только GL_FLOAT?
>>164269 > написано что есть только такие типы: bool, int, float. Это в шейдере. > Есть какой-то смысл, чтоб скармливать glVertexAttribPointer GL_UNSIGNED_BYTE, GL_SHORT etc, или есть смысл кормить только GL_FLOAT? Обычно да, юзается gl_float, но можно попробовать упаковывать эти самые флоаты в инты для передачи в шейдеры и там распаковывать
Сегодня графонорождённый одногрупник сказал, что опенжл НЕНУЖЕН. И, вообще, на нём никто не работает и йобу на нём не делают, ведь для этого есть директХ. Я всё.
>>164661 я юзаю примерно такой код. glutSwapBuffers();
glFinish();
FPS();
рисую 2 ёбанных треугольника . фпс в Release-e без glFinish примерно 6000-7000.
с финиш до SwapBuffers примерно 4000 с финиш после SwapBuffers примерно 3700 если я вызываю 3 Finish после SwapBuffers фпс проседает до 2000. почему так?
>>164832 вот на самом деле тоже интересует этот вопрос. почему все ноют о том что OpenGL нинужен. Насколько я знаю и представляю OpenGL используется в слабых смартфонах, высокопроизводительные смартфоны Android ные смартфоны поодерживают DirectX? На ИФоны есть Metal вроде как уже. Хотя вопрос с DirectX тоже стоит. Он там есть? Или может все юзают CoreGraphics? Или может всем похуй и все юзают Сасоs2Д? Или можэт вапще мёртворождённый Флешь? Или все писают кипятком от каробки Unity. Или таки удобнее юзать OpenGL?
OpenGL по идее везде работает. Почему все ноют, что на нём всё так плохо. Куча подявзок на многие языки. В Android ной Jav-е есть аж 3 вида подвязок. из пэкиджа com.android, com.khronos и в NDK. Всякие там приставки хуеставки его тоже поддерживают вроде как. В Цпп родной интерфейс. Под сладкий-тупой-медленный Python есть подвязки. Этот ваш не нравящийся вам WebGL вполне себе на OpenGl основан. Вай соу сериоуз?
В общем тема такая охуел от шейдеров немного не понял в GLSL хочу сделать маску. Имеем изображение (фигуру) и какой нибудь бесшовный фон. в Итоге получаем фигуру окрашенную этим фоном. Хуй знает как но сделал кое какой код: fragmentShader: [CODE]#ifdef GL_ES precision mediump float; #endif
Господа, доставьте туторы по WebGL, с легкой руки взял как тему на диплом WebGL, а придумать, что вообще делать, как-то никак. Может есть у кого-то идея или уроки, по которым можно что-то эпическое сделать?
>>164962 >>164978 Ничего себе, спасибо большое, то что надо, придется потеть. Ну да, бакалаврский, баловство конечно, но всё равно важный шаг на жизненном пути.
>>164942 Демки крутые нагуглил, а пояснения только к совсем энтри левелу.
Как я могу сгенерировать сферу в OpenGL с заданным радиусом (получая на выходе набор вертексов и набор индексов, по которым отрисовывать треугольники)?
>>166850 Залей на пастбин какой-нибудь, я слепой и непонятно нихрена без подсветки и отступов нормальных. А еще поставь себе RenderMonkey, он хоть и старый, но довольно годный для быстрой обкатки шейдеров на GLSL.
Я тут думал-думал и вот что надумал: как в диабло-3D-дрочильнях с видом сверху обрезаются спрайты и объекты за стенами? Пикрелейтед. Что если партиклы от эффектов считаются на ГПУ? Заранее вычисляются препятствия на ЦПУ? Или что-то передается в шойдеры?
>>170456 >>170463 Для этого надо, чтоб загораживало что-нибудь, черный плейн но если встать рядом со стеной, то персонаж и область вокруг него просвечивается. Скриншеты, например.
>>170465 Как в д2 просто if пл draw orderу, если тип спрайта стена и его порядок отрисовки выше чем у героя, то рисовать с прозрачностью. Как в ф2 так же, просто в 2 драв кола, рисуешь все что ниже героя и героя, потом меняешь шейдер на другой с яйцом и дорисовываешь остальное (в шейдер передаешь координаты героя и радиус).
Что читать, чтобы научиться делать годноту как тут: http://glslsandbox.com/ ? Пробую разбирать понравившиеся примеры - ето пиздец, я тупой и дунно как такое писать.
Братцы, заебался с камерой. Мне нужно чтоб она крутилась на все 360 градусов мышкой во все стороны. Сделал 2 вектора up и right, и вращаю их друг относительно друга пропорционально перемещению мыши, а направление получаю как cross(up, right), по началу ок, но беда в том, что через некоторое время эти вектора становятся не перпендикулярными, понимаю, что это из-за погрешностей floating point, но сука, как побороть? Мне нужно именно вращение камеры именно относительно ее предыдущего положения, а не как в шутерах.
>>171374 Если, dir буду вращать вокруг up для того чтоб смотреть влево-вправо, то вокруг чего вращать up чтоб смотреть вверх-вниз?
Подчеркиваю, мне ненужно чтоб камера сохраняла ориентацию относительно какой либо плоскости, пусть заваливается в любые стороны, но нужно свободное вращение без ограничений.
>>171372 Что тебе мешает вместо двух векторов изменять view-матрицу и хранить каждое ее состояние? То есть у тебя есть изначальное положение и view-матрица для каждого состояния камеры. Таким образом вектора всегда будут перпендикулярны и предыдущее состояние будет так же задаваться view-матрицей.
>>171416 То, что ньюфажина, и не понимаю как это сделать. Точнее я понимаю, как сделать матрицу поворота, но как ее менять нужным мне образом уже не понимаю. Будь няшей, поясни или ссылочку дай.
c = Quaternion.rotate(c, q); Vector3f.divLength(c, cameraRadius_); camera.setCamera(c);
float[] t = camera.getTarget(); t = Quaternion.rotate(t, q); camera.setTarget(t);
u = Quaternion.rotate(u, q); camera.setUp(u);
Здесь еще таргет поворачивается и меняется расстояние между камерой и таргетом. Все на float, вращал много но проблем не было. Возможно нужно пересчитывать up не поворотом старого а произведением orto x up
>>171520 >Это если бы ты начал дом строить с добычи руды для выплавки молотка. Если бы я лез под капот opengl, то аналогия была бы верной. А так скорее изучение материалов, методов строительства, инструментов.
>>171534 Если придётся заниматься какой-то просто задачей, то монструозный игровой движок, конечно хорош, но слишком большой для такого дела. Также не стоит забывать про OpenGL ES.
>>171520 >Это если бы ты начал дом строить с добычи руды для выплавки молотка. С изучения сопромата, изучения разных материалов типа кирпича, газобетона и всей подобной хуйни для нормального рассчёта нагрузки на разные части здания. Выплавка молотка — это свой софтверный рендер городить.
Помните, в Морровинде интериоры строились из блоков пикрелейтед? Так вот, как отрисовывать геометрию: каждый блок рисовать по отдельности или создавать один буфер и записывать туда вершины и аттрибуты? каждого уже трансформированного блока то есть если уровень состоит из блоков А B C A, то в буфер записываются сначала все вершины блока А после трансформации, потом пишем вершины блоков В, С и А?
>>171731 А вот у таких блоков есть прикол, что два соседствующих ребра двух моделек хоть вроде и имеют одинаковые координаты, на стыке этих двух ребер появляется просвет в виде точечек или небольших отрезков. Как с таким бороться?
Привет. Есть один маленький, но очень важный для меня вопрос. Сейчас я разрабатываю одну игру на пека (с перспективой ее же разработки под iOS и Android), причем ориентирована она больше на сенсорное управление, хотя и мышкой тоже вполне себе нормально будет управляться. С выором языка программирования проблем не возникло. Так как разрабатывать собираюсь и под мобильные платформы чуть позже, предпочел выбрать OpenGL, а не DirectX. Но тут передо мной встал вопрос: а какую его версию использовать? 2., 3. или 4.*? Весь казус в том, что слабенькие видеокарты не поддерживают 4 версию, а некоторые не поддерживают и третью. А на виндопланшеты ставят как раз всякие атомы и, изредка, i3/i5. Как думаете, аноны, под какую все-таки версию OpenGL заточить свою игру?
>>172303 А будет ли 3.3 работать на виндопланшетах на атоме? Просто я так мельком посмотрел все атомы, и все они вроде бы (я могу ошибаться), не поддерживают 3 версию. Из-за этого я и не могу определиться. Ибо для меня сенсорные устройства все же приоритетнее, да и сама по себе игра не шибко требовательна к графике. Другое дело что я могу ошибаться насчет атомов и поддержки на них версии 3.3
>>172385 ОГЛ - набор расширений, каждая новая версия добавляет какие-то свои новые расширения. Если, например, использовать только расширения начальной версии ogl 2.0, то приложение будет работать на любой версии. Если использовать расширения, которые не входят в состав начальной версии, то приложение будет на любой версии, в состав которых входят используемые расширения.
>>173295 Я тут)))0 Просто тут байтоебы тупые хуйней страдают вместо того чтоб игры делать и вообще тут все дохлое и тухлятиной воняет)) Пошел на хуй мамку таою ибал азазаз))0
>>173339 Но ведь байтоебам действительно не место в этом разделе. Надо поднять вопрос о переселении этих петухов куда-нибудь подальше отсюда, так как их фактическая деятельность к тематике раздела относится чуть более чем совсем никак. Рисование квадратиков и верчение кружочков по полтора года - это не геймдев.
>>173348 >пидорнули, как остальную тематику Падажжи, ебана.
Тоесть основной да-да, основной и единственный тред по АПИ для мобильных устройств пидорнут из /гд? Учитывая что сейчас все уходит в мобильное Как-то глупо получается.
Привет, glАнтоны. Хотел спросить, как лучше хранить меши в бинарниках, чтобы читать их как можно быстрее и проще. Допустим, модель имеет только один материал (т.е. индексы материалов на треугольниках мы в файле не храним). Первые 2 int в файле это количество вершин и количество треугольников. Далее подряд идут координаты вершин (по 3 float), за ними нормали (по 3 float), и после них текстурные координаты (по 2 float). После этого идут индексы вершин, образующих треугольники (по 3 int на треугольник). Нормально ли так делать или можно придумать что-нибудь получше?
>>173510 Зависит от того, как ты биндишь аттрибуты. Если все в один буфер, но локаторы аттрибутов линкуешь через смещения, то оставляй как есть. Если биндишь типы аттрибутов в отдельные буфера, то сначала идут n-значений одного типа аттрибутов, потом другого. Помести в начало заголовка инфу, что этот бинарник хранит меш. Если хочешь еще больше ускорения, то склеивай все меши в один файл, не забыв поместить в заголовок названия каждого меша и смещения головы и хвостов.
Есть какие-нибудь практические ништяки, доступные нубу, из-за которых имеет смысл выбирать OpenGL а не DirectX? Я имею ввиду вроде убер-графона в три строки, или еще чего. Кроссплатформенность не кажется мне таким уж преимуществом.
>>175349 Простой апгрейд, кроссплатформенность, именно, что платформы, то есть и мобилы, и пека, и сосноли на мой взгляд, OpenGL проще осваивается, чем DX, да и код выглядит проще. Но под DX больше всяких материалов, учебников там, статей, в сдк кучи примеров.
>>175484 Бля, а если анрыл не сможет в многопользовательность и большой мир? А он сможет, кстати? Ну то есть если это не получится у меня, я хотя бы буду представлять, какие костыли куда поставить. Да и вообще велосипеды - наше все. Я отдаю себе отчет в том что я долбаеб, но все же я всегда мечтал написать игру, а с использованием готового движка это уже как-то не то. Хотя хуй знает. Глядишь закончу институт и там мои амбиции пообрежуться
>>177544 >>177546 Недавно наткнулся на один полезный ресурс. Можно создать что-то вроде каталога линков и разбросать их по категориям. Да и редактировать удобно. Выглядеть будет, примерно, вот так: https://papaly.com/alinnert/dMw6/Web-Development Что думаете по этому поводу?
>>178431 Вроде все актуальные должны быть. Сам пока только Game Engine Architecture и Superbible читал, очень годные. На остальные времени не хватает, к сожалению.
Имеются две точки на плоскости (А и В), центр отрезка, который они образуют является центром новой системы координат. Как определить в ней координаты третьей точки С?
>>183543 upd. если бы был бы дан угол поворота относительно центра было бы можно высчитать по формулам: [code] x = x0 cos(a) - y0 sin(a); y = y0 cos(a) + x0 sin(a); [/code] но как высчитать этот угол я тоже не знаю, да и должны быть более прямые способы
>>183612 Ты игры хочешь делать, или в оптимизатора играться? Это самый очевидный способ и он хорошо работает. У тебя же не сто мини-карт (или для чего тебе такой фетиш) будет, а всего одна. Не еби гусей, бери что дают, иначе твои поиски грааля на каждом шагу доведут тебя до того, что игоря не будет, а будут вечные поиски. Перфекционизм оставь при себе, будешь надрачивать на него когда займешься оптимизацией УЖЕ ГОТОВОЙ игры.
Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси.
Добро пожаловать.
http://arhivach.org/thread/28624/ - Первый
http://arhivach.org/thread/47586/ - Второй
Доки:
https://www.opengl.org/sdk/docs/man2/ - OpenGL 2.1
https://www.opengl.org/sdk/docs/man3/ - OpenGL 3.3
https://www.opengl.org/sdk/docs/man4/ - OpenGL 4.5
https://developer.nvidia.com/opengl
https://www.opengl.org/wiki/Main_Page
Туториалы:
http://en.wikibooks.org/wiki/Category:OpenGL_Programming
http://www.gametutorials.com/tutorials/opengl-tutorials/
http://www.opengl-tutorial.org/
http://www.tomdalling.com/blog/
https://code.google.com/p/gl33lessons/ -
http://steps3d.narod.ru/articles.html - много статей по расширениям
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/ - GLSL туториалы
http://ogltutor.netau.net/index.html
http://www.arcsynthesis.org/gltut/
Книги:
https://www.dropbox.com/s/ct7a7byynnbm5qf/0123750792Rendering.pdf
http://mrelusive.com/books/books.html - большой список книг по геймдеву
http://rutracker.org/forum/viewtopic.php?t=625086 - GPG 1-6 части
http://www.amazon.com/Computing-Gems-Edition-Applications-Series/dp/0123859638
http://www.amazon.com/gp/reader/0321902947 - Superbible
http://kickass.so/game-engine-architecture-second-edition-2014-t9574312.html - Game Engine Architecture
Maths:
http://www.amazon.com/Math-Primer-Graphics-Development-Edition/dp/1568817231/
http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Edition/dp/1435458869
по GLSL:
http://www.amazon.com/OpenGL-Development-Cookbook-Muhammad-Movania/dp/1849695040/
http://www.amazon.com/OpenGL-Shading-Language-Cookbook-Edition/dp/1782167021/
Презентации, слайды:
Красивая вводная презентация по основам графики со всякой интерактивщиной:
http://acko.net/files/fullfrontal/fullfrontal/webglmath/online.html
http://www.slideshare.net/TiagoAlexSousa/secrets-of-cryengine-3-graphics-technology
http://www.slideshare.net/cellperformance/data-oriented-design-and-c - Data-oriented Design
https://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/
Надеюсь, ничего не забыл.