|
3D-программирование Вопросы, касающиеся программирования 3D мира |
09.06.2010, 14:24
|
#1
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
поворот меша
доброго всем дня...вопрос собственно такой...вращаю меш,он вращается вокруг своего центра,возможно ли в процессе изменять его центр?
|
(Offline)
|
|
09.06.2010, 14:27
|
#2
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: поворот меша
можно. сдвигаешь все точки так, чтобы новый центр меша был в центре координат.
|
(Offline)
|
|
09.06.2010, 14:29
|
#3
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Ответ: поворот меша
Сообщение от painter
доброго всем дня...вопрос собственно такой...вращаю меш,он вращается вокруг своего центра,возможно ли в процессе изменять его центр?
|
Есть несколько вариантов:
1) Сдвинуть меш в прямо в 3д модели (если это у тебя какая-то модель)
2) Двигать Afect Pivot(Центр меша) в максе. (Тоже, если это загружаемая модель)
3) Сдвинуть меш кодом через PositionMesh.
|
(Offline)
|
|
09.06.2010, 14:59
|
#4
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: поворот меша
еще есть вариант, если тебе надо вращать вокруг другой точки, создаёш пивот, свой меш парентишь к этому пивоту, и этот пивот вращаеш, и меш тоже будет вращаться, только вокруг этого пивота
В главном коде:
Mesh=LoadMesh("mesh.b3d"):PositionEntity Mesh,15,0,15 ; создаём меш и позиционируем его в нужную координату
Pivot=CreatePivot():PositionEntity pivot,10,0,15 ; создаём меш и позиционируем его в нужную координату
EntityParent Mesh,Pivot ; парентим меш к пивоту
В цикле:
RotateEntity Pivot,.......
или
TurnEntity Pivot,.....
|
(Offline)
|
|
09.06.2010, 15:29
|
#5
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: поворот меша
с пивотом затея хороша,но есть одно но,мне нужно двигать этот пивот,а если сделать привязку,то и меш движется вместе с пивотом...дело в том ,что я передвигаю по мешу группу объектов,пробовал поворачивать их,и они у меня разбегаются кто куда,что не есть гуд,вот мне и пришла идея поворачивать меш по которому они передвигаются
|
(Offline)
|
|
09.06.2010, 15:33
|
#6
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: поворот меша
если я правильно понял(что очень трудно ),а что если эту группу объектов привязать не к мешу, а к пивоту? и сам меш тоже к пивоту?
|
(Offline)
|
|
09.06.2010, 16:00
|
#7
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: поворот меша
дело в том,что я вычисляю Y координату меша,а потом делаю positionentity ent,0,entyti y(pln),0 и при движении объекты повторяют все неровности меша,если делать привязку к пивоту,то они просто прермещаются в месте с пивотом,от коллизии отказался,потому,что при движенииони начинают отставать друг от друга...
|
(Offline)
|
|
09.06.2010, 16:48
|
#8
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: поворот меша
верти не сцену, а камеру
__________________
|
(Offline)
|
|
09.06.2010, 17:14
|
#9
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: поворот меша
каким образом,она у меня (translateentity)и когда ей делаешь turnentity она просто игнорирует команды
|
(Offline)
|
|
09.06.2010, 18:04
|
#10
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: поворот меша
чето не могу это всё представить, может даш код?
|
(Offline)
|
|
09.06.2010, 18:22
|
#11
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: поворот меша
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
сильно не смейтесь я только начал))
|
(Offline)
|
|
10.06.2010, 10:31
|
#12
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: поворот меша
ну всё так и есть, создаёшь пивот посередине этих колёс, и колёса парентиш к пивоту, двигаешь не колёса,а пивот,а где:
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, например:
Последний раз редактировалось RlexGm, 10.06.2010 в 10:34.
Причина: забыл про EntityX,EntityY и EntityZ
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.06.2010, 18:22
|
#13
|
AnyKey`щик
Регистрация: 09.06.2010
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: поворот меша
спасибо тебе огромное,выручил
|
(Offline)
|
|
10.06.2010, 18:28
|
#14
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: поворот меша
для этого есть кнопка "полезно"
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:14.
|