1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
||||||||||||||||
Геометрический шейдер не работает, как предполагается21.04.2024, 12:08. Показов 948. Ответов 16
Добрый день. Простой пример с геометрическим шейдером, но не получается отладить. В вершинный шейдер подаются на вход точки и VBO с флагами. Геом. шейдер в точках в зависимости от флага рисует треугольники. Хочу пошагово отладить в ShaderEd, но при запуске отладки на этом примере программа вылетает.
shaderConstraint.vert
0
|
21.04.2024, 12:08 | |
Ответы с готовыми решениями:
16
Как передать массив int в геометрический шейдер
Геометрический шейдер и varying |
21.04.2024, 16:39 | |||||||||||
1. Геометрический шейдер не "добавляет" а "замещает"
2. Откуда такой порядок умножения? (первоисточник ?)
1
|
1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
||||||
21.04.2024, 17:09 [ТС] | ||||||
Igor3D, я пишу на C#, библиотека openTK, там порядок умножения другой.
С координатами и преобразованиями все ок. Выводится как я хочу. Единственная проблема с передачей индикатора треугольника через интерфейсный блок. Не могу понять что не так и не могу пошагово отладить в ShadeEd, потому что он вылетает просто. Патовая ситуация)) На картинке приложенный вывод. У меня два буфера VBO: в одном вершины, в которых надо нарисовать треугольньки. Допустим как на картинке это 4 точки, соответственно там 12 элементов в буфере. И во втором VBO индикаторы, которые геом. шейдер читает и выбирает один или два треугольника нарисовать. На каждую вершину по одному индикатору. Но при этом если я создаю VBO из 4-х элементов, то геом. шейдер не во всех вершинах рисует треугольники. Нужно создавать больше. Из этого я делаю вывод, что геом. шейдер за рах читает из буфера больше одного индикатора, хотя я когда привязывал атрибут указал, что нужно читать один элемент. Фрагмент кода с привязкой атрибута:
0
|
21.04.2024, 18:53 | ||
![]()
0
|
1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
|
21.04.2024, 20:11 [ТС] | |
zayats80888, буфер с вершинами цепляю в методе "_vao.Initialize(vbo, indices)". Оба буфера VBO и вершины и индекса норм целяются, прохожу дебаггером и вижу, что метод "GetAttribLocation" возвращает из шейдера корректный layout. Я не уверен, но кажется проблема в том, что я неправильно передаю данные через интерфейсный блок.
Igor3D, пример с цветами понятен. Конкретно эту задачу с такой постановкой получится решить. Но у меня есть планы по расширению функционала. И хотелось бы на будущее разобраться как правильно передавать массивы данных в геом. шейдер.
0
|
![]() 6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
|
||
21.04.2024, 20:20 | ||
Я не знаком с api opentk, но в чистом opengl вызов glVertexAttribPointer ассоциирует атрибут с данными в буфере, который привязан к GL_ARRAY_BUFFER на момент вызова. Можете дать ссылку на документацию к методам, которые вы вызываете для _vao , или это ваши рукописные методы?
1
|
1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
|||||||||||
21.04.2024, 21:24 [ТС] | |||||||||||
zayats80888, в моем понимании openTk просто обертка над функциями opengl. У меня для VAO, VBO, EBO свои классы. Можно посмотреть код по ссылкам.
Код объекта сцены для рендеринга, строка 127:
0
|
![]() 6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
|
||
21.04.2024, 22:29 | ||
Только я так и не увидел демонстрации проблемы. Можно пример содержимого буфера индексов, вершин и индикаторов, и соответствующую этим данным некорректную картинку.
0
|
1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
|
21.04.2024, 23:15 [ТС] | |
zayats80888, на картине приложил три варианта. Правильынй вывод по графике должен быть такой, чтобы при буфере индикаторов VBO из четрых вершин {2; 2; 2; 2} в каждоый вершине отрисовалось по 2 треугольника.
Ошибка заключается в том, что сейчас при таком буфере норм отрисовывается только первая вершина. Если я увеличиваю буфер вдвое, то отрисовываются нормально уже три вершины. А если х3, то все четыре вершины. Какой-то логический вывод что здесь происходит у меня не получилось сделать)) Напрашивается проверить звено передачи данных из VBO индикатор в шейдер, но я его уже до дыр засмотрел так что хз.
0
|
![]() 6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
|
||
21.04.2024, 23:22 | ||
![]() РешениеУ вас в буфере индексов {0, 4, 5, 9}. Откуда шейдеру брать данные, если их только максимум для индекса 3? Добавлено через 1 минуту Еще раз уточню, количество элементов в буфере индикаторов не может быть меньше, чем максимальный индекс + 1 (по факту их должно быть столько же, сколько вершин в буфере вершин).
0
|
22.04.2024, 01:41 | ||
А зачем здесь EBO если можно рисовать точки с помощью DrawArrays? Это и объективно лучше т.к. индексов обычно больше.
Пример: полигоны (для простоты треугольники) имеют цвета (по одному на тр-к). Но нарисовать это "чисто шейдером", увы, не удается ![]() zayats80888, поправьте если не так
0
|
1 / 1 / 0
Регистрация: 04.01.2016
Сообщений: 62
|
|
22.04.2024, 21:52 [ТС] | |
zayats80888, 2 дня думал что же тут не так)) Большое спсибо. Замылился глаз, совсем не подумал, что если я вывожу графику с использованием EBO, то все привязанные буферы VBO будут считываться согласно этих индексов
0
|
23.04.2024, 12:48 | ||
0
|
![]() 6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
|
|||
25.04.2024, 15:14 | |||
Но в целом согласен, либо атрибуты вершин, либо вся группа примитивов в draw call (или отдельный инстанс в нем).
0
|
25.04.2024, 15:14 | |
Помогаю со студенческими работами здесь
17
Что делает геометрический шейдер? Геометрический шейдер
Метод set() у ArrayList не работает как предполагается Сравнение строк. If работает не так, как предполагается Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
Сравнение GCC 14 и Clang 18 компиляторов C для HPC
bytestream 08.06.2025
В высокопроизводительных вычислениях (HPC) выбор компилятора - это ход, способный радикально изменить производительность всей системы. Работая последние 15 лет с критическими HPC-системами, я видел. . .
|
Всё о конфигурации ASP.NET Core
stackOverflow 08.06.2025
Старый добрый web. config, похоже, отправился на пенсию вместе с классическим ASP. NET. За годы работы с различными проектами я убедился, что хорошо организованная конфигурация – это половина успеха. . .
|
dev-c++5.11 Продолжаю движение.
russiannick 08.06.2025
Казалось, день прошел впустую. Просмотрел кучу видео и только потом заметил заголовок - уроки си. Искусители сбивали новичка с пути с++. Так легко ошибиться когда вокруг столько яп содержащих в. . .
|
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
|
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
|
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам
где:
. dev обязательно присутствует
. cpp/ . c один из них. . .
|
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
|
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
|
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
|
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
|