forum.boolean.name

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

painter 09.06.2010 14:24

поворот меша
 
доброго всем дня...вопрос собственно такой...вращаю меш,он вращается вокруг своего центра,возможно ли в процессе изменять его центр?:)

ffinder 09.06.2010 14:27

Ответ: поворот меша
 
можно. сдвигаешь все точки так, чтобы новый центр меша был в центре координат.

EvilChaotic 09.06.2010 14:29

Ответ: поворот меша
 
Цитата:

Сообщение от painter (Сообщение 149724)
доброго всем дня...вопрос собственно такой...вращаю меш,он вращается вокруг своего центра,возможно ли в процессе изменять его центр?:)

Есть несколько вариантов:

1) Сдвинуть меш в прямо в 3д модели (если это у тебя какая-то модель)
2) Двигать Afect Pivot(Центр меша) в максе. (Тоже, если это загружаемая модель)
3) Сдвинуть меш кодом через PositionMesh.

RlexGm 09.06.2010 14:59

Ответ: поворот меша
 
еще есть вариант, если тебе надо вращать вокруг другой точки, создаёш пивот, свой меш парентишь к этому пивоту, и этот пивот вращаеш, и меш тоже будет вращаться, только вокруг этого пивота
Код:

В главном коде:
Mesh=LoadMesh("mesh.b3d"):PositionEntity Mesh,15,0,15 ; создаём меш и позиционируем его в нужную координату
Pivot=CreatePivot():PositionEntity pivot,10,0,15 ; создаём меш и позиционируем его в нужную координату
EntityParent Mesh,Pivot ; парентим меш к пивоту
В цикле:
RotateEntity Pivot,.......
или
TurnEntity Pivot,.....


painter 09.06.2010 15:29

Ответ: поворот меша
 
с пивотом затея хороша,но есть одно но,мне нужно двигать этот пивот,а если сделать привязку,то и меш движется вместе с пивотом...дело в том ,что я передвигаю по мешу группу объектов,пробовал поворачивать их,и они у меня разбегаются кто куда,что не есть гуд,вот мне и пришла идея поворачивать меш по которому они передвигаются:(

RlexGm 09.06.2010 15:33

Ответ: поворот меша
 
если я правильно понял(что очень трудно:) ),а что если эту группу объектов привязать не к мешу, а к пивоту? и сам меш тоже к пивоту?

painter 09.06.2010 16:00

Ответ: поворот меша
 
дело в том,что я вычисляю Y координату меша,а потом делаю positionentity ent,0,entyti y(pln),0 и при движении объекты повторяют все неровности меша,если делать привязку к пивоту,то они просто прермещаются в месте с пивотом,от коллизии отказался,потому,что при движенииони начинают отставать друг от друга...

tormoz 09.06.2010 16:48

Ответ: поворот меша
 
верти не сцену, а камеру

painter 09.06.2010 17:14

Ответ: поворот меша
 
каким образом,она у меня (translateentity)и когда ей делаешь turnentity она просто игнорирует команды

RlexGm 09.06.2010 18:04

Ответ: поворот меша
 
чето не могу это всё представить, может даш код?

painter 09.06.2010 18:22

Ответ: поворот меша
 
Код:

Global speed#=0
Global angle#=0

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,5,-10
CameraRange cam,.1,300000000

lit=CreateLight()
TurnEntity lit,0,270,0


pln=LoadMesh("materials\ter.b3d")


tex=LoadTexture("materials\ppp.jpg")

EntityTexture pln,tex

Sky=LoadSkyBox ( "materials\sky\" )
ScaleEntity Sky, 10, 10, 10
EntityOrder sky,1

pivFR=CreatePivot()
PositionEntity pivFR,4.5,1.6,8

pivFL=CreatePivot()
PositionEntity pivFL,-4.5,1.6,8

pivRR=CreatePivot()
PositionEntity pivRR,4.5,1.6,-5.5

pivRL=CreatePivot()
PositionEntity pivRL,-4.5,1.6,-5.5

wheel_mesh = LoadMesh("materials\tara\disk2.3ds")
ScaleEntity wheel_mesh ,.005,.005,.005
RotateMesh wheel_mesh,0,90,0
wheel_meshd = LoadMesh("materials\tara\disk.3ds")
ScaleEntity wheel_meshd ,.005,.005,.005
RotateMesh wheel_meshd,0,90,0

wheel_mesh2 = LoadMesh("materials\tara\disk2.3ds")
ScaleEntity wheel_mesh2 ,.005,.005,.005
RotateMesh wheel_mesh2,0,-90,0
wheel_meshd2 = LoadMesh("materials\tara\disk.3ds")
ScaleEntity wheel_meshd2 ,.005,.005,.005
RotateMesh wheel_meshd2,0,-90,0

wFR=CopyEntity (wheel_mesh)
EntityParent wFR,pivFR
wFRd=CopyEntity (wheel_meshd)
EntityParent wFRd,wFR
PositionEntity wFR,x#,y#,z#

wFL=CopyEntity (wheel_mesh2)
EntityParent wFL,pivFL
wFLd=CopyEntity (wheel_meshd2)
EntityParent wFLd,wFL
PositionEntity wFL,x2#,y2#,z2#

wRR=CopyEntity (wheel_mesh)
EntityParent wRR,pivRR
wRRd=CopyEntity (wheel_meshd)
EntityParent wRRd,wRR
PositionEntity wRR,x3#,y3#,z3#

wRL=CopyEntity (wheel_mesh2)
EntityParent wRL,pivRL
wRLd=CopyEntity (wheel_meshd2)
EntityParent wRLd,wRL
PositionEntity wRL,x4#,y4#,z4#

FreeEntity wheel_mesh
FreeEntity wheel_meshd
FreeEntity wheel_mesh2
FreeEntity wheel_meshd2

Repeat

If KeyDown(205)Then
angle#=angle#-3
If angle#<-30 angle#=-30
Else
angle#=angle#*.9
EndIf

If KeyDown(203)Then
angle#=angle#+3
If angle#>30 angle#=30
Else
angle#=angle#*.9
EndIf

RotateEntity  wFR,0,angle#,0
RotateEntity wFL,0,angle#,0







If KeyDown(200)=True Then
speed=speed+.01
If speed>1 speed=1
Else If KeyDown(208)=True Then
speed=speed-.02
If speed<-.5 speed=-.5
Else
speed=speed*0.99
EndIf




MoveEntity pivFR,0,0,speed#
MoveEntity pivFL,0,0,speed#
MoveEntity pivRR,0,0,speed#
MoveEntity pivRL,0,0,speed#




RotateMesh  wFR,speed*25,0,0
RotateMesh  wFRd,speed*25,0,0
RotateMesh  wFL,speed*25,0,0
RotateMesh  wFLd,speed*25,0,0

x#=EntityX(pivFR)
y#=EntityY(pivFR)
z#=EntityZ(pivFR)

x2#=EntityX(pivFL)
y2#=EntityY(pivFL)
z2#=EntityZ(pivFL)

x3#=EntityX(pivRR)
y3#=EntityY(pivRR)
z3#=EntityZ(pivRR)

x4#=EntityX(pivRL)
y4#=EntityY(pivRL)
z4#=EntityZ(pivRL)

ter_y#=EntityY(pln)
ter_y2#=EntityY(pln)
ter_y3#=EntityY(pln)
ter_y4#=EntityY(pln)

PositionEntity pivFR,x#,ter_y#,z#
PositionEntity pivFL,x2#,ter_y2#,z2#
PositionEntity pivRR,x3#,ter_y3#,z3#
PositionEntity pivRL,x4#,ter_y4#,z4#



PointEntity cam,wFR
MoveEntity cam,0,0,(EntityDistance(wFR,cam)-50)*0.4
TranslateEntity cam,-1,(phBodyGetY(wFR) - EntityY(cam,1)+EntityY(wFR)+20)*.1,-.05,1




UpdateWorld
RenderWorld


PositionEntity Sky,EntityX( cam,1 ) ,EntityY( cam,1 ), EntityZ( cam,1 )

PostProcess_Render cam




Flip
Until KeyHit(1)



End





Function LoadSkyBox( file$ )

        m=CreateMesh()
        ;front face
        b=LoadBrush( file$+"sky-111.jpg",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
        AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3:
        FreeBrush b
        ;right face
        b=LoadBrush( file$+"sky-222.jpg",49 )
        s=CreateSurface( m,b )
        AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
        AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;back face
        b=LoadBrush( file$+"sky-333.jpg",49 )
        s=CreateSurface( m,b )
        AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
        AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;left face
        b=LoadBrush( file$+"sky-444.jpg",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
        AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;top face
        b=LoadBrush( file$+"sky-555.jpg",49 )
        s=CreateSurface( m,b )
        AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
        AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b

        ScaleMesh m,100,100,100
        FlipMesh m
        EntityFX m,1
        Return m
       
End Function


сильно не смейтесь я только начал))

RlexGm 10.06.2010 10:31

Ответ: поворот меша
 
ну всё так и есть, создаёшь пивот посередине этих колёс, и колёса парентиш к пивоту, двигаешь не колёса,а пивот,а где:
Код:

PositionEntity pivFR,x#,ter_y#,z#
PositionEntity pivFL,x2#,ter_y2#,z2#
PositionEntity pivRR,x3#,ter_y3#,z3#
PositionEntity pivRL,x4#,ter_y4#,z4#

ставишь
PositionEntity pivFR,x#,ter_y#,z#,true
PositionEntity pivFL,x2#,ter_y2#,z2#,true
PositionEntity pivRR,x3#,ter_y3#,z3#,true
PositionEntity pivRL,x4#,ter_y4#,z4#,true

последний параметр true обозначает что позиционировать объект надо в глобальных координатах.
------------
ах да забыл добавить, при получении координат EntityX,EntityY и EntityX ставь в конце тоже true, например:
Код:

x#=EntityX(pivFR,true)

painter 10.06.2010 18:22

Ответ: поворот меша
 
спасибо тебе огромное,выручил;)

RlexGm 10.06.2010 18:28

Ответ: поворот меша
 
для этого есть кнопка "полезно" :)


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

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