forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   RotateTexture (http://forum.boolean.name/showthread.php?t=3035)

HolyDel 28.03.2007 00:44

RotateTexture
 
Вращает текстуру за угол, а я хочу чтоб она вращалась по центру.
это можно как нибудь сделать для меша с UV координатами вертекса
00
01
10
11
Э, квада?

Platon 28.03.2007 09:07

Re: RotateTexture
 
Можно так
Код:

Function RotateTexture2(Texture, Angle#)
  RotateTexture(Texture, Angle)
  Local Dx# = Cos(Angle) / 2
  Local Dy# = Sin(Angle) / 2
  PositionTexture(Texture, (Dx - 0.5) - Dy, (Dy - 0.5) + Dx)
End Function

А через текстурные координаты - вращение 4x4 матрицы ищи.

impersonalis 18.09.2011 18:00

Ответ: RotateTexture
 
блин, я несколько часов выводил эту формулу для спрайта, у которого размеры были 2 на 2 (вывел). Потом 20 минут пытался адаптировать для текстуры с вариацией координат 1 на 1 и обратным углом вращения.
Как удобно упал вчера сервер - простор для творчества никогда ещё не был так широк

ffinder 18.09.2011 18:31

Ответ: RotateTexture
 
так может сразу DROP DATABASE; и дело с концом? у всех сразу появится много времени на свои проекты;)

impersonalis 22.10.2011 20:38

Ответ: RotateTexture
 
Код:

Function RotateTexture3(Tex%,x#,y#,ang#)
        RotateTexture Tex,ang
        Local u#=x-x*Cos(ang)+y*Sin(ang)
        Local v#=y-x*Sin(ang)-y*Cos(ang)
        PositionTexture Tex,-u,-v
End Function

демо
Код:

Graphics3D 800,600,32
SetBuffer BackBuffer()

Global Cube=CreateCube()
Global Camera=CreateCamera()
PositionEntity Camera,0,0,-4

Global light=CreateLight()

Global Texture%=0
Global XRt#,YRt#

While Not KeyHit(1)
        If KeyHit(57)
                If Texture
                        FreeTexture Texture
                EndIf
                XRt=Rnd(0,1)
                YRt=Rnd(0,1)
                Texture=GenTex(XRt,YRt)
                EntityTexture Cube,Texture
        EndIf
        If Texture
                RotateTexture3(Texture,XRt,YRt,MilliSecs()*0.001*5)
        EndIf
        RenderWorld()
        Flip
Wend
End

Function RotateTexture3(Tex%,x#,y#,ang#)
        RotateTexture Tex,ang
        Local u#=x-x*Cos(ang)+y*Sin(ang)
        Local v#=y-x*Sin(ang)-y*Cos(ang)
        PositionTexture Tex,-u,-v
End Function

Function GenTex%(xp#,yp#)
        Local Tex=CreateTexture(128,128)
        Local CurBuf%=GraphicsBuffer()
        Local xpd%=xp*128
        Local ypd%=yp*128
        SetBuffer TextureBuffer(Tex)
                Color 255,255,255
                Rect 0,0,TextureWidth(Tex),TextureHeight(Tex)
                Color 0,0,0
                Line xpd,0,xpd,TextureHeight(Tex)-1
                Line 0,ypd,TextureWidth(Tex)-1,ypd
                Color 255,0,0
                Oval xpd-5,ypd-5,11,11
        SetBuffer CurBuf
        Return Tex
End Function

Управление - пробел.


Часовой пояс GMT +4, время: 13:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot