[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
перемещение
falc0nДата: Вторник, 30 Декабря 2008, 19:05 | Сообщение # 1
Продвинутый
Группа: Участники
Сообщений: 149
Награды: 0
Замечания: 0%
Статус:

Профессия: Студент
Команда: MINFOS studio(в команде я один xD )
Проектов: один(зубодробительная ММОРПГ)
вот вроде все было нормально и запарился на мелочи....
в РПГшке при клике мышкой в пикнутой точке создается пивот
и дальше делаю так

pxMoveBodyToPoint p\body,10,EntityX(piv),3,EntityZ(piv)

но проблема в самой физике... это как раз тот момент где физика мне нафиг не нужна, т.е. надо что бы к боди не форс прикладывался а происходило обычное смещение по координатам как MoveEntity

беда в том что к игроку (к капсуле) как бы ... прикладыаветься сила, импульс... от чего игрок сначала разгоняеться а потом тормозит.
вообще конечно в некотором роде это может показаться даже полезным.. вроде как "имитация действительности"
да вот ток эта зараза (игрок) никак нихочет тормазить там где нужно xD
в итоге все вроде бы выглядит нормальн... игрок идет, притормаживает все пучком... но иногда (с провокации играющего) герой тупо "пролетает" сквозь точку пика не останавливаясь или недолетая до неё....

использование дампинга и изменение масс не помогло... помогите плз справиться с этой маленкой проблемкой smile

 
tjslashДата: Суббота, 19 Сентября 2009, 05:48 | Сообщение # 2
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:

Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
Ни у кого случаем нет примера где используется PhysX для управления персонажем? Или хорошую статейку посоветуйте. ЗСПС.
 
tjslashДата: Суббота, 19 Сентября 2009, 09:49 | Сообщение # 3
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:

Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
Почти все сделал, только возникает трабла с мышкой. По оси Y - все гуд, а по оси X - не гуд, т.к. происходит поворот камеры, а не самой физмодели, т.е. перемещаеться модель не туда, куда смотрит камера... Подскажите в чем косяк...

Code

Graphics3D 800,600,32,0
SetBuffer BackBuffer()
pxCreateWorld(1,"key")
pxSetGravity(0,-9.8,0)
Global cam=CreateCamera()
PositionEntity cam,0,5,-15
RotateEntity cam,20,0,0
CameraRange cam, 0.01, 500
light=CreateLight()
plane=CreateMirror()
plane_tex = CreatePlane()
EntityColor plane_tex,30,30,255
EntityAlpha plane_tex,0.5
MoveEntity plane_tex,0,0.1,0

sphere=CreateSphere()
sphere_body=pxBodyCreateSphere(1,10)
pxBodySetPosition sphere_body,0,5,0

Dim cube(10)
Dim cube_body(10)
For i=1 To 10
  cube(i)=CreateCube()
  cube_body(i)=pxBodyCreateCube(1,1,1,10)
  pxBodySetPosition(cube_body(i),Rnd(-10,10),Rnd(20),Rnd(-10,10))
Next

W hile Not KeyHit(1)
  keydownUP=KeyDown(200)
  keydownDOWN=KeyDown(208)
  keydownLEFT=KeyDown(203)
  keydownRIGHT=KeyDown(205)
   
  force=100
  max_sp eed=10
   
  pxBodySetAngularSpeed(sphere_body, 0,Float(MouseXSpeed()), 0)
  PositionEntity cam,EntityX(sphere,1),EntityY(sphere,1),EntityZ(sphere,1),1
  RotateEntity cam,EntityPitch(cam)+Float(MouseYSpeed())/3.0,EntityYaw(sphere),0,1
  MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5  
   
  If keydownUP Then pxBodyAddForce(sphere_body,0,0,(max_speed-pxBodyGetLinearSpeedZ(sphere_body))*force,0)
  If keydownDOWN Then    pxBodyAddForce(sphere_body,0,0,-(max_speed+pxBodyGetLinearSpeedZ(sphere_body))*force,0)  
  If keydownLEFT Then pxBodyAddForce(sphere_body,-(max_speed+pxBodyGetLinearSpeedX(sphere_body))*force,0,0,0)  
  If keydownRIGHT Then pxBodyAddForce(sphere_body,(max_speed-pxBodyGetLinearSpeedX(sphere_body))*force,0,0,0)
  If (Not keydownUP) And (Not keydownDOWN) Then pxBodyAddForce(sphere_body,0,0,-pxBodyGetLinearSpeedZ(sphere_body)*force,0)
  If (Not keydownLEFT) And (Not keydownRIGHT) Then pxBodyAddForce(sphere_body,-pxBodyGetLinearSpeedX(sphere_body)*force,0,0,0)

  pxRenderPhysic(30,0)   
  pxBodySetEntity(sphere,sphere_body)  
  For i=1 To 10
   pxBodySetEntity(cube(i),cube_body(i))
  Next

  UpdateWorld
  RenderWorld

  Flip
Wend
End
 
tjslashДата: Суббота, 19 Сентября 2009, 10:57 | Сообщение # 4
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:

Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
Всем спасибо, вот нашел и немного переделал, пользуйтесь:

Управление персонажем с помощью PhysX'а:

Code

Global FL_Pitch#,FL_Yaw#,FL_Roll#,FL_XSpeed#,FL_YSpeed#,FL_ZSpeed#
Global Player_Start_X#=-5, Player_Start_Y#=5, Player_Start_Z#=-5
Global camera = CreateCamera()
CameraRange camera,0.1,10000
PositionEntity camera,Player_Start_X#, Player_Start_Y#, Player_Start_Z#

Function playerwalk2(FL_Cam, player_body)
     speed#=1.1
  FL_Pitch#=FL_Pitch#-(-MouseYSpeed()*0.02) : FL_Pitch#=FL_Pitch#/1.2
     FL_Yaw#=FL_Yaw#+-(MouseXSpeed()*0.02) : FL_Yaw#=FL_Yaw#/1.2
     MoveMouse (GraphicsWidth()/2,GraphicsHeight()/2)
     FL_ZSpeed#=FL_ZSpeed#+Float(KeyDown(17)-KeyDown(31))*0.92 : FL_ZSpeed#=FL_ZSpeed#/speed#;  w and s
  FL_XSpeed#=FL_XSpeed#+Float(KeyDown(32)-KeyDown(30))*0.92 : FL_XSpeed#=FL_XSpeed#/speed# ; a and d
     FL_YSpeed#=0  
  FL_Roll#=(FL_Yaw#*1.1)-(FL_XSpeed#*2.3)
  FL_Old_Pitch#=EntityPitch#(FL_Cam)
  FL_Old_Roll#=EntityRoll#(FL_Cam)
  RotateEntity FL_Cam, 0,EntityYaw#(FL_Cam),0
   MoveEntity FL_Cam,FL_XSpeed#,0,FL_ZSpeed#
  RotateEntity FL_Cam, FL_Old_Pitch#,EntityYaw#(FL_Cam),FL_Old_Roll#
   Local cp#=EntityPitch(FL_Cam,True)+FL_Pitch#
   If cp<-89 Then cp=-89
   If cp>89 Then cp=89
     RotateEntity FL_Cam,cp,EntityYaw(FL_Cam)+FL_Yaw#,0

     pxBodySetRotation(player_body,0,EntityYaw#(FL_Cam),0)
  pxBodySetLocalLinearSpeed(player_body,FL_XSpeed#*pxBodyGetMass(player_body),pxBodyGe tLinearSpeedY(player_body),FL_ZSpeed#*pxBodyGetMass(player_body))
  PositionEntity FL_cam, pxBodyGetPositionX(player_body),pxBodyGetPositionY(player_body)+1,pxBodyGetPositionZ(player_body)
End Function
 
tjslashДата: Суббота, 19 Сентября 2009, 11:55 | Сообщение # 5
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:

Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
Эмм... Вот приаттачу еще тени Ahadow и выложу.
Кстати, по поводу связки Blitz3C+PhysX+Ahadow, ни у кого не было траблы, что анимированная модель парентится к камере??? О_о

Для начала я делал как:
1) Создал карту, пару объектов, включая аниммеш, и добавил тени Ahadow - Все ОК!
2) Та же карта, + Ahadow + Newton - Все Ок!
3) Та же карта, - Newton, - Ahadow, +PhysX - Все Ок!
4) Та же карта, +PhysX, +Ahadow - и вот тут выскакивает трабла....

Подскажите, в чем тут может быть конфликт...

Code

Include "include\Ashadow.bb"
Include "include\consts.bb"

AGraphics3D 800,600, 32, 1
PostProcessInit()
SetBuffer BackBuffer()
Global n#,k=0,w=1.1 ,free,in_mesh,enable=1
Global FL_Pitch#,FL_Yaw#,FL_Roll#,FL_XSpeed#,FL_YSpeed#,FL_ZSpeed#
Global Player_Start_X#=-5, Player_Start_Y#=5, Player_Start_Z#=-5
VWait
pxCreateWorld(1, "key")
pxSetGravity(0, -10, 0)
Global camera = CreateCamera()
PositionEntity camera, 100,40,100
CameraRange camera,1,1000
PositionEntity camera,Player_Start_X#, Player_Start_Y#, Player_Start_Z#
Sky = LoadSkyBox ( "rock" )
EntityColor Sky,200,200,200
ScaleEntity Sky, 5, 5, 5
CreateReceiver sky,4
EntityOrder sky,1
light=CreateSLight(2,300,255,255,255)
Center=CreatePivot()
PositionEntity light,50,80,0

ReflectTex = CreateTexture(128,128,  128+256)
tex2=LoadTexture("wood_panel_00.jpg")
SphereR=ACreateSphere(10,0,0)

CreateRefractMesh(SphereR,3, 0) ; set refractive mesh
If BUMPENVMAP_SUPPORT  SetRefractBumpTexture SphereR, TEX_02b

PositionEntity SphereR,20,10,3
ScaleEntity SphereR,5,5,5
EntityBlend SphereR,3
EntityAlpha SphereR,.5
EntityTexture SphereR, ReflectTex

Cylinder=ACreateCylinder(6,1,0,2,500) ; create caster
PositionEntity Cylinder,30,10,20
ScaleEntity Cylinder,5,15,5
RotateEntity Cylinder,91,0,0
UpdateCasterGeom(Cylinder)
EntityTexture Cylinder,tex2

levelmesh = ALoadMesh("level_0_2.b3d")
ScaleMesh levelmesh,20,5,20
PositionEntity levelmesh, 0, 0, 0
celltex = LoadTexture("level_0_0.bmp")
ScaleTexture celltex,.005,.005
EntityTexture levelmesh,celltex

cube3=ACreateCube(0,2,200) ;create caster
PositionEntity cube3,60,10,60
ScaleEntity cube3,1,10,1
EntityTexture cube3,tex2

cube4=ACreateCube(0,2,200);create caster
PositionEntity cube4,-60,10,60
ScaleEntity cube4,1,10,1
EntityTexture cube4,tex2

cube5=ACreateCube(0,2,500);create caster
PositionEntity cube5,60,10,-60
ScaleEntity cube5,1,10,1
EntityTexture cube5,tex2

cube6=ACreateCube(0,2,200);create caster
PositionEntity cube6,-60,10,-60
ScaleEntity cube6,1,10,1
EntityTexture cube6,tex2

Model= ALoadAnimMesh("mak_running.3DS",0,2)  
PositionEntity Model,-5,2,-5
ScaleEntity Model, 0.05, 0.05, 0.05
RotateEntity Model, 0, 180, 0
Model2 = ACopyEntity(Model,0,2) ; copy caster
PositionEntity Model2,8,2,10
Animate Model2,1,1

House=ALoadMesh("house_0_2.b3d",0)
ScaleMesh House,1,1,1
PositionEntity House,0,0,0
in_mesh=BodyCreateMesh%(House)
pxBodySetPosition(in_mesh,0,5,0)
surf = GetSurface(House,1)
nft = CountTriangles(surf)
nvv = CountVertices(surf)
   
Global Mesh= CreateSphere(32)
Global Body = pxBodyCreateCapsule(3,2,1)  
ScaleEntity Mesh,0.5,0.5,0.5   
pxBodySetPosition Body ,Player_Start_X#, Player_Start_Y#, Player_Start_Z#
pxBodySetEntity(Mesh,Body)
EntityAlpha Mesh, 0

Global TEST=CreateCube()
PositionEntity TEST, 50,8,75
ScaleEntity TEST, 2,2,2
Cls
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5  
;==============================================================
While Not KeyHit(1)
playerwalk2(camera, Body )
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5  
pxBodySetEntity(Mesh,Body)

PositionEntity Sky,EntityX( camera,1 ) ,EntityY( camera,1 ), EntityZ( camera,1 )
TurnEntity light,0,.5,0
MoveEntity light,.0,.0,.5

pxRenderPhysic(30,0)
UpdateWorld()  
RenderWorld
ARenderWorld(camera) ; update and render shadow

UpdateRefract(camera) ; update refract
PostProcess_Render (camera) ; render refracr

Flip
Wend
Cls
End
Function LoadSkyBox( file$ )
  m=CreateMesh()
  ;front face
  b=LoadBrush( file$+"_FR.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$+"_LF.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$+"_BK.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$+"_RT.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$+"_UP.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
  ;bottom face  
  b=LoadBrush( file$+"_DN.jpg",49 )
  s=CreateSurface( m,b )
  AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
  AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
  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

Function BodyCreateMesh(mesh%)

  nsurf = CountSurfaces(mesh)
  nvert = 0
  nface=0
  For ns = 1 To nsurf
   Local surf = GetSurface(mesh,ns)
   nface = nface+CountTriangles(surf)
   nvert = nvert +CountVertices(surf)
  Next

  fbank = CreateBank(nface*4*3)
  nf = 0
  vbank = CreateBank(nvert*4*3)
  nv = 0
  For ns = 1 To nsurf
   surf = GetSurface(mesh,ns)
   nfv = CountTriangles(surf)
   For nfc = 0 To nfv -1
    PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0)
    PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1)
    PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2)
    nf=nf+1
   Next

   nvv = CountVertices(surf)
   For nvc = 0 To nvv - 1
    PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
    PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
    PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
    nv = nv+1
   Next
  Next
  bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,0)
  FreeBank vbank
  FreeBank fbank
  Return bbb%
End Function

Function playerwalk2(FL_Cam, player_body)
     speed#=1.1
  FL_Pitch#=FL_Pitch#-(-MouseYSpeed()*0.02) : FL_Pitch#=FL_Pitch#/1.2
     FL_Yaw#=FL_Yaw#+-(MouseXSpeed()*0.02) : FL_Yaw#=FL_Yaw#/1.2
     MoveMouse (GraphicsWidth()/2,GraphicsHeight()/2)
     FL_ZSpeed#=FL_ZSpeed#+Float(KeyDown(17)-KeyDown(31))*0.92 : FL_ZSpeed#=FL_ZSpeed#/speed#;  w and s
  FL_XSpeed#=FL_XSpeed#+Float(KeyDown(32)-KeyDown(30))*0.92 : FL_XSpeed#=FL_XSpeed#/speed# ; a and d
     FL_YSpeed#=0  
  FL_Roll#=(FL_Yaw#*1.1)-(FL_XSpeed#*2.3)
  FL_Old_Pitch#=EntityPitch#(FL_Cam)
  FL_Old_Roll#=EntityRoll#(FL_Cam)
  RotateEntity FL_Cam, 0,EntityYaw#(FL_Cam),0
   MoveEntity FL_Cam,FL_XSpeed#,0,FL_ZSpeed#
  RotateEntity FL_Cam, FL_Old_Pitch#,EntityYaw#(FL_Cam),FL_Old_Roll#
   Local cp#=EntityPitch(FL_Cam,True)+FL_Pitch#
   If cp<-89 Then cp=-89
   If cp>89 Then cp=89
     RotateEntity FL_Cam,cp,EntityYaw(FL_Cam)+FL_Yaw#,0

     If KeyDown(57)=1
   pxBodyAddForce(player_body,0,25,0,0)
     EndIf;if in air
     If KeyDown(57)=0
   pxBodySetAngularDamping(player_body, 1)
   pxBodySetLinearDamping(player_body, 0)
     EndIf

     pxBodySetRotation(player_body,0,EntityYaw#(FL_Cam),0)
     pxBodySetLocalLinearSpeed(player_body,FL_XSpeed#*pxBodyGetMass(player_body),pxBodyGetLinearSpeedY(player_body),FL_ZSpeed#*pxBodyGetMass(play er_body))
     PositionEntity FL_cam, pxBodyGetPositionX(player_body),pxBodyGetPositionY(player_body)+1,pxBodyGetPositionZ(player_body)
End Function

 
tjslashДата: Суббота, 19 Сентября 2009, 12:04 | Сообщение # 6
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:

Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
Эм... Даже немного не так, а еще интересней... Парентится последняя загруженная модель! Причем ентити альфа на нее не действует)) Да и вообще, хз как избавиться от не...
 
  • Страница 1 из 1
  • 1
Поиск: