ПрограммированиеФорумОбщее

Вопросы по VB6 (20 стр)

Страницы: 119 20 21 2225 Следующая »
#285
14:16, 27 апр 2011

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

#286
14:47, 27 апр 2011

Mikle
> вот CameraSpacePosition
Погоди ка.... Я пока не использую CameraSpacePosition...
Я убрал все смешивание, поставил одну текстуру и хочу тупо вырезать из нее кусок, допустим rect(128,128,256,256).

Делаю так:

tex.SetTexture 0   'текстура

g_dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1  'стейты
g_dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
g_dev.SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2

D3DXMatrixScaling s_mtrx, s_size.x / size.x, s_size.y / size.y, 1   'размер куска для вырезания
D3DXMatrixTranslation s_mtrx1, 128, 128, 0                                 'сдвиг
D3DXMatrixMultiply s_mtrx, s_mtrx, s_mtrx1                                
g_dev.SetTransform D3DTS_TEXTURE0, s_mtrx         

'рендер....
#287
16:08, 27 апр 2011

max255
Все D3DXMatrix в D3DX - это матрицы 4*4
MatrixTranslation(x,y) размером 3*3 выглядит так:

1 0 0
0 1 0
x y 1

Но SetTransForm понимает только матрицы 4*4, поэтому нужно "впихнуть" туда матрицу 3*3 так:

1 0 0 0
0 1 0 0
x y 1 0
0 0 0 0
#288
16:21, 27 апр 2011

Mikle
> выглядит так:
значит нужно передавать вот так?

   Mtrx.m11 = 1
   Mtrx.m12 = 0
   Mtrx.m13 = 0
   Mtrx.m14 = 0
   
   Mtrx.m21 = 0
   Mtrx.m22 = 1
   Mtrx.m23 = 0
   Mtrx.m24 = 0
   
   Mtrx.m31 = x
   Mtrx.m32 = y
   Mtrx.m33 = 1
   Mtrx.m34 = 0
   
   Mtrx.m41 = 0
   Mtrx.m42 = 0
   Mtrx.m43 = 0
   Mtrx.m44 = 0

Пробовал получил то же самое...
Все скалируется, но не двигается.

#289
16:38, 27 апр 2011

А у меня работает:
Texture Scroll
Что я делаю не так? :)

#290
17:50, 27 апр 2011

Mikle
> Что я делаю не так? :)
Ничего! :) Это я тупанул дико.... В процессе метода "тыка " повключал лишние стейты и считал сдвиг в реальных координатах...
Все лишнее стер координаты пересчитал... Все заработало!!!!

Только текстурка стенки во время бампа не получает нужные координаты...

tex.SetTexture 2           'текстуры
light.SetTexture 1         'для
bump.SetTexture 0       'бампа

   g_dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
   g_dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE

   g_dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3
   g_dev.SetTextureStageState 1, D3DTSS_COLORARG1, D3DTA_TEXTURE
   g_dev.SetTextureStageState 1, D3DTSS_COLORARG2, D3DTA_CURRENT
   g_dev.SetTextureStageState 1, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION
   g_dev.SetTextureStageState 1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2
   g_dev.SetTextureStageState 1, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP
   g_dev.SetTextureStageState 1, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP
   
  g_dev.SetTransform D3DTS_TEXTURE1, Mtrx                                                                               'трансформируем пятно
  
   g_dev.SetTextureStageState 2, D3DTSS_COLOROP, D3DTOP_MODULATE2X
   g_dev.SetTextureStageState 2, D3DTSS_COLORARG1, D3DTA_TEXTURE
   g_dev.SetTextureStageState 2, D3DTSS_COLORARG2, D3DTA_CURRENT
   g_dev.SetTextureStageState 2, D3DTSS_TEXCOORDINDEX, 0                                                    'РОДНЫЕ КООРДИНАТЫ!!! (нужно трансформированные по ректу)

spr.DrawRect GetRect(128, 128, 256, 256), mpos, vec2MulC(tex.GetSize, 1), vec2(0, 0), 0          'отрисовка (а тут я считаю сдвиг по ректу и двигаю слой 0)

Можно как то выйти из этой ситуации?

#291
18:07, 27 апр 2011

max255
Поставь на вторую стадию TEXTURETRANSFORMFLAGS = 2 и соответствующую матрицу в трансформацию Texture2.
И у матриц 3*3, кстати, можно не заполнять нулями четвёртые строку и столбец - всё равно они игнорируются.

#292
18:18, 27 апр 2011

Mikle
Ну я тоже так думал... Но матрица та находиться в классе спрайта (считается там), так что не вскрывая класс мне ее не получить...
Вот я думаю может оформить функцию отрисовки так:

Function DrawRect(RECT As RECT, position As D3DVECTOR2, size As D3DVECTOR2, center As D3DVECTOR2, rotation As Single,tex_flags as tf)
'где tf тип флагов текстур которые надо резать (tex1, tex2,...,tex7) - задавать их через or

А в классе выставлять матрицы тем текстурам которые были указаны...
Что думаеш по этому поводу?

>Мне кажется это извращенством...
>Если проблему по другому решить невозможно, может лучше перейти к lock/unlock + matrix?

Mikle
>И у матриц 3*3, кстати, можно не заполнять нулями четвёртые строку и столбец - всё равно они игнорируются.
Приму на вооружение! :)

#293
19:10, 27 апр 2011

Провел тесты результаты удивили :)))

1)Только трансформация мира и текстур (матрицы) - 700 fps
2)Трансформация мира + lock/unlock - 697 fps
3)Трансформация мира + DrawPrimitiveUp - 720 fps

Значит буду делать по третьему способу...  :)

#294
11:35, 28 апр 2011

А есть готовые directx движки для VB6? Сам искал не нашёл.

#295
11:37, 28 апр 2011

СырМан
Был такой iRender, но сырой очень, и давно автором заброшен.

#296
14:31, 28 апр 2011

Есть еще один но он, зараза, платный... TrueVision3d
И еще минус что в бесплатной версии постоянно висит баннер на экране... Это жутко раздражает...

#297
14:33, 28 апр 2011

Кстати Mikle, а можно где то найти сорсы irender-а ? Очень пригодились бы...

#298
14:35, 28 апр 2011

max255
Автор iRender - ник "Орбит" или "d3drm", на VBStreets, вроде бы, выкладывал исходники, поискать нужно.

#299
14:56, 28 апр 2011

Майкл, ты мне говорил, что не следует использовать тип integer.
А тип byte можно?

Страницы: 119 20 21 2225 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.