Заполните форму расположенную ниже и нажмите "Отправить"
Добро пожаловать. Здесь вы можете оставить свои вопросы на интересующую вас тему, а также оставить ответ на свой вопрос если вы вдруг нашли его сами. Будьте внимательны и аккуратны при вводе, исправить написанное уже будет нельзя.

Примечание: Администрация данного ресурса оставляет за собой право удалять записи которые содержат нецензурные выражения, оскорбляют кого-либо, являются бессмысленными и не относятся к данной теме, а также противоречат законодательству РФ.
Ваше имя или ник

Ваш адрес e-mail:

Ваш адрес в сети:
Ваш вопрос:
      
Список вопросов посетителей с ответами на них
XKern25 февраля 2006   23:38:12
Помогите, пожалуйста, с загрузкой .x файлов на асме
Пример загрузки .X файлов реализованный на masm и dx 8.1 можно посмотреть вот по этому адресу: www.wasm.ru/forum/

Там приведена загрузка .X файлов с поддержкой текстур и материалов, но без анимации. Пример писался мною (keYMax) очень давно. В настоящий момент просто не хватает времени на написание более продвинутого варианта.
Автор неизвестен19 марта 2005   23:38:12
Как заставить работать интерфейс IDirectSound3DBuffer для позиционирования звука в пространстве? Желательно на примере PlaySound из пакета DirectX SDK 8.1,9.0 for MASM.
Получение указателей на определенные интерфейсы DirectSound возможно лишь с использованием метода QueryInterface. Он служит посредником в этом деле, и нередко положительный результат зависит от различных мелочей.

Вот все необходимые действия по правильному вызову этого метода:


1. В секции данных:

    ID_3DBuff   GUID   IID_IDirectSound3DBuffer
    pDS3DBuff   dd     ?


2. В секции кода:

    dsbuffer8 QueryInterface, pDSSample, ADDR ID_3DBuff, ADDR pDS3DBuff

    где  IID_IDirectSound3DBuffer - GUID определенный в include файлах,
         pDSSample - указатель на созданный и заполненный данными зву-
                     ковой буфер. Причем данный буфер необходимо соз-
                     давать с флагом DSBCAPS_CTRL3D.



В результате вызова QueryInterface указатель на нужный интерфейс будет помещен в переменную pDS3DBuff.

После чего для позиционирования звука используется:

    ds3dbuffer SetPosition, pDS3DBuff, fy, fx, fz, DS3D_IMMEDIATE

    где  fy,fx,fz - координаты X,Y и Z соответственно, имеющие формат
                    float
         DS3D_IMMEDIATE - флаг, указывающий на немедленный пересчет всех
         данных, независимо от того происходит сейчас вывод звука или он
         остановлен.


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

Что касается примера PlaySound, то вышеприведенные строки строки можно разместить в самом конце процедуры LoadSound.

Автор неизвестен19 марта 2005   23:38:12
Судя по информации из пакета, библиотека MAL должна заменить собой d3dx8d.dll? Или это не так?
Действительно, MAL (персональная благодарность Денису Козырю) была призвана заменить d3dx8d.dll, тем самым избавив от нее в некоторых случаях. Однако в ней реализованы только определенные функции, поэтому она не в состоянии на 100% ликвидировать d3dx8(9)d.dll.

В новых версиях SDK от компании Microsoft библиотека D3DX реализована только в динамическом варианте, идет в комплекте с новым runtime DirectX и, соответственно, устанавливается на машине пользователя. И теперь, если использовать в приложении файлы от SDK february update 2005, то можно смело работать с D3DX, подключая при сборке приложения d3dx8(9).lib. Во-первых, никакой дополнительный код не будет прилинкован к exe, а во-вторых, для успешного запуска приложения не потребуется тянуть с ним какие-либо dll. Данное правило справедливо, если на машине конечного пользователя установлен новый runtime DirectX не ранее февраля 2005 года, что не всегда гарантируется.
Сергей28 января 2005   14:31:56
Возможно ли прочитать значение z буфера в определенной точке экрана и как перевести это число в формат REAL4.
Разработчики DirectX предоставили такую возможность внеся флаг D3DFMT_D16LOCKABLE c помощью которого, по идее, можно блокировать Z-буфер и прочитать его содержимое. Однако на практике это невозможно, так как подавляющее большинство видеокарт данный флаг не поддерживают.

В данный момент в DirectX 9-ой версии внесли еще такой механизм как occlusion query. Он позволяет выяснить сколько пикселей прошли в бэк-буффер.

Тема с похожим названием обсуждалась также на форуме Gamedev.ru где в качестве совета было использование шейдеров для занесения Z значения в цвет текстуры, однако при этом очень страдает точность. Более подробно с таким вариантом можно ознакомиться здесь и здесь.
Сергей28 января 2005   14:31:56
Поддерживает ли файл формата второй канал текстурных координат?

Файл формата .x построен на template'ах. Каждый из template'ов определяет свою часть данных об объекте. Например, текстурные координаты описываются так:

   template MeshTextureCoords
   {
        < F6F23F40-7686-11cf-8F52-0040333594A3 >
        DWORD nTextureCoords;
        array Coords2d textureCoords[nTextureCoords];
   }


где Coords2d - template, описывающий 2 значения U и V. Нетрудно заметить, что в таком случае стандартно в файле описывается массив только из 2 текстурных координат на каждую из вершин.

Вывод сделан только лишь на информации содержащейся в хэлпе из SDK.
Сергей28 января 2005   14:31:56
Как оптимизировать объект(меш) средствами DirectX?

Загруженный в память меш возможно оптимизировать вызвав метод Optimize интерфейса ID3DXMesh. При этом будет создан новый оптимизированный меш с переупорядоченными вершинами и гранями в целях лучшей отрисовки. Если вызвать OptimizeInplace, то переупорядочивание будет произведено в указываемом меше без создания нового.

Другой подход можно увидеть в примерах EnhancedMesh и ProgressiveMesh из SDK. В одном используется создание нескольких сегментов нужной детализации. В другом используется построение специального дерева вершин, на основе которого выводится меш с нужным числом вершин. Число выводимых вершин можно варьировать повершинно.

Для более полного понимания необходимо заглянуть в SDK.
ScorpForeva14 января 2005   19:41:02
Где можно скачать SDK 8.1?

Впервые SDK этой версии был выпущен в 2001 году. В политике компании Microsoft удалять все архивы более или менее большой давности со страниц своего сайта. Однако из раздела Download еще можно скачать DirectX SDK 8.1 Extras, что очень удивительно. Определенный адрес, по которому еще можно найти полный SDK, неизвестен. Поисковые сайты выдают ссылки только на Include и Lib файлы. Если провести поиск по ftp сайтам, то с очень малой вероятностью его можно отыскать, но... проблематично, так как большинство ссылок на сегодняшний день не работают. Последний выход - это воспользоваться файлообменными сетями с помощью клиентов типа eMule. Такой вариант может принести результат, но не гарантирует быстрого завершения процесса скачивания.
Жека08 октября 2004   15:31:52
Когда станут доступны справочники по DirectX?

Справочники не могут быть выложены из-за условий хостинга на narod.ru. В связи с этим дата, когда они будут доступны снова, неизвестна. В любом случае они появятся в том или ином виде.
Сергей7 сентября 2004   20:09:05
Можно ли средствами DX умножить 2 матрицы?
В си-шных примерах нашел, что после преобразования по двум или более функциям матрицы преобразования нужно перемножить, а затем уже проводить трансформацию вершин по получившейся матрице. Интересно как они перемножаются? Как в обычной математике? А то было примерно м3=м1*м2. Неужели весь ворох математических действий заменяет всего лишь знак умножения? Если в DX есть такая функция, то использует ли она железные возможности процессора (ммх,sse,sse2,3dnow) если таковые имеются?
Средствами DX умножить матрицы можно. И даже нужно. Трехмерная графика - это сплошная математика, и в любом API, будь то DX или OpenGL, в первую очередь реализуются именно эти возможности.

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

Умножение матриц проводится по обычным математическим законам. То, что в языке С++ выглядит как M1=M2*M3, на самом деле довольно сложные вычисления, просто они скрыты от нас для простоты использования. Реализуется это обычными классами производящими всю необходимую работу. Достаточно заглянуть в подключаемый файл d3dx ... math.inl.

В Direct'е все функции связанные с математикой находятся в библиотеке D3DX. В частности для умножения матриц там имеется функция D3DXMatrixMultiply.

При дизассемблировании функций реализованных в библиотеке D3DX было обнаружено, что имеет место быть проверка процессора на возможность работы с MMX,SSE,SSE2 и 3DNow. Однако в большинстве случаев используется обычный FPU. Более глубокий анализ не проводился, но сомневаться в том, что эти технологии используются нет необходимости.
Serxa30 августа 2004   03:54:35
У меня стоит VC 6.0(Enterprise) WinXP(sp1) и я скачал тут хедры и либы - переписал их в VC98\Include и VC98\Lib.

Проэкты для DDraw компилит, но не линкует:

1)unresolved external symbol _IID_IDirectDraw7;
2)unresolved external symbol _DirectDrawCreate@12.

Что делать? Help, Please!
Отвечает сам автор вопроса:

Я уже нашёл в чём была проблема :) Просто я из-за незнания программирования под Win32 и COM не продключил dxguid.lib и ddraw.lib в проэкт.
ГЕНЕРАТОР ЗЛА02 июня 2004   11:59:29
Никак не могу найти справку по DirectX 9.0 SDK на русском. Может вы знаете где скачать её можно? Подскажите если сможете...
Как таковой справочной информации наподобие DirectX9_c.chm на русском не существует. В данный момент остается только пользоваться многочисленными материалами и публикациями на русском языке опубликованными на ресурсах типа Gamedev.ru. Возможно, что-то удастся почерпнуть и здесь.
copyright © 2003-2006 keYMax
   © 2003-2006 keYMax
   Полное или частичное воспроизведение материалов сайта возможно только с разрешения автора
Компьютеры