Вращение вершин...

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

Модератор: Mikle

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Вращение вершин...

Сообщение Gemini » 21.11.2008 (Пт) 23:52

Люди добрые помогите!

Сейчас изучаю Directx8
У меня на экран выводиться Текстура растянутая на четыре точки ( vert(0 to 3) ) и мне надо их вращять вокруг центра :

Изображение

(И мне ещё надо сделать AlphaBlend Может кто знает как?)
Как это сделать? Если можете подскажите кодом.

Заранее ООООчень благодарен!!!
У вас нет доступа для просмотра вложений в этом сообщении.
В нашем деле главное ЛОГИКА.

косил косой косой косой.

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

Re: Вращение вершин...

Сообщение Vovik » 22.11.2008 (Сб) 12:29

Собсна школьная математика:
Код: Выделить всё
 
   Dim CV As D3DVECTOR
   
    ' координаты красной точки
    CV.X = V(0).X + (V(1).X - V(0).X) / 2
    CV.Y = V(1).Y + (V(2).Y - V(1).Y) / 2

    For i = 0 To 3
      V(i).X = (V(i).Y - CV.Y) * Sin(angle) + (V(i).X - CV.X) * Cos(angle)
      V(i).Y = (V(i).Y - CV.Y) * Cos(angle) - (V(i).X - CV.X) * Sin(angle)
     
      V(i).X = V(i).X + CV.X
      V(i).Y = V(i).Y + CV.Y
    Next i

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 22.11.2008 (Сб) 13:12

Ага спасибо! (Но я уже сам до этого дошел.... Думал есть специальные функции)


А по поводу Бленда я делаю так : Call d3dDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, 1)
Но не могу установит уровень прозрачности... (допустим от 0 до 100%)

(Пол нета перерыл уже!)
В нашем деле главное ЛОГИКА.

косил косой косой косой.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Вращение вершин...

Сообщение djalex777 » 22.11.2008 (Сб) 14:16

(Пол нета перерыл уже!)

Это врят ли :)

Используй TFACTOR, либо материал, либо DIFFUSE вершины

А по-поводу вращения - функции есть. Матрицы либо кватернионы.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 22.11.2008 (Сб) 14:43

djalex777 писал(а):Используй TFACTOR, либо материал, либо DIFFUSE вершины


Хорошо! А это как???? (Мне бы кодиком)

Заранее благодарен!!!!!
В нашем деле главное ЛОГИКА.

косил косой косой косой.

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

Re: Вращение вершин...

Сообщение Mikle » 22.11.2008 (Сб) 16:18

Про альфаблендинг довольно подробно написано здесь:
viewtopic.php?f=6&t=34270
Вращать можно и матрицей, но только если вертексы не в RHW формате.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 23.11.2008 (Вс) 17:15

Mikle писал(а):Про альфаблендинг довольно подробно написано здесь:
viewtopic.php?f=6&t=34270
Вращать можно и матрицей, но только если вертексы не в RHW формате.


Нашел там хорошую книгу!

Но с альфой нормально не получилось.... Дело в том что я загружаю png (а прозрачностью)... А когда применяю альфабленд получаеться что всё что должно быть прозрачным у картинки закрашиваеться в чёрный цвет! И альфа рассеиваеться от точек (четырёх) к центру....

Возможно есть что-то .... (Люди добрые помогите!)
В нашем деле главное ЛОГИКА.

косил косой косой косой.

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

Re: Вращение вершин...

Сообщение Mikle » 23.11.2008 (Вс) 17:21

Попробуй в пример из книги, где изучается прозрачность, вместо TGA подставить свою PNG текстуру.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 23.11.2008 (Вс) 22:33

Mikle писал(а):Попробуй в пример из книги, где изучается прозрачность, вместо TGA подставить свою PNG текстуру.


Заменил... Всё работает ок...

У меня возникла Большая проблемма:

Делаю трилинарную фильтрацию:
Код: Выделить всё
d3dDevice.SetTextureStageState Stage, D3DTSS_MIPFILTER, D3DTEXF_LINEAR
      d3dDevice.SetTextureStageState Stage, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
      d3dDevice.SetTextureStageState Stage, D3DTSS_MINFILTER, D3DTEXF_LINEAR


Потом отрисовываю вот такую текстуру:Изображение

И при отрисовке пролучается слева и с верху полоска! Я уже не знаю как бороться...
Но я проверял опытным путём что это происходит именно из-за фильтрации. Причём при передвижении тектуры полоска иногда исчезает а потом заново появляется.

Как от этого можно избавиться не отключая фильтрацию?
У вас нет доступа для просмотра вложений в этом сообщении.
В нашем деле главное ЛОГИКА.

косил косой косой косой.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 24.11.2008 (Пн) 17:43

С проблеммой появляющейся полосы разобрался пришлось в некоторых точках сместить tu и tv на -0.01 и на +0.01.

'''''''''''''''''''''''''''''''''Уже не считаеться!!!! ВСЁ сделал!'''''''''''''''''''''''''''''''''''
А вот с AlphaBland'ом я так и не разобрался....
Может есть у кого-нибудь пример Как сделать альфабленд :
Повторюсь:
Имеется текстура (png файл он сам по себе имеет альфу + мне надо сделать общую прозрачность для данной тектуры) которая растягивается на четыре точки:
Брал пример из книги ... Не помог (Изображение становилось просто чёрным)
Пытался изменить (например) Color=&HFF0000FF в вертексе (Как в примере книги) 'не помогло
Пробовал делать через материал... Тоже не помогло!
(У же 5 дней из нета не вылажу, никак найти не могу то что мне поможет....)

Люди пожалуйста помогите с траблом...

Заранее благодарен!

'''''''''''''''''''''''''''-------------------------------------------------------

Код: Выделить всё

        Call d3dDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, True)
        Call d3dDevice.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
        Call d3dDevice.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)
        Call d3dDevice.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE)
''''''''''''''''''''''''''''''''
а в установках вертекса я сделал так (например)
ver(0).Color = D3DColorARGB(200, 255, 255, 255)
В нашем деле главное ЛОГИКА.

косил косой косой косой.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Вращение вершин...

Сообщение lellel » 24.11.2008 (Пн) 23:02

Код: Выделить всё
d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 1
  d3dDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  d3dDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
  d3dDevice.SetRenderState D3DRS_BLENDOP, D3DBLENDOP_ADD
  d3dDevice.SetRenderState D3DRS_ZWRITEENABLE, 0
 
  d3dDevice.SetRenderState D3DRS_TEXTUREFACTOR, &H80FFFFFF  '80 это как раз общая прозрачность, если нужна только прозрачность текстуры вместо 80 написать FF
 
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE
 
  d3dDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_MODULATE
  d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
  d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG2, D3DTA_TFACTOR
 
'твой рендер

  d3dDevice.SetRenderState D3DRS_ZWRITEENABLE, 1
  d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 0


только при таком рендере цвет и альфа вертексов не учитывается..
если нужна альфа из вертексов (как в примере) то так:

Код: Выделить всё
d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 1
  d3dDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  d3dDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
  d3dDevice.SetRenderState D3DRS_BLENDOP, D3DBLENDOP_ADD
  d3dDevice.SetRenderState D3DRS_ZWRITEENABLE, 0
   
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1
  d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE
 
  d3dDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  d3dDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE
 
'твой рендер

  d3dDevice.SetRenderState D3DRS_ZWRITEENABLE, 1
  d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 0


что-то вроде того..

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

Re: Вращение вершин...

Сообщение Mikle » 25.11.2008 (Вт) 11:29

Чтобы на спрайтах не появлялась полоска из-за фильтрации, меняют AddressU и AddressV на Mirror.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 26.11.2008 (Ср) 16:04

Mikle писал(а):Чтобы на спрайтах не появлялась полоска из-за фильтрации, меняют AddressU и AddressV на Mirror.


Mikle, расскажи по подробней плз.
В нашем деле главное ЛОГИКА.

косил косой косой косой.

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

Re: Вращение вершин...

Сообщение Mikle » 26.11.2008 (Ср) 16:46

Сначала, перед выводом спрайтов:
Код: Выделить всё
d3dDevice.SetTextureStageState 0, D3DTSS_ADDRESSU, D3DTADDRESS_MIRROR
d3dDevice.SetTextureStageState 0, D3DTSS_ADDRESSV, D3DTADDRESS_MIRROR

а после, если рисуется что-то другое, кроме спрайтов, восстановить:
Код: Выделить всё
d3dDevice.SetTextureStageState 0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP
d3dDevice.SetTextureStageState 0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Вращение вершин...

Сообщение Gemini » 26.11.2008 (Ср) 21:37

Всем Большое спасибо!
В нашем деле главное ЛОГИКА.

косил косой косой косой.


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

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

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

    TopList