Пытаюсь сейчас осваивать OpenGL.В частности читаю эту статью. Возникли непонятки с использованием готовой 3D-модели.А именно процесс преобразования того,что мы получаем из 3DS Max,в бинарный файл,который можно будет потом положить в ресурсы. Например,моделируем в 3DStudio обычный куб,переводим его в редактируемый mesh,затем экспортируем этот mesh,используя формат ASC(как описывалось в статье).Полученный файл открываем в блокноте и видим,что там нет и слова о координатах вершин.Там скорее находится описание фреймов анимации. Есть ещё некий формат ASE,сохранив в который,мы получим файл,в котором уже реально можно будет найти координаты вершин.Сложность однако возникает с нормалями,т.к. они там следуют в каком-то непонятном порядке... В общем,хотелось бы прояснить ситуацию с этими моделями.Как же их всё-таки преобразовывать к массиву координат вершин и нормалей?
В общем,получив хорошую долю инспирации от "активности" данного подфорума,я всё же нашёл выход по отображению моделек в OpenGL.Надеюсь моя информация окажется кому-то полезной. Как оказалось,рулят тут вовсе не функции glInterleavedArrays,а связка функций следующего типа: Код (Text): invoke glVertexPointer, 03, GL_FLOAT, ebx, g_pV3FData ; массив вершин invoke glNormalPointer, GL_FLOAT, ebx, g_pN3FData ; массив нормалей invoke glEnableClientState, GL_VERTEX_ARRAY invoke glEnableClientState, GL_NORMAL_ARRAY invoke glDrawElements, GL_TRIANGLES, dwCount, GL_UNSIGNED_INT, g_pFacesData В функции glDrawElements мы используем массив индексов вершин граней,т.к. именно тогда наши примитивы(треугольники) будут правильно сведены в единое правильное целое. Теперь возникает вопрос,как же получить эти массивы? Лично я использовал для этого программку X3DS от товарища Varun Singh,которая конвертирует формат 3DS в простой и открытый формат B3D(Believe3D).Далее я написал свою программку,которая считывала нужные данные из полученного B3D-файла и сохраняла координаты вершин,нормалей,а также индексы вершин граней в отдельные файлы.После этого эти файлы можно прикрепить к ресурсам.На масме это будет выглядеть следующим образом,например: Код (Text): nameV3F BINARY "nameV3F.bin" ... Ну,и затем всё тривиально.В программе получаем указатели на ресурсы: Код (Text): invoke FindResource, ebx, addr szModelV3F, addr szBinary test eax, eax jz @@failure invoke LoadResource, ebx, eax test eax, eax jz @@failure invoke LockResource, eax test eax, eax jz @@failure mov g_pV3FData, eax ... Вот ссылки на обе программки: http://tools.guru.lbyte.ru/ups/files/X3ds.zip http://tools.guru.lbyte.ru/ups/files/B3DToBIN.rar
DillerInc 3DS легко читается с помощью 3dsco 3dsrdr искать в инете. Маленькие и понятные фри сорцы. А как текстурировать картинкой по UV это дело?
Координаты текстуры на сетке. Те каждая вершина сетки имеет еще и координаты U(x) и V(y) текстурной картинки.
...а,понятно,спасибо. Я пока только накладывал текстуру на модельку,как описывал Tyler Durden в своей статье.Т.е. сама текстура создавалась из байт программы,а потом использовалась автоматическая генерация координат: Код (Text): ; /* Установим типы генерируемых текстур в направлениях "S" и "T" */ invoke glTexGeni, GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP invoke glTexGeni, GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ; /* Включим автоматическую генерацию текстурных координат */ invoke glEnable, GL_TEXTURE_GEN_S invoke glEnable, GL_TEXTURE_GEN_T invoke glEnable, GL_TEXTURE_2D Кстати,а что значит: "в направлениях "S" и "T"" ??