LINUX.ORG.RU

Сложно

 , ,


0

2

Вот не разберусь с этим, делал по мануалу из книги, а там нет продолжения - грузится 3д модель из obj файла, есть также mtl. И что получается чтобы натянуть текстуру на шар - надо к каждому квадратику определять текстурные координаты двух треугольников? Их же там много и непонятно с какой относится к каким координатам. Шар из блендера, так это он еще угловатый, а если сделать сглаженным то там координат еще больше будет и ума им не дать - так блин одну сферу затекстурировать уйдет месяцы работы



Последнее исправление: hobbit (всего исправлений: 8)

надо к каждому квадратику определять текстурные координаты двух треугольников?

Obj может описывать как треугольники из вершин так и полигоны из вершин в случае вторых надо/можно конвертировать полигоны в треугольники, выполнить триангуляцию. Или при экспорте модели триангулируй.

Если в obj всё указано в полигонах, а загрузишь ты это как в треугольниках то получится вот так

(Это старый мой пул-реквест отменённый с триангуляцией, упоротой, но да пофиг, отправил с мусором, так и не переотправил)

Сама текстурная координата привязана к вершине группа вершин образует поверхность (кусок модели) в mtl указываются большие «куски» группы вершин для которых будет указана текстура, из которой будет делаться выборка, .

Сам формат obj имеет вариации.

Из тобой написанного непонятно, ты делаешь восход солнца вручную, тоесть парсишь obj генерируешь меши, формируешь массивы атрибутов для шейдера и так далее. Или что-то готовое загружает obj? Если готовое, но отображается не так, триангулируй при экспорте из блендера и в нём же сделай на модельке развёртку, чтобы было возможно на неё нанести текстуру (развёртка проецирует модель на 2D плоскость, тоесть создаёт текстурные координаты для вершин, куда не плоскости вершина ляжет туда и будет её текстурная коордианта) и экспортируй.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

а если сделать сглаженным то там координат еще больше будет

Нет, вернее, можно сделать низкополигональную модель более гладкой, вернее даже не делать её угловатой, но без увеличения количества вершин. В качестве домашнего задания найди в блендере как это сделать. (Или если восход вручную делаешь, то выбрать метод затенения :) явно плоское затенение и гуро, не меняют количества вершин, но сильно меняют вид, у тебя плоское задано, гугли картинки поймёшь)

так блин одну сферу затекстурировать уйдет месяцы работы

Нет, надо просто выполнить развёртку модельки. Три кнопки нажать и всё.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

Выкинь OpenGL и изучай вулкан или Direct3D 12, тогда поймешь и принципы работы видеокарт и шейдеры и все остальное.

И материалы куда актуальнее и насыщеннее. Я бы посоветовал именно D3D12, потому что у MS по нему огромное количество глубоких материалов и доков, и примеров.

lovesan ★★★
()
Ответ на: комментарий от lovesan

Выкинь OpenGL и изучай вулкан или Direct3D 12, тогда поймешь и принципы работы видеокарт и шейдеры и все остальное.

Что мешает «понять шейдеры» в OpenGL?

или Direct3D 12, тогда поймешь и принципы работы видеокарт и шейдеры

Поймет только особенные домашние шейдеры мелковьялых и принципы работы видеокарт под виндой.

Я бы посоветовал именно D3D12, потому что у MS по нему огромное количество глубоких материалов и доков, и примеров.

По OpenGL их тоже как говна за баней, но нужно идти читать их, а не шитпосты в нытиктредах на непрофильном ресурсе.

anonymous
()
Ответ на: комментарий от anonymous

Поймет только особенные домашние шейдеры мелковьялых и принципы работы видеокарт под виндой.

Vulkan и D3D12 очень и очень сильно похожи, если не сказать что там отличия вообще только косметические, и именно они отражают работу современных видеокарт, современного графического конвейера, куда лучше чем OpenGL

lovesan ★★★
()

видеокарта рисует только треугольники, треугольник это три вершины, чтоб закрасить треугольник каждой вершине дается свой цвет а середину считает усредненно. Когда есть текстура то вершинам треугольника привязываются текстурные координаты и цвет вершины и цвета внутри треугольника берутся из текстуры.

obj файл это и есть вершины и как по ним рисовать треугольники и как треугольники красить. сфера там или что-то другое разницы нет.

чтоб натянуть текстуру на шар нужно каждой вершине треугольника которая участвует в отрисовке шара назначить текстурную координату на какой-то текстуре.

возьми не шар а кубик или пирамидку где вершин мало и все поймешь )

cylon17
()

В obj файле уже должны присутствовать текстурные координаты.

А файл mtl - это описание материалов и модели освещения. В частности, там указывается имя файла текстуры (для которой текстур. коорд. из obj-файла соответствуют рисунку текстуры).

Советую взять готовые низкополигональные модели с текстурой из интернета (ресурсов много).

PS OpenGL лучше всего подходит для изучения работы с графикой. Не слушайте никого.

Gyros
()
Последнее исправление: Gyros (всего исправлений: 2)
Ответ на: комментарий от lovesan

ТС спрашивал не просто про OpenGL, а про WebGL, это открытый стандарт, поддерживаемый ведущими разработчиками браузеров. Есть WebGPU, но он ещё не везде работает, и это не чистый вулкан, а абстракция над Vulkan, Metal и D3D12, хотя да, идеология у них всех схожая.

А с пропагандой D3D12 тебе сам знаешь куда.

hobbit ★★★★★
()
Ответ на: комментарий от lovesan

А жалко. Нужен жопоскрипт для 3Д графики. Потому что 3Д - это нечто, что каждая обезъяна понимает на интуитивом уровне с рождения, просто по факту анатомического строения оптической системы и наличия визуального кортекса. И с какого бодуна нужно разбираться в каких-то шейдерах, и во всей этой системно-императивной хрени?

seiken ★★★★★
()

Во-первых, формат obj умеет хранить текстурные координаты, а Blender умеет их генерировать и редактировать. Просто открой в Blender шар в редакторе UV и сгенерируй развертку. А потом экспортируй снова, а в свою программу добавь парсинг директивы vt из obj, а не только v, vn и f.

Во-вторых, если хочется гладкий шарик, то вруби интерполяцию нормалей между вершинами. Не помню, кажется, сделать varying параметр передаваемый из вершинного во фрагментный шейдер. Тогда шар будет казаться гладким с меньшей детализацией. В самом Blender есть параметр smooth shading, чтобы посмотреть как оно работает, но в своей проге придётся самому реализовать. Ну и лучше использовать icosphere, а не просто sphere, оно по вершинам эффективнее.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от lovesan

Это всё оверкилл и поднятие системных требований приложения на ровном месте, если ТС нужно просто отрисовать шарик, который выглядит как шарик, а не как что-то угловатое.

Плюс у него в ТЗ не просто OpenGL, а WebGL. То есть ему надо чтобы в браузере работало. А в браузере нет Vulkan. Есть WebGPU, но он не везде поддерживается и там +- такой же пайплайн как и в OpenGL (классические вершинные и фрагментные шейдеры), он отличается stateless API, а не какими-то особыми возможностями рисования.

KivApple ★★★★★
()
Ответ на: комментарий от Gyros

Mtl имеет смысл парсить, если хочется много моделек с разными параметрами материалов грузить, при этом устраивает набор фич mtl.

Если у ТС кроме шара ничего нет или он планирует какой-то особый шейдинг, то проще захардкодить используемую текстуру. А из obj только текстурные координаты взять и нормали.

KivApple ★★★★★
()
Ответ на: комментарий от lovesan

Выкинь OpenGL и изучай вулкан или Direct3D 12, тогда поймешь и принципы работы видеокарт и шейдеры и все остальное.

Там (Vulkan) высокоуровневые абстракции, типа полуфиксированного конвеера, буферов изображений требующих несколько копий в памяти CPU и GPU, да даже сама память поделена на ненужные, и непонятные без нескольких литров абстракции. Но возможно видеокарты амуде из позапрошлого десятилетия так и работали.

Ну а ОП спрашивает про общие темы, которые одинаковы и в Vulkan и в софтверном рендере. Нужна ему эта теселяция, если он даже со статическим набором треугольников разобраться не может?

Чем ему Vulkan будет полезен, тем что придется искать через какое расширение выводить картинку на экран, и как синхронизировать действия? По моему это наоборот дальше от графики.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 8)