Anyeasy way to to align a ship

Blitz3D Forums/Blitz3D Beginners Area/Anyeasy way to to align a ship

Duckstab[o](Posted 2004) [#1]
The game im designing is a space racing game in a halfpipe track fully3d includes loops stepdrops and bends
to mapeditor is sorted now problems

The map entity is called Track and contains 360 segments
so collision and texturing becomes more flexible

The Ship entity is called player1 and has a staring position of PositionEntity player1,0,-9,20,1
and is rotated TurnEntity ball,0,90,0 to face the track

accelerate will always propel player1 in a possitive z axis
using movenetity

because of the largesize of the tris and curverture of the map standard collision aint working verywell

I was wondering if anybody has done something similar or knows how to keep the player aligned to the track in x,y,z,pitch,yaw,roll
as i wish to be able to fly upsidedown to add more gameplay

as all ive done so far is noway near good enough


Duckstab[o](Posted 2004) [#2]
;;try running this code stuck on collisions might need to
;;increase the number of tris taken out the collision i did due to it being pants:(


Graphics3D 1024,768,32,1
AntiAlias 1

Dim Vertbox(8)
Dim Vert1x#(721)
Dim Vert2x#(721)
Dim Vert3x#(721)
Dim Vert4x#(721)
Dim Vert5x#(721)
Dim Vert6x#(721)
Dim Vert7x#(721)
Dim Vert8x#(721)
Dim Vert1y#(721)
Dim Vert2y#(721)
Dim Vert3y#(721)
Dim Vert4y#(721)
Dim Vert5y#(721)
Dim Vert6y#(721)
Dim Vert7y#(721)
Dim Vert8y#(721)
Dim Vert1z#(721)
Dim Vert2z#(721)
Dim Vert3z#(721)
Dim Vert4z#(721)
Dim Vert5z#(721)
Dim Vert6z#(721)
Dim Vert7z#(721)
Dim Vert8z#(721)


Global Ship,balll,ballr,ballf,ballb,ballpiv,temp1,temp2,dist#
Global box,x,y,z,track,camera
Global boxpivot,brush1,player,ball,ballpiv1,ballpiv2
brush1=CreateBrush(25,70,200)
BrushBlend brush1,4
x=10
y=10
z=10

camera=CreateCamera()


light=CreateLight()
Create_Vertbox
Create_vertdata
Create_vert_mesh
createship

SetBuffer BackBuffer()

While Not KeyHit(1)
updatecam
UpdateWorld
RenderWorld
Text 100,100,"trirendered+"+TrisRendered()

Flip 0
Wend
End

Function Create_Vertbox()
Vertbox(1)=CreateCube()
PositionEntity Vertbox(1),0,0,-1
Vertbox(2)=CreateCube()
PositionEntity Vertbox(2),0,1,-4
Vertbox(3)=CreateCube()
PositionEntity Vertbox(3),0,3,-6
Vertbox(4)=CreateCube()
PositionEntity Vertbox(4),0,6,-7
Vertbox(5)=CreateCube()
PositionEntity Vertbox(5),0,0,1
Vertbox(6)=CreateCube()
PositionEntity Vertbox(6),0,1,4
Vertbox(7)=CreateCube()
PositionEntity Vertbox(7),0,3,6
Vertbox(8)=CreateCube()
PositionEntity Vertbox(8),0,6,7
Boxpivot=CreatePivot()
PositionEntity boxpivot,0,0,15
TurnEntity boxpivot,0,90,0
For times=1 To 8
EntityParent Vertbox(times),boxpivot
Next
End Function



Function alignbox()

End Function

Function create_vertdata()
For a=1 To 361
collect_vertdata(a)
If a<46 Then TurnEntity boxpivot,0,-1,0,1
If a>45 And a<91 Then TurnEntity boxpivot,1,-1,0,1
If a>90 And a<136 Then TurnEntity boxpivot,-1,1,0,1
If a>135 And a<181 Then TurnEntity boxpivot,0,-1,0,1
MoveEntity boxpivot,0,0,4
Next

End Function


Function collect_vertdata(a)
Vert1x(a)=EntityX(vertbox(1),1)
Vert1y(a)=EntityY(vertbox(1),1)
Vert1z(a)=EntityZ(vertbox(1),1)
Vert2x(a)=EntityX(vertbox(2),1)
Vert2y(a)=EntityY(vertbox(2),1)
Vert2z(a)=EntityZ(vertbox(2),1)
Vert3x(a)=EntityX(vertbox(3),1)
Vert3y(a)=EntityY(vertbox(3),1)
Vert3z(a)=EntityZ(vertbox(3),1)
Vert4x(a)=EntityX(vertbox(4),1)
Vert4y(a)=EntityY(vertbox(4),1)
Vert4z(a)=EntityZ(vertbox(4),1)
Vert5x(a)=EntityX(vertbox(5),1)
Vert5y(a)=EntityY(vertbox(5),1)
Vert5z(a)=EntityZ(vertbox(5),1)
Vert6x(a)=EntityX(vertbox(6),1)
Vert6y(a)=EntityY(vertbox(6),1)
Vert6z(a)=EntityZ(vertbox(6),1)
Vert7x(a)=EntityX(vertbox(7),1)
Vert7y(a)=EntityY(vertbox(7),1)
Vert7z(a)=EntityZ(vertbox(7),1)
Vert8x(a)=EntityX(vertbox(8),1)
Vert8y(a)=EntityY(vertbox(8),1)
Vert8z(a)=EntityZ(vertbox(8),1)
End Function

Function Create_vert_mesh()
track=CreateMesh()
For a=1 To 360
surf=CreateSurface(track,brush1)
v0=AddVertex(surf,Vert1x(a),Vert1y(a),Vert1z(a),1,1)
v1=AddVertex(surf,Vert2x(a),Vert2y(a),Vert2z(a),1,0)
v2=AddVertex(surf,Vert3x(a),Vert3y(a),Vert3z(a),1,1)
v3=AddVertex(surf,Vert4x(a),Vert4y(a),Vert4z(a),1,0)
v4=AddVertex(surf,Vert5x(a),Vert5y(a),Vert5z(a),1,0)
v5=AddVertex(surf,Vert6x(a),Vert6y(a),Vert6z(a),1,1)
v6=AddVertex(surf,Vert7x(a),Vert7y(a),Vert7z(a),1,0)
v7=AddVertex(surf,Vert8x(a),Vert8y(a),Vert8z(a),1,1)
v8=AddVertex(surf,Vert1x(a+1),Vert1y(a+1),Vert1z(a+1),0,1)
v9=AddVertex(surf,Vert2x(a+1),Vert2y(a+1),Vert2z(a+1),0,0)
v10=AddVertex(surf,Vert3x(a+1),Vert3y(a+1),Vert3z(a+1),0,1)
v11=AddVertex(surf,Vert4x(a+1),Vert4y(a+1),Vert4z(a+1),0,0)
v12=AddVertex(surf,Vert5x(a+1),Vert5y(a+1),Vert5z(a+1),0,0)
v13=AddVertex(surf,Vert6x(a+1),Vert6y(a+1),Vert6z(a+1),0,1)
v14=AddVertex(surf,Vert7x(a+1),Vert7y(a+1),Vert7z(a+1),0,0)
v15=AddVertex(surf,Vert8x(a+1),Vert8y(a+1),Vert8z(a+1),0,1)
t0=AddTriangle(surf,v8,v9,v0)
t1=AddTriangle(surf,v9,v1,v0)
t2=AddTriangle(surf,v9,v10,v1)
t3=AddTriangle(surf,v10,v2,v1)
t4=AddTriangle(surf,v10,v11,v2)
t5=AddTriangle(surf,v11,v3,v2)
t6=AddTriangle(surf,v8,v0,v4)
t7=AddTriangle(surf,v12,v8,v4)
t8=AddTriangle(surf,v12,v4,v5)
t9=AddTriangle(surf,v13,v12,v5)
t10=AddTriangle(surf,v13,v5,v6)
t11=AddTriangle(surf,v14,v13,v6)
t12=AddTriangle(surf,v14,v6,v7)
t13=AddTriangle(surf,v15,v14,v7)
Next
UpdateNormals track
PositionEntity track,0,-12,20
FlipMesh track
For times=1 To 8
FreeEntity vertbox(times)
Next

End Function


Function updatecam()
PickedX()
If MouseDown(1) Then MoveEntity ship,-.01,0,0
If MouseDown(2) Then MoveEntity ship,.01,0,0
If KeyDown(44) Then TurnEntity ship,0,.1,0
If KeyDown(45) Then TurnEntity ship,0,-.1,0
MoveEntity Ship,0,0,0.01
PositionEntity camera,EntityX(ship,1),EntityY(ship,1),EntityZ(ship,1)
RotateEntity camera,EntityPitch(ship,1),EntityYaw(ship,1),EntityRoll(ship,1)
MoveEntity camera,0,6,-10
PointEntity camera,ship
End Function






Function CreateShip()
Ship=CreateSphere(2)
ballf=CreateSphere(2)
ballb=CreateSphere(2)
balll=CreateSphere(2)
ballr=CreateSphere(2)
ballpiv=CreatePivot()
PositionEntity Ship,0,-9,21,1
PositionEntity ballf,0,-9,23,1
PositionEntity ballb,0,-9,19,1
PositionEntity balll,-2,-9,21,1
PositionEntity ballr,2,-9,21,1
PositionEntity ballpiv,0,-9,21,1
RotateEntity ballr,0,90,0,1
RotateEntity balll,0,90,0,1
RotateEntity ballf,0,90,0,1
RotateEntity ballb,0,90,0,1
EntityParent ballpiv,Ship
EntityParent ballf,ballpiv
EntityParent ballb,ballpiv
EntityParent balll,ballpiv
EntityParent ballr,ballpiv
TurnEntity ship,0,90,0,1
EntityPickMode track,2
End Function


WolRon(Posted 2004) [#3]
Would something like this work for you?
Graphics3D 640, 480, 0, 2
cam = CreateCamera()
MoveEntity cam, 0,0, -10
light = CreateLight()

sphere1 = CreateSphere()
EntityType sphere1, 1
EntityRadius sphere1, 1
connector1 = CreateCube(sphere1)
ScaleEntity connector1, 1.25, .1, .1
MoveEntity connector1, -.25, 0, 0
sphere2 = CreateSphere()
EntityType sphere2, 1
EntityRadius sphere2, 1
connector2 = CreateCube(sphere2)
ScaleEntity connector2, 1.25, .1, .1
MoveEntity connector2, .25, 0, 0
cube1 = CreateCube()
EntityType cube1, 3
EntityBox cube1, 0, 0, 0, 1, 1, 1
cube2 = CreateCube()
EntityType cube2, 3
EntityBox cube2, 0, 0, 0, 1, 1, 1

MoveEntity sphere1, -1.5, 0, 0
MoveEntity sphere2, 1.5, 0, 0

MoveEntity cube1, -1.5, -2.5, 0
MoveEntity cube2, 1.5, -3.5, 0

Collisions 1, 3, 2, 2

;loop
Repeat
	;gravity
	MoveEntity sphere1, 0, -.002, 0
	MoveEntity sphere2, 0, -.002, 0
	
	UpdateWorld()
	
	AlignToVector sphere1, (EntityX(sphere1)-EntityX(sphere2)), (EntityY(sphere1)-EntityY(sphere2)), (EntityZ(sphere1)-EntityZ(sphere2)), 1
	AlignToVector sphere2, (EntityX(sphere1)-EntityX(sphere2)), (EntityY(sphere1)-EntityY(sphere2)), (EntityZ(sphere1)-EntityZ(sphere2)), 1
	
	RenderWorld()
	Flip
Until KeyHit(1)



Duckstab[o](Posted 2004) [#4]
thanks mate think ive managed to make a mokup physic code from that hope to be posting soon