Как подвинуть текстуру на .Х меше?

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

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Как подвинуть текстуру на .Х меше?

Сообщение longwair » 22.07.2014 (Вт) 12:36

Хочу сделать речку. И передвигая текстуру добиться эффекта что речка течёт. Так вот, как это сделать?

Меш гружу так:
Код: Выделить всё
Public Function InitGeometry() As Boolean
Plane = CreateGameMesh(App.Path + "\Plane.x")
End Function

создаю меш и открываю текстуру:
Код: Выделить всё
Private Function CreateGameMesh(FileName As String) As GameMesh
Dim MtrlBuffer As D3DXBuffer
Dim i As Long

Set CreateGameMesh.Model = d3dx.LoadMeshFromX(FileName, D3DXMESH_MANAGED, _
                               d3dDevice, Nothing, MtrlBuffer, CreateGameMesh.NumMaterials)
ReDim CreateGameMesh.MeshMaterials(CreateGameMesh.NumMaterials)

For i = 0 To CreateGameMesh.NumMaterials - 1
   d3dx.BufferGetMaterial MtrlBuffer, i, CreateGameMesh.MeshMaterials(i)
   CreateGameMesh.MeshMaterials(i).Ambient = CreateGameMesh.MeshMaterials(i).diffuse
Next

Set TexWater = d3dx.CreateTextureFromFile(d3dDevice, App.Path + "\Water.dds")

Set MtrlBuffer = Nothing
End Function

В рендере:
Код: Выделить всё
    d3dDevice.SetTexture 0, TexWater
    DrawGameMesh Water, 0, 0, 0
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как подвинуть текстуру на .Х меше?

Сообщение longwair » 24.07.2014 (Чт) 10:41

Походу все на морях)))

Неужели никто не поможет.
Думаю текстуру надо двигать через tu, tv. Но как, и куда это впихнуть не знаю.

Ниже пример gif анимация сделал в 3d Max показывает то чего я хочу добиться.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение Mikle » 27.07.2014 (Вс) 16:26

Я не вижу собственно кода самой анимации. Или ты грузишь анимированную текстуру и надеешься, что DX её сам воспроизведёт?

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как подвинуть текстуру на .Х меше?

Сообщение longwair » 27.07.2014 (Вс) 20:25

Так по этому и спрашиваю, что не знаю как это сделать.
Ниже пример из твоей книги, я дописал пару строк и двигаю текстуру "легко". Но это ведь всего три вёртекса, да и не меш вовсе. А как подвигать текстуру на меше *.X, ума не приложу. 3 дня лазил по форуму но так ничего конкретного и не нашёл. Эта тема viewtopic.php?f=6&t=4541&hilit=%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D1%8C+%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D1%83&start=30 , не дала ответа(((
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение The trick » 28.07.2014 (Пн) 1:22

1. Убрать RHW из формата вертекса, иначе матрицы не будут работать.
2. Разрешить трансформации текстурным координатам SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2
3. Выключить свет d3dDevice.SetRenderState D3DRS_LIGHTING, 0
Теперь можешь юзать преобразования, например так:
Код: Выделить всё
Private Sub Render()
  Dim mtx As D3DMATRIX
  Static ofst As Single
 
  d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &H346666, 1, 0
  d3dDevice.BeginScene

  d3dDevice.SetStreamSource 0, vBuffer, vSize
  d3dDevice.SetVertexShader vFlag
  d3dDevice.SetTexture 0, Tex
  D3DXMatrixIdentity mtx
  mtx.m31 = ofst: ofst = ofst + 0.0001
  d3dDevice.SetTransform D3DTS_TEXTURE0, mtx
  d3dDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 1

  d3dDevice.EndScene
  d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Можешь использовать например D3DXMatrixTranslation, только нужно преобразовать потом матрицу в 3x3
UA6527P

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение Mikle » 28.07.2014 (Пн) 8:48

Кривоус Анатолий писал(а):Можешь использовать например D3DXMatrixTranslation, только нужно преобразовать потом матрицу в 3x3

Зачем? Метод, как ты написал - вполне достаточен, если нужно будет двигать вдоль другой оси - менять mtx.m32.

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение The trick » 28.07.2014 (Пн) 9:26

Mikle писал(а):Зачем? Метод, как ты написал - вполне достаточен, если нужно будет двигать вдоль другой оси - менять mtx.m32.

Например для сложных преобразований. D3DXMatrixTranslation - это пример.
UA6527P

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение Mikle » 28.07.2014 (Пн) 9:38

Кривоус Анатолий писал(а):Например для сложных преобразований.

Проблема в том, что далеко не все "сложные" преобразования отразятся из 3D в 2D, из 4*4 матрицы в 3*3. Поэтому, если таки требуются сложные преобразования, я бы лучше написал отдельный модуль для математики матриц 3*3.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как подвинуть текстуру на .Х меше?

Сообщение longwair » 28.07.2014 (Пн) 20:22

Кривоус Анатолий, спасибо буду разбираться.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как подвинуть текстуру на .Х меше?

Сообщение longwair » 29.07.2014 (Вт) 0:54

Example просто отличный, текстуры двигаются :D , Но! Сделал второй меш(типа дно реки), наложил текстуру камня, воду покрыл полупрозрачной текстурой, и они движутся вместе и дно и вода. И как бы я понимаю, что это всё из за SetTexture 0.

Решил "колдовать", d3dDevice.SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2, сделал 1.
d3dDevice.SetTexture 0, TexStage
d3dDevice.SetTransform D3DTS_TEXTURE0, mtx
, тоже сделал 1. Колдовство не сработало))), всё затекстурилось текстурой дна и не шиволится.

Начал лазить по гниге Mikla текстурил, смешивал текстуры, "кстати добился прикольного эффекта каустики под водой", но так и не смог заставить что бы вода была водой и двигалась, а дно оставалось дном, и оставалось на месте. Help
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение Mikle » 29.07.2014 (Вт) 9:47

Перед рисованием воды ставишь, как уже написал Кривоус Анатолий:
Код: Выделить всё
d3dDevice.SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2

Потом сразу восстанавливаешь:
Код: Выделить всё
d3dDevice.SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение The trick » 29.07.2014 (Вт) 10:24

Либо после отрисовки воды, делаешь так
Код: Выделить всё
mtx.m31 = 0
d3dDevice.SetTransform D3DTS_TEXTURE0, mtx
UA6527P

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение Mikle » 29.07.2014 (Вт) 12:56

Верно. Но, с точки зрения производительности, лучше так, как я написал.

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

Re: Как подвинуть текстуру на .Х меше?

Сообщение The trick » 29.07.2014 (Вт) 13:51

Mikle писал(а):Верно. Но, с точки зрения производительности, лучше так, как я написал.

Ну да. Не будет лишнего умножения текстурных координат на единичную матрицу.
UA6527P

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как подвинуть текстуру на .Х меше?

Сообщение longwair » 29.07.2014 (Вт) 16:56

Всем огромное СПАСИБО.
Вот что получилось:
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


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

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

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

    TopList