Глюконат в DX, помогите разобраться!

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Глюконат в DX, помогите разобраться!

Сообщение Yurich » 01.08.2003 (Пт) 2:02

Дело было так:
0. С него все пошло.
1. Создаю MESH (в 3ДМакс), вызовом одной SUB подгружаю *.х в сцену под ДХ7. Ноу проблэм!!! Цвета деталей, отражение, полупрозрачность - все путем, работает так, как я задумал в Максе.
2. Гружу тот же Меш в ДХ8, по стандартной технологии, как ОНИ! рекомендуют - результат не заставил долго ждать: тормозилово - раз - это и в седьмом есть; цвет только один на все детали - два; устанавливать материалы и текстуры приходится отдельными процедурами(все равно не работает) - три; Меш отображается не полностью - отдельные детали пропадают по неизвестной причине - четыре.
3. Гружу тот же Меш в М-софт утилиту 'MeshViewer' от СДК8 - отображается правильно (она шо, в смысле утилита, пи-и-и-и-и-.. , на СИ написана? ФПСы - под две сотни)!!! Причем, ОНИ издеваются, в меню есть пункт "Оптимизировать МЕШ", и другие "навороты" от реализации которых нет толку - при загрузке МЕШ искажен.

Че "капиталисты" от нас прячут?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 06.10.2003 (Пн) 1:03

Один проект полностью завершил. На том же движке делаю второй, но такого, блин не ожидал. Словами пояснить трудно. Ниже скриншот. Одно успел проверить - если убрать цилиндр то грани на стене становятся, как подобает, ровными.
У вас нет доступа для просмотра вложений в этом сообщении.

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

Сообщение Mikle » 06.10.2003 (Пн) 15:24

Такие искажения может давать Z-буфер, когда в MatProjection задан неоправданно большой диапазон между zn и zf.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 06.10.2003 (Пн) 20:21

Спасибо, об этом и думал, попробую уменьшить модель.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 07.10.2003 (Вт) 19:56

Mikle писал(а):Такие искажения может давать Z-буфер, когда в MatProjection задан неоправданно большой диапазон между zn и zf.

Mikle, ты абсолютно прав! Надо быть очень осторожным в выборе размеров моделей. Что получамши:
под математику директ отводит восемь разрядов (пять из них я занял под целые - длина реальной конструкции = 13000 мм, так и сделал модель=13000 - и два осталось на плавающую). Как оказалось, для точной картинки этого мало. После преобразования размеров из мм в см картинка стала лучше. Вот Вам и пожалуйста - низзя сильно маленькие и низзя сильно большие! Первое грозит низким ФПС, второе - той балетристикой, что я показал.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 20.10.2003 (Пн) 1:02

Созрел вопрос:
Под DX8 гружу х-файл. В результате рендера все стенки рисуются только одной текстурой, не могу понять, в чем глюк


Sub LoadMyObjects()
Dim mtrlBuffer As D3DXBuffer ' универсальный кусок памяти
Dim i As Long
' загрузить Mesh из .х файла
Set mesh = D3DX.LoadMeshFromX(App.Path & "\Meshes\" & "kvgm30.x", D3DXMESH_MANAGED,D3DDevice, Nothing, mtrlBuffer, NumMaterials)
' распределить пространство для наших материалов и текстур
ReDim MeshMaterials(NumMaterials)
ReDim MeshTextures(NumMaterials)
Dim strTexName As String
' извлечь свойства материалов и имена текстур из MtrlBuffer
For i = 0 To NumMaterials - 1
' копировать материалы, используя d3dx функцию
D3DX.BufferGetMaterial mtrlBuffer, i, MeshMaterials(i)
'создать текстуры
strTexName = D3DX.BufferGetTextureName(mtrlBuffer, i)
If strTexName <> "" Then
Set MeshTextures(i) = D3DX.CreateTextureFromFile(D3DDevice, strTexName)
End If
' установить материал и текстуру для этого подмножества
D3DDevice.SetMaterial MeshMaterials(i)
D3DDevice.SetTexture 0, MeshTextures(i)
Next i
Set mtrlBuffer = Nothing
End Sub

' рендер:

D3DDevice.BeginScene
'Rendering объектов сцены
For i = 0 To NumMaterials - 1
mesh.DrawSubset i
Next i
D3DDevice.EndScene

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

Сообщение Mikle » 20.10.2003 (Пн) 8:50

SetTexture должно быть здесь:
Код: Выделить всё
For i = 0 To NumMaterials - 1
  D3DDevice.SetTexture 0, MeshTextures(i)
  mesh.DrawSubset i
Next i

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 20.10.2003 (Пн) 23:16

Майкл, Сенк! Работает.
Я продолжаю: тот же Х-файл в 8 прорисовывается в 1,5-3 раза медленнее, чем в 7 (15 ФПС против 36), мыша ужасно тормозит. Причем в 7 еще идет озвучка, тексты, прибамбасы. Голова болит о том, что это только сотая часть сцены. Тормоз как раз в пяти строках между D3DDevice.Clear и D3DDevice.Present. Что посоветуешь предпринять для ускорения?

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

Сообщение Mikle » 21.10.2003 (Вт) 15:05

Что посоветуешь предпринять для ускорения?

Такого тормоза быть не должно. Поищи разницу между реализациями на DX7 и DX8. Может формат вертекса другой или размер текстуры не кратен 2^n, а в DX7 он автоматом масштабировался (я не утверждаю, это к примеру). Может до Mesh-а использовалась Alfa и не была выключена.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 25.11.2003 (Вт) 23:31

Где в ДХ-е находится этот чертов отловщик ошибок :?: В константах имеется D3D_OK, D3DRM_OK и прочие, а как их использовать не могу понять!!! :cry: Гвоздь в том, что мне надо проверить, лежит ли текстура на поверхности. Если использую GetTexture (RM-mode), а её там нет, то прога с грохотом валится. При этом никаких средств для проверки, по-видимому не существует :roll: !!!!!

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 27.11.2003 (Чт) 18:05

Если ты хочешь просто проверить существут такой файл или нет, то могу примерчик дать.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 27.11.2003 (Чт) 20:03

Макс, спасибо, но дело не в примерчике. Тут что-то глобальное. В SDK Documentation имеется пример обработки ошибок не этапе BeginScene-EndScene, но не работает он в VB. Реальный пример напрочь отсутствует, хоть плачь и со слезами перекручивай незавершенный код на С++. Считай, с детства пишу на Басике, Си понимаю, но тяжел он для меня. Текстура в ДХ-7 в отличие от ДХ-8 при загрузке х-файла грузится автоматом, это хорошо и быстро. НО:
1. Не всегда необходимо тектурировать всю сцену, во многих случаях достаточно для части поверхностей просто задать цвет и параметры материала (так экономичнее).
2. После загрузки надо установить ключевой прозрачный цвет (только для текстур, напрмер, черный), и тут выползает пункт 3.
3. Гружу. Удачно!. Проверяю:
Dim TmpTex As Direct3DRMTexture3

Set TmpTex = Face.GetTexture = висяк!

Face.GetTexture.GetName = висяк! (При наличии текстуры = "")

Ну, может класса там нет? Проверяю

Face.GetTexture.GetClassName = "Texture" - Парадокс, текстуры
нет, а имя класса возвращается.
пробую дальше:
Face.GetTexture.GetDecalSize = висяк!

Думаю, черт, ладно, попробую иначе

If Face.GetTexture Is Nothing Then... = никакой реакции,
будто строка проверки
отсутствует (а как-же, класс
существует, хоть и пустой!).
Повбивав би гадив!!!

Последний писк чуть живого существа

On Error Resume Next
Set TmpTex = Face.GetTexture = висяк!
Err.Clear

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 27.11.2003 (Чт) 21:29

Даже не знаю. У меня тоже есть одна маленькая проблема. Мне надо сделать так, что если Error, то выводиться Msg. Но что то не так, если Error-а не было, всё равно Msg показывает. Как бы это сделать?

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 29.11.2003 (Сб) 12:29

Всё разобрался с этим откладчиком ошибок. Если ты хочешь, что бы у тебя ничего не лагало, даже если Error, попробуй поставить On Error Resume Next перед всем кодом...

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 03.12.2003 (Ср) 3:06

Код разбит модули и классы! Увы, не работает ни снаружи, ни внутри модуля/класса, ни внутри поцедуры.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 20.06.2004 (Вс) 10:50

Yurich писал(а):... тот же Х-файл в ДХ8 прорисовывается в 1,5-3 раза медленнее, чем в ДХ7...

Понял, что причина в ожидании О.Х. кадровой развертки, но не въеду как в ДХ8 это отключить.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 20.06.2004 (Вс) 18:24

Yurich писал(а):
Yurich писал(а):... тот же Х-файл в ДХ8 прорисовывается в 1,5-3 раза медленнее, чем в ДХ7...

Понял, что причина в ожидании О.Х. кадровой развертки, но не въеду как в ДХ8 это отключить.

Если ты имеешь ввиду вертикальную синхронизацию, то d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE , где d3dpp - D3DPRESENT_PARAMETERS :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 21.06.2004 (Пн) 23:23

Ну, да, её дорогую! Щас попробую покопать...
Хай! Работает! Огромное СЕНКС! ...
Следите за темой. ЕЩЕ Будет КУЧА вопросов!
А как сохранить скриншот в ДХ8, без него я не смогу пояснить глюки, причем глюки весьма забавные!
И еще деду не в тему. Как нарисовать свою картинку слева?

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 22.06.2004 (Вт) 8:57

Yurich писал(а):А как сохранить скриншот в ДХ8, без него я не смогу пояснить глюки...

Скриншот:
Код: Выделить всё
Public Sub ScreenShot(ByVal FileName As String)
Dim ScreenSurface As Direct3DSurface8
Dim SrcPalette As PALETTEENTRY
Dim SrcRect As RECT
Dim DispMode As D3DDISPLAYMODE

  D3DDevice.GetDisplayMode DispMode
  Set ScreenSurface = D3DDevice.CreateImageSurface(DispMode.Width, DispMode.Height, D3DFMT_A8R8G8B8)' мошь покрутить формат..
   D3DDevice.GetFrontBuffer ScreenSurface
    With SrcRect
       .Left = 0
       .Right = DispMode.Width
       .Top = 0
       .Bottom = DispMode.Height
    End With

' сохраняем рисунок
D3DX.SaveSurfaceToFile FileName, D3DXIFF_BMP, ScreenSurface, SrcPalette, SrcRect
' освободим память
Set ScreenSurface = Nothing
End Sub
:roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 22.06.2004 (Вт) 19:33

Вовик, спасибо!

Вот, кубик отображается в режиме
D3DDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
Текстура - TGA с альфой.
Когда камера смотрит вдоль положительного направления Z, внутренние стороны граней не видны. Но стоит камеру повернуть вдоль положительного X - все нормально. Видимость грани почему-то зависит от направления просмотра. Как можно избавиться?
У вас нет доступа для просмотра вложений в этом сообщении.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 22.06.2004 (Вт) 19:45

Честно говоря, с этим я ещё не сталкивался... :shock: Может быть z-буфер отсекает.... ты пример выложи.... :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 23.06.2004 (Ср) 15:42

Vovik писал(а):...ты пример выложи...

Управление камерой - w,a,s,d, стрелки и мыша
У вас нет доступа для просмотра вложений в этом сообщении.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 23.06.2004 (Ср) 17:18

Vovik писал(а):... Может быть z-буфер отсекает...

Как ты догадался?

D3DDevice.SetRenderState D3DRS_ZENABLE, 0

Я думаю, что каждую модельку в отдельности можно будет рендить со свими индивидуальными параметрами (видимость, яркость, прозрачность и т.п.). Верно?

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 23.06.2004 (Ср) 17:37

Yurich писал(а):
Vovik писал(а):... Может быть z-буфер отсекает...

Как ты догадался?

D3DDevice.SetRenderState D3DRS_ZENABLE, 0

Я думаю, что каждую модельку в отдельности можно будет рендить со свими индивидуальными параметрами (видимость, яркость, прозрачность и т.п.). Верно?
Верно. Я вообще так и делаю....
:wink: Слушай, не могу запустить проект... нету win32.tlb ... Забудь ты про неё. в 8 версии dx - есть всё, что нужно. :roll:

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 23.06.2004 (Ср) 17:41

Слушай, поставь SwapEffect = D3DSWAPEFFECT_FLIP... уже при инициализации получил выигрышь в 15 кадров+когда камера отъезжает, то fps начинают увеличиваться... :)

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 23.06.2004 (Ср) 22:36

Vovik писал(а):... нету win32.tlb ... Забудь ты про неё. в 8 версии dx - есть всё, что нужно.

Ну неохота описывать стандартные ф-ии АПИ, занимает тьму времени!
У вас нет доступа для просмотра вложений в этом сообщении.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 23.06.2004 (Ср) 22:54

Vovik писал(а):Слушай, поставь SwapEffect = D3DSWAPEFFECT_FLIP... уже при инициализации получил выигрышь в 15 кадров+когда камера отъезжает, то fps начинают увеличиваться... :)

Хе-хе, мелковато! Я это пробовал - На моей дохлой МХ400 прибавка дует 217 против 142 - просто не обращал внимания. Спасибо!

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 24.06.2004 (Чт) 0:11

Где-то, чуть раньше, мы говорили про анимацию, не могу найти ...

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.06.2004 (Чт) 8:31

Yurich писал(а):Ну неохота описывать стандартные ф-ии АПИ, занимает тьму времени!
а мне кажется, что лучше один раз описать, чем тягать со своим проектом библиотеку... :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 07.07.2004 (Ср) 0:40

Можно-ли менять уровень прозрачности не прибегая к использованию наборов TGA-текстур? Если да, то как?
И ещё, хотелось бы пояснение (или примерчик) по TextureMapping.

След.

Вернуться в Мультимедиа

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList