Direct3D9 в VB6.

Автор обещает много интересных штучек.

Модератор: The trick

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Direct3D9 в VB6.

Сообщение The trick » 12.07.2015 (Вс) 18:41

Всем привет.
Уже довольно давно занимаюсь созданием библиотеки типов Direct3D9 и вспомогательных функций D3DX для VB6. Но на днях у меня сломался жесткий диск и абсолютно все мои проекты/исходники оказались недоступными. Состояние ЖД я пока не знаю, но позже я отдам его специалистам для восстановления данных. Решил выложить последний бекап сюда, который лежал в сети. Если не получится восстановить информацию то возможно я заброшу этот проект иначе буду здесь обновлять информацию по мере необходимости.
Итак в архиве содержится библиотека типов "DirectX 9 for Visual Basic 6.0 type library by The trick" (dx9vb.tlb) содержащая описание следующих интерфейсов:
  • IDirect3D9;
  • IDirect3DDevice9;
  • IDirect3DSurface9;
  • IDirect3DResource9;
  • IDirect3DSwapChain9;
  • IDirect3DTexture9;
  • IDirect3DBaseTexture9;
  • IDirect3DVolumeTexture9;
  • IDirect3DVolume9;
  • IDirect3DCubeTexture9;
  • IDirect3DVertexBuffer9;
  • IDirect3DIndexBuffer9;
  • IDirect3DStateBlock9;
  • IDirect3DVertexDeclaration9;
  • IDirect3DVertexShader9;
  • IDirect3DPixelShader9;
  • IDirect3DQuery9;
Также в этой библиотеке задеклалриованы множество типов, констант и энумов. Работа этой библиотеки слабо тестировалась, поэтому что-то может не работать.
Также в архиве содержится несколько модулей написанных на VB6:
  • D3DX_COLOR.bas - для работы с цветами
  • D3DX_MATRICES.bas - для работы с матрицами
  • D3DX_QUATERNION.bas - для работы с кватернионами
  • D3DX_VECTOR2.bas, D3DX_VECTOR3.bas, D3DX_VECTOR4.bas - для работы с векторами
  • D3DX_MISC.bas - различные функции которые не вошли не в одну из категорий
Эти модули содержат аналоги соответствующих функций D3DX.
Также в архиве содержится несколько тестовых примеров работы.
Изображение
Изображение
Изображение
Изображение

GitHub.

08.24.2015. добавлен пример вывода текста

09.17.2015. добавлен пример 3D форма

02.27.2016. Исправлен баг в функции D3DXMatrixTranspose. Изменены типы указателей на Any в методах IDirect3DDevice9::CreateVertexShader, IDirect3DDevice9::CreatePixelShader, IDirect3DDevice9::SetPixelShaderConstantB, IDirect3DDevice9::SetPixelShaderConstantI, IDirect3DDevice9::SetPixelShaderConstantF, IDirect3DDevice9::SetVertexShaderConstantB, IDirect3DDevice9::SetVertexShaderConstantI, IDirect3DDevice9::SetVertexShaderConstantF

06.05.2018. Добавлены примеры: Сцена (камера, процедурная генерация, выделение мышью, трансформации), "Лазерные" линии, Рендеринг в отдельном потоке
Исправлены баги в функциях: D3DXMatrixTranspose, D3DXMatrixRotationQuaternion, D3DXVec2Length;
Изменен прототип для функции D3DXPlaneIntersectLine, вместо генерации ошибки функция возвращает значение;
Изменено поведение функции D3DXQuaternionToAxisAngle, теперь она может принимать ненормализованные кватернионы.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Direct3D9 в VB6.

Сообщение Хакер » 12.07.2015 (Вс) 21:56

Говорил я завести проект в каком-нибудь трекере задач и иметь репозиторий на GitHub'е или BitBucket'е. Ситуация была бы принципиально исключена.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 13.07.2015 (Пн) 10:03

Все демки показывают низкий FPS, это потому, что не задан pP.PresentationInterval.
Демка ландшафта из EXE работает, а из IDE показывает чёрный экран, пока не разбирался почему.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 13.07.2015 (Пн) 20:05

The trick писал(а):Если не получится восстановить информацию то возможно я заброшу этот проект иначе буду здесь обновлять информацию по мере необходимости.

Прекрасно понимаю, когда опускаются руки перед такой задачей (чего стоит она только функция CreateTextureFromFileEx() со всеми её нюансами), особенно когда придётся что-то делать повторно.
Поэтому повторю своё предложение. Для начала определимся, для каких целей будет использоваться данный порт. Полная независимость от DLL нужна только для демосцены, но там не требуется полная функциональность, достаточно дать пример пользователю, как можно загрузить текстуру, такая загрузка уже есть в твоих примерах.
Теперь, если мы не занимаемся демосценой, чем не устраивает использование d3dx9_xx.dll? Да в первую очередь глупыми ограничениями Майкрософта на распространение этих библиотек. Но вплоть до октября 2004 года SDK ещё содержал D3DX не в виде отдельной DLL, а в виде .Lib и .h файлов. Весь D3DX свободно линковался к проекту статически. Никто не мешает сделать свою Dll, просто скомпилировав нужные функции из SDK, и на распространение такой Dll не будет никаких ограничений. Так без особого напряжения можно повторить хоть всю функциональность D3DX, хотя математику, действительно, лучше иметь в виде исходного кода, но это у тебя уже есть.

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 13.07.2015 (Пн) 20:27

Mikle писал(а):Для начала определимся, для каких целей будет использоваться данный порт. Полная независимость от DLL нужна только для демосцены, но там не требуется полная функциональность, достаточно дать пример пользователю, как можно загрузить текстуру, такая загрузка уже есть в твоих примерах.

Да, моя первоначальная цель была полная независимость от дополнительных библиотек.
Mikle писал(а):Теперь, если мы не занимаемся демосценой, чем не устраивает использование d3dx9_xx.dll?

Да всем устраивает, это можно делать задекларировав API через Declare, кто захочет - тот сделает. Но первоначальная цель была, как я написал, в отсутствии зависимостей, плюс, как ты написал, у нее проблемы с распространением.
Mikle писал(а):Весь D3DX свободно линковался к проекту статически.

На том ЖД был еще один проект (Add-in) который по задумкам должен был дать возможность пользователю статически линковать библиотеки в VB6 + еще куча фич (импорт используя Declare, замена стандартных функций на свои, шифрование кода и т.п.). Вот немного я писал тут, там даже есть "кривой" способ статической линковки.
btw выложу на днях тлб DirectSound, уже есть загрузка MP3, нужно сделать только нормальный waiter для асинхронного ожидания, т.к. мой класс на каждый WaitForXXXXXXObject создает поток заново, а нужно сделать только один и в нем постоянно работать. Я тебе по моему даже скидывал WAV плеер?
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 13.07.2015 (Пн) 23:11

The trick писал(а):Я тебе по моему даже скидывал WAV плеер?

Было дело.
The trick писал(а):На том ЖД был еще один проект (Add-in) который по задумкам должен был дать возможность пользователю статически линковать библиотеки в VB6 + еще куча фич

Ох, ни фига ж себе.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Direct3D9 в VB6.

Сообщение bon818 » 15.07.2015 (Ср) 1:52

Mikle писал(а):
The trick писал(а):На том ЖД был еще один проект (Add-in) который по задумкам должен был дать возможность пользователю статически линковать библиотеки в VB6 + еще куча фич

Ох, ни фига ж себе.

Да, это интересно.

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 15.07.2015 (Ср) 10:11

Mikle писал(а):Ох, ни фига ж себе.

bon818 писал(а):Да, это интересно.

Да в принципе даже сейчас это можно делать как с STDCALL так и CDECL ссылку я дал где я это уже делал. Правда способ кривой, для этого нужно будет экспортировать из EXE их, а потом вызывать через Declare для STDCALL или через TLB для STDCALL/CDECL.
Вот еще пример. Имеем вот такую функцию подсчета символов в строке:
Код: Выделить всё
extern "C" int __stdcall StrLen(char* str)
{
   char* strStart;

   if (!str) return 0;
   
   strStart = str;

   while (*str) {
      str = str + 1;
   }

   return str - strStart;

};

Компилируем статическую библиотеку. В проект VB6 добавляем следующие строчки:
Код: Выделить всё
[VBCompiler]
LinkSwitches= "C:\Program Files\Microsoft Visual Studio\VB98\Projects\TestVB6StaticLink\Release\TestVB6StaticLink.lib" /EXPORT:_StrLen@4

Соответственно путь до LIB указываем свой.
Открываем VB проект и пишем такой код:
Код: Выделить всё
Option Explicit

Private Declare Function StrLen Lib "prjTestStaticLink.exe" Alias "_StrLen@4" (ByVal str As String) As Long

Private Sub txtTest_Change()
    Me.Caption = StrLen(txtTest.Text)
End Sub

Т.е. вызываем у себя же эту функцию. Тут есть ньюанс, если переименовать EXE то это не будет работать, но это легко обойти.
Компилируем. Запускаем. Наблюдаем:
Изображение
Можно посмотреть в отладчике - код действительно "вшит" в EXE:
Изображение
Можно написать специальную утилиту которая будет удалять нежелательный экспорт и делать непосредственный вызов линкованых функций уже применяемую к готовому EXE.
Я просто хотел сделать это без этих извращений. Я написал парсер OBJ/LIB файлов который позволяет модифицировать содержимое и сохранять результат. По моей задумке после выбора LIB/OBJ файла появляется список экспортируемых символов, пользователь выбирает в окне какие он хочет использовать. После этого добавляется модуль с функциями-пустышками, которые пользователь вызывает из программы (тут можно сделать и TLB для поддержки CDECL). В процессе компиляции обрабатывается каждый OBJ модуль и если там содержится обращение к функции пустышке, то оно заменяется на соответствующее в LIB/OBJ файле и пересохраняется. После этого когда происходит линковка, просто в параметрах линковщика дописывается дополнительно путь к LIB/OBJ файлу и линковщик сам компонует файл.
Вложения
TestVB6StaticLink.zip
(44.92 Кб) Скачиваний: 426
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Direct3D9 в VB6.

Сообщение Хакер » 15.07.2015 (Ср) 11:52

Mikle писал(а):Ох, ни фига ж себе.

bon818 писал(а):Да, это интересно.

Интересно, что всё уже давно описано: viewtopic.php?f=9&t=43618&hilit=vbcompiler
А они охают...

А чтобы избавиться от привязке к собственному имени, можно использовать Magic Pointers.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Direct3D9 в VB6.

Сообщение bon818 » 15.07.2015 (Ср) 14:46

[VBCompiler] прикольно.
Даже не знал что можно так объявлять: Declare Function StrLen Lib "ххх.exe" Alias "_StrLen@4"
а что означает @4, As Long ? понял __stdcall , int func( int a, double b )= _func@12

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Direct3D9 в VB6.

Сообщение Хакер » 15.07.2015 (Ср) 15:56

bon818 писал(а):@4

Только общий размер аргументов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 16.07.2015 (Чт) 9:52

Разобрался почему не работала демка ландшафта из IDE - в строке задания вертексного буфера был указан нулевой шаг вместо размера вертекса:
Код: Выделить всё
d3dev.SetStreamSource 0, vtxBuf, 0, 0 ' 8 * 4

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 16.07.2015 (Чт) 10:26

Mikle писал(а):Разобрался почему не работала демка ландшафта из IDE - в строке задания вертексного буфера был указан нулевой шаг вместо размера вертекса:
Код: Выделить всё
d3dev.SetStreamSource 0, vtxBuf, 0, 0 ' 8 * 4

Спасибо, исправлю.
UA6527P

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 17.09.2015 (Чт) 16:40

UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Direct3D9 в VB6.

Сообщение Хакер » 17.09.2015 (Чт) 18:05

form или from?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 17.09.2015 (Чт) 18:50

Именно Form, видно же по видео.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Direct3D9 в VB6.

Сообщение Admiralisimys » 03.10.2015 (Сб) 14:32

The trick писал(а):3D form Visual Basic 6 using DirectX9

Круто, напомнило один пример подобного симбиоза элементов управления Win32 UI с 3D эффектами.
Изображение
Не смотря исходники, всё предполагал, как такое делается: мол принтскринят, а потом проводят манипуляции с полученной текстурой.
Вложения
Direct3D and Win32 UI.gif
(939.25 Кб) Скачиваний: 448
Direct3D and Win32 UI_sm.gif
(98.94 Кб) Скачиваний: 976

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 03.10.2015 (Сб) 23:38

Admiralisimys писал(а):Не смотря исходники, всё предполагал, как такое делается: мол принтскринят, а потом проводят манипуляции с полученной текстурой.

Почти. Получается изображение окна и копируется в текстуру. Создается квад по размеру окна и на него наносится текстура, чтобы при нулевой трансформации окно выглядело почти как оригинал. Потом при трансформации меняется стиль окна на слоеное и производится рендер в него (образно) квада с нужной трансформацией.
UA6527P

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 27.02.2016 (Сб) 12:06

Обновление.
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 20.03.2016 (Вс) 15:30

Похоже, какая-то проблема с IDirect3D9::CheckDeviceMultiSampleType Method.
По SDK это функция, которая должна вернуть HRESULT, но у тебя это Sub, соответствующего out параметра тоже нет.
Прилагаю минимальный тестовый проект.
Вложения
CheckMSAA.zip
(2.12 Кб) Скачиваний: 324

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Direct3D9 в VB6.

Сообщение The trick » 20.03.2016 (Вс) 15:44

Mikle писал(а):Похоже, какая-то проблема с IDirect3D9::CheckDeviceMultiSampleType Method.
По SDK это функция, которая должна вернуть HRESULT, но у тебя это Sub, соответствующего out параметра тоже нет.
Прилагаю минимальный тестовый проект.


Потому что HRESULT - это статус выполнения. Если статус неудачен - генерируется ошибка, номер ошибки можно узнать из объекта Err.
Код: Выделить всё
    On Error Resume Next
   
    Call D3d.CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_A8R8G8B8, D3D_TRUE, D3DMULTISAMPLE_4_SAMPLES, 0)
   
    If Err.Number = D3D_OK Then
      d3dpp.MultiSampleQuality = D3DMULTISAMPLE_4_SAMPLES
    End If
   
    On Error GoTo -1
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 20.03.2016 (Вс) 15:56

Ясно, без On Error не обойтись.

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Direct3D9 в VB6.

Сообщение Old_Maple » 01.02.2017 (Ср) 8:41

The trick, замечательная тлб-шка и примеры хорошие!
Но, по-моему, чтобы пошустрее все летало, параметру pP.PresentationInterval необходимо присвоить D3DPRESENT_INTERVAL_IMMEDIATE (&h80000000):
Код: Выделить всё
pP.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE

А вот интересно, хватит ли у VB6 мощи, чтобы на нем сделать движок с непрерывным ландшафтом? Но, такой, чтобы ландшафт не зацикленный был и не подгружал карту высот, а формировался на лету, посредством рандома? ;)
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 01.02.2017 (Ср) 9:55

Old_Maple писал(а):хватит ли у VB6 мощи, чтобы на нем сделать движок с непрерывным ландшафтом? Но, такой, чтобы ландшафт не зацикленный был и не подгружал карту высот, а формировался на лету, посредством рандома?

Всё зависит от детализации ландшафта.
Old_Maple писал(а):чтобы пошустрее все летало, параметру pP.PresentationInterval необходимо присвоить D3DPRESENT_INTERVAL_IMMEDIATE (&h80000000):

И видюха будет греться, выдавая тысячи fps?

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Direct3D9 в VB6.

Сообщение Old_Maple » 01.02.2017 (Ср) 10:58

Mikle писал(а):И видюха будет греться, выдавая тысячи fps?

Моя видюха выдает 2900 fps и ничего... справляется... :)
Ну, если не нужна высокая производительность, то
Код: Выделить всё
D3DPRESENT_INTERVAL_ONE
или
Код: Выделить всё
D3DPRESENT_INTERVAL_DEFAULT

Кстати, Mikle, в Ваших примерах: http://bbs.vbstreets.ru/download/file.php?id=10351 в параметре
Код: Выделить всё
d3dpp.PresentationInterval = D3DPRESENT_IMMEDIATE
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 01.02.2017 (Ср) 11:09

Да, я часто ставлю D3DPRESENT_IMMEDIATE на этапе отладки, чтобы следить за быстродействием, или продемонстрировать быстродействие.
Но если демо не содержит счётчика FPS, то и D3DPRESENT_IMMEDIATE не требуется.
Ещё D3DPRESENT_INTERVAL_ONE не всегда корректно работает в оконном режиме в новых Windows.

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Direct3D9 в VB6.

Сообщение Old_Maple » 16.03.2017 (Чт) 15:29

The trick,
Анатолий, при введении в пример LandScape следующих функций:
Код: Выделить всё
d3dev.SetSamplerState 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR
d3dev.SetSamplerState 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR
d3dev.SetSamplerState 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR

почему-то сглаживания не происходит.
В чем может быть причина, на Ваш взгляд?
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 16.03.2017 (Чт) 16:29

Происходит. И там уже включены мин и макс фильтры, только мипа нет. Просто там мелкая текстура, трудно заметить, чтобы стало заметнее, можно поменять масштаб текстуры раз в 10.
Вместо:
Код: Выделить всё
        vert(X - 1, Y - 1).tu = X / bi.bmiHeader.biWidth
        vert(X - 1, Y - 1).tV = Y / Abs(bi.bmiHeader.biHeight)

Подставить:
Код: Выделить всё
        vert(X - 1, Y - 1).tu = 0.1 * X / bi.bmiHeader.biWidth
        vert(X - 1, Y - 1).tV = 0.1 * Y / Abs(bi.bmiHeader.biHeight)

Потом отключить сглаживание и увидеть разницу.
Правда я не понял, зачем у The trick там привязка к размеру формы.

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: Direct3D9 в VB6.

Сообщение Old_Maple » 16.03.2017 (Чт) 21:18

Mikle, для чистоты эксперимента взял Ваши текструры из примера "cam". Масштабы выставил такими же, как у Вас. В Вашем примере текстуры в перспективе сглаживаются хорошо, а вот при подключении тлб-шки Анатолия текстуры в перспективе не "размываются". Видимо, все-таки, фильтры работают как-то иначе.
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Direct3D9 в VB6.

Сообщение Mikle » 16.03.2017 (Чт) 22:34

Виновата процедура загрузки текстуры из файла, нужно не так:
Код: Выделить всё
d3dev.CreateTexture bi.bmiHeader.biWidth, -bi.bmiHeader.biHeight, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, LoadTextureFromFile

а так:
Код: Выделить всё
d3dev.CreateTexture bi.bmiHeader.biWidth, -bi.bmiHeader.biHeight, 0, D3DUSAGE_DYNAMIC Or D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, LoadTextureFromFile

Ну и mipfilter включить, конечно.

След.

Вернуться в The trick

Кто сейчас на конференции

Сейчас этот форум просматривают: Old_Maple и гости: 2

    TopList