Текстуры и карты (DX8)

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

Модератор: Mikle

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

Текстуры и карты (DX8)

Сообщение Maxwell » 30.10.2003 (Чт) 18:13

Каким образом можно присваивать одной модели несколько текстур?
К примеру я рисую карту в Max-е и мне надо каждой стене свою текстуру. Создавать много разных моделей-муторно.

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

Сообщение Mikle » 30.10.2003 (Чт) 18:27

Если пользуешься мешами, то достаточно сделать так: отдельная текстура - отдельный сабсет.

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

Сообщение Maxwell » 30.10.2003 (Чт) 19:12

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

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

Сообщение Mikle » 31.10.2003 (Пт) 10:02

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

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

Сообщение Maxwell » 31.10.2003 (Пт) 16:40

Видимо я тебя не понимаю, объясни пожалуйста поподробнее.
Я думал много разнах файлов и их поотдельности рендериш со своей текстурой. Что значит много сабсетов в одном меше-это и есть один файл?

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

Сообщение Mikle » 31.10.2003 (Пт) 18:04

Один меш может содержать несколько частей (сабсетов), их рендерят в цикле:
Код: Выделить всё
  For n=1 to numSubsets
    set texture=.....
    mesh.drawsubset....
  next n

а храниться меш может в одном X-файле.

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

Сообщение Maxwell » 02.11.2003 (Вс) 20:57

Так, это понятно.
А по какому принципу в Max-е subset-ы распределяются?

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

Сообщение Mikle » 03.11.2003 (Пн) 9:47

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

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

Сообщение Yurich » 03.11.2003 (Пн) 18:35

Ну да! Лепишь большой фрейм со статическими мешами. Итоговый 3DS конвертишь с опцией -Т. Потом весь этот статик грузишь за один проход. А то, что должно крутиться, мигать, и т.п. - отдельно и крутишь, как уже говорил Майкл.
Макс, вопрос по Мах-у и у меня на первом плане. Например, делаю куб, и надо чтобы его грани были с разными текстурами. Приходится делать все текстуры в одной и потом для каждой грани применять WRAP. Похоже, что иначе нельзя.
Сейчас пробую применить анимированный меш, но пока результ нулевой, ничего понять не могу.

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

Сообщение Maxwell » 03.11.2003 (Пн) 19:04

Отлично, с subset-ами разобрался.

Yurich, может тебе у кубика, грани сделать разными сабсетами.

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

Вопрос по поводу материалов:
Я хочу во время игры поменять объекту прозрачность. В материалах есть Ambient.a. Когда я его выставляю у меня объекты становяться просто тёмными, а не как не прозрачными.
Какие параметры надо выставлять, что бы изменить прозрачность объекту?

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

Сообщение Mikle » 04.11.2003 (Вт) 10:01

Ссылка не пашет, т. к. я договорился о совместном продолжении проекта с одной командой и, согласно договору, убил свои ссылки. Скоро должна выйти демка на сайте, посвященном игре.

Ambient - это не прозрачность, а светимость. А как плавно изменить прозрачность в меше - трудно сказать. Будь это не меш, а какой-нибудь TriangleList или Strip, я бы сделал прозрачность не текстурную, а вертексную, а потом менял ее прямо в вертекс-буфере.

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

Сообщение Maxwell » 04.11.2003 (Вт) 18:12

А как нибудь через Color нельзя?
И как Wrap работает? Просто я хочу изменить положение текстуры на объекте, что то не выходит.

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

Сообщение Yurich » 04.11.2003 (Вт) 20:20

Maxwell писал(а):Отлично, с subset-ами разобрался.

Yurich, может тебе у кубика, грани сделать разными сабсетами.


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


Maxwell писал(а):Mikle, хотел посмотреть твои гонки, но увы ссылка не живая.

Это не значит, что хвостов от ней не осталось, лови ...
У вас нет доступа для просмотра вложений в этом сообщении.

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

Сообщение Yurich » 04.11.2003 (Вт) 20:29

Maxwell писал(а):... как Wrap работает? Просто я хочу изменить положение текстуры на объекте, что то не выходит.

В 3DMax - Modifiers -> UV Coordinates ->Unwrap UVW.
Потом правой кнопкой на объекте:
Sub-objects -> Select Face. Дальше в окне редактирования очень просто, разберешься.
В басике пока еще не знаю.

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

Сообщение Maxwell » 04.11.2003 (Вт) 21:36

Спасибо Yurich, но в Max-е я хорошо разбираюсь. Мне бы в DX Wrap.

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 05.11.2003 (Ср) 18:49

Здрасте всем! у меня попутно вопросик:
в примере работы Д3Д загружается объект 3-д максовский вот так:

Set MSShip = RMMain.CreateMeshBuilder()
MSShip.LoadFromFile App.Path & "\ship.x", 0, 0, Nothing, Nothing
MSShip.ScaleMesh 0.5, 0.5, 0.5
FRShip.AddVisual MSShip

что это за икс такой? я когда в 3д максе сделал свой объект, то вставить его почему-то не удалось... пишет automation error на строке
MSShip.LoadFromFile App.Path & "\ship.x", 0, 0, Nothing, Nothing

Может в 3д максе чё поставить нада?

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

Сообщение Maxwell » 05.11.2003 (Ср) 20:01

*.x - это фаил понятняый DirectX-у. В Max-е export своё творение в 3DS. И затем при помощи проги CONV3DS конвертируешь этот 3DS в X файл.
CONV3DS - стандартная прога входящая в DXSDK, так же её можно скачать отдельно (поищи в инете).

----------------------------------------------

Mikle, так что там с WRAP?

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 05.11.2003 (Ср) 21:14

спасибо, разобюрался вроде... но вот проблема: когда из макса в 3дс сохраняю, текстуры куда-то деваются... не подскажете?

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

Сообщение Maxwell » 05.11.2003 (Ср) 21:21

Текстуры в 3DS и в X не сохраняются их надо отдельно загружать. Сохраняется только координаты текстур на меше.

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

Сообщение Yurich » 06.11.2003 (Чт) 3:01

Лёха_Virus писал(а):спасибо, разобюрался вроде... но вот проблема: когда из макса в 3дс сохраняю, текстуры куда-то деваются... не подскажете?

В действительности текстуры никуда не деваются. В 3DS и Х-файле их просто нет, но есть имена для поиска и загрузки. Я тоже на первых шагах сталкивался с этой проблемой. Тут нюансики:
1. DX7 грузит текстуры автоматом (по умолчанию из папки проекта).
2. Текстурки должны быть с соотношением сторон 1:1, 2:1, 1:4, 8:1 и т.п., иначе не получится.
3. Если папка другая, то следует указать патш

Direct3DRM3.SetSearchPath TexturePath

4. DX7 понимает только ВМР и РРМ.
5. DX8 сам не грузит ничего, кроме координат вершин и свойств материала. Потому приходится явно применять что нить типа

D3DX8.CreateTextureFromFile(D3DDevice, App.Path & TexturePath & strTexName)

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

Сообщение Maxwell » 06.11.2003 (Чт) 8:33

Лёха, я бы посоветовал тебе постараться переходить на DX8. Во первых потому, что в DX7 есть DIM и RM, а в DX8 всё в одном флаконе. Во вторых DX8 более прогрессивный, если так можно сказать. Я ведь сам начинал с D3DRM, но возникало множество проблем.

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 07.11.2003 (Пт) 14:47

пасиба :)

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 08.11.2003 (Сб) 13:06

Yurich писал(а):1. DX7 грузит текстуры автоматом (по умолчанию из папки проекта).

так получается что ни LoadTexture ни CreateWrap ни SetTexture ни Apply делать не надо что-ли?

и ещё, расскажите пожалуста про функцию CreateWrap . Я просто замучился накладывать текстуру на шарик. Чё там за координаты и параметры?

и ещё скажите пожалста, как мне осветить половину шарика с боку? я пробовал директлайт - он не поворачивается ваще, поинт - маленький какой-то... а спот ваще чёт не светит...

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

Сообщение Yurich » 08.11.2003 (Сб) 14:30

Лёха_Virus писал(а):так получается что ни LoadTexture ни CreateWrap ни SetTexture ни Apply делать не надо что-ли?

Угу, я это делаю так (Wrap делаю в Max-e):

Public D3DRM As Direct3DRM3
Public Scene As Direct3DRMFrame3 ' Фрейм сцены
Public Type MyWorld
Wrld As Direct3DRMFrame3
End Type
Public World(0 To ...) As MyWorld
----------------------------------------------------------------------------
' Создание объектов сцены
Public Sub CreateWorld(Index As Integer, xFileName As String)
With World(Index)
Set .Wrld = D3DRM.CreateFrame(Scene)
.Wrld.LoadFromFile MeshPath & xFileName, 0, _
D3DRMLOAD_FROMFILE, Nothing, Nothing
End With
End Sub

' Настройка прозрачности текстур
Public Sub SetWorldTexture(Index As Integer)
Dim S As Long, i As Long, j As Long
Dim ChFrame As Direct3DRMFrame3
Dim ChFrameS As Direct3DRMFrame3
Dim MeshBuild As Direct3DRMMeshBuilder3
Dim FaceCount As Long

Set ChFrame = D3DRM.CreateFrame(Nothing)
Set ChFrameS = D3DRM.CreateFrame(Nothing)

Set ChFrame = World(Index).Wrld.GetChildren.GetElement(0)
S = ChFrame.GetChildren.GetSize
If S > 0 Then
For i = 0 To S - 1
Set ChFrameS = ChFrame.GetChildren.GetElement(i)
Set MeshBuild = ChFrameS.GetVisual(0)
MeshBuild.SetQuality D3DRMRENDER_GOURAUD Or _
D3DRMLIGHT_ON
FaceCount = MeshBuild.GetFaceCount
For j = 0 To FaceCount - 1
Set Face = MeshBuild.GetFace(j)
Set Texture = Face.GetTexture
' прозрачный цвет=0
Texture.SetDecalTransparentColor 0
Texture.SetDecalTransparency D_TRUE
Next j
Next i
End If
Set MeshBuild = Nothing
Set ChFrame = Nothing
Set ChFrameS = Nothing
End Sub

Лёха_Virus писал(а):...CreateWrap . Я просто замучился накладывать текстуру на шарик.

Я тоже, и бросил эту затею!
Лёха_Virus писал(а):...осветить половину шарика с боку? я пробовал директлайт - он не поворачивается ваще, поинт - маленький какой-то... а спот ваще чёт не светит...


Чтобы поворачивался, надо всунуть в фрейм:

Public Device As Direct3DRMDevice3 ' Устройство рендеринга
Device.SetRenderMode _
3DRMRENDERMODE_VIEWDEPENDENTSPECULAR _
Or 3DRMRENDERMODE_BLENDEDTRANSPARENCY _
Or D3DRMRENDERMODE_SORTEDTRANSPARENCY _
Or D3DRMRENDERMODE_LIGHTINMODELSPACEPublic CameraLight As Direct3DRMLight 'Подсветка со стороны камеры
Public MainLightAmbient As Direct3DRMLight 'окружающее освещение сцены
Public FrameMainLight As Direct3DRMFrame3 'фрейм освещения сцены

Set FrameMainLight = D3DRM.CreateFrame(Scene)
' окружающее освещение сцены
Set MainLightAmbient = D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 1, 1, 1)
FrameMainLight.AddLight MainLightAmbient
' Точечное освещение со стороны камеры
Set CameraLight = D3DRM.CreateLight(D3DRMLIGHT_POINT, dx.CreateColorRGB(0.4, 0.4, 0.4))
CameraLight.SetRange 100 ' радиус поинта
CameraLight.SetConstantAttenuation 0
CameraLight.SetLinearAttenuation 1 ' линейное ослабление
CameraLight.SetQuadraticAttenuation 0
Camera.AddLight CameraLight
' Источник конусного света:
Dim Lamp As Direct3DRMFrame3
Dim LampLight As Direct3DRMLight
Set Lamp = D3DRM.CreateFrame(Nothing)
Set LampLight = D3DRM.CreateLightRGB(D3DRMLIGHT_SPOT, 1, 1, 1)
LampLight.SetRange 50 ' длина конуса
LampLight.SetUmbra 3.14 ' угол наружного конуса = 180
LampLight.SetPenumbra 3.14 ' угол внутреннего конуса
LampLight.SetConstantAttenuation 0.4
LampLight.SetQuadraticAttenuation 0.4
LampLight.SetLinearAttenuation 0.5
Lamp.SetPosition Nothing, x, y, z
Lamp.AddLight LampLight
' ориентация векторная, надо подобрать (значения в диапазоне 1-0-1)
Lamp.SetOrientation Nothing, 1, 0, 0, 0, 1, 0


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

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

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

    TopList