camera follow problem [again :(]

Blitz3D Forums/Blitz3D Programming/camera follow problem [again :(]

GC-Martijn(Posted 2004) [#1]
;--- I fix it a little
;can't delete this post :(


Jeppe Nielsen(Posted 2004) [#2]
Does this help ?:
Graphics3D 1024,768,16,1
SetBuffer BackBuffer()

;The problem
;Run this program and hold down the cursor "right key"
;Then you see that the camera is acting like the player,
;because its a child, but that's not good because its moving,
;away from the object. 

;in the tomb raider game the camera is not moving, and that's what 
;i want , but its hard to make i think.

;i try to do a collions check when the camera is colli with a wall 
;and then stops but that don't work for me.

;i hope you can make it
;don't need head turning or other diffec. things only the problem
;above. (only player is turning).

;THANKS VERY MUCH !!!!!
;GC-Martijn

Global level

Global player,p_body,p_head
Global p_x# 		= 0
Global p_y# 		= 1 
Global p_z# 		= 14	;now its at the wall
Global p_speed# 	= 1
Global p_pitch# 	= 0 
Global p_yaw# 		= -90	;now its like this |^ (|wall,^player)
Global p_roll# 		= 0

Global camera
Global c_x# 		= 0
Global c_y# 		= 6
Global c_z# 		= -14
Global c_speed# 	= 1
Global c_yaw# 		= 0

Global type_camera 	= 3
Global type_level 	= 2
Global type_player 	= 1

Const key_arrowpad_up 	= 200
Const key_arrowpad_left = 203
Const key_arrowpad_right= 205
Const Key_arrowpad_down = 208

; The Player
;---+
	player = CreatePivot()
	PositionEntity 	player,p_x#,p_y#,p_z#
	RotateEntity 	player,p_pitch#,p_yaw#,p_roll#
	EntityType 		player,type_player

	;body
	p_tex 	= LoadTexture("armour.pcx")
	p_body 	= CreateCube(player)
	ScaleMesh 		p_body,2,1,4
	EntityTexture 	p_body,p_tex

	;head
	p_head = CreateCube(p_body)
	ScaleMesh 		p_head,1.5,.6,2.2
	EntityTexture 	p_head,p_tex
	PositionEntity 	p_head,0,(p_y#+1),0

;De scene
	; Ground
	ground 		= CreatePlane()
	ground_tex 	= LoadTexture("plane.jpg")
	ScaleTexture 	ground_tex,20,17
	EntityTexture 	ground,ground_tex
	PositionEntity 	ground,0,0,0
	EntityType 		ground,type_level 

	; Level
	level 		= LoadMesh("level.3ds") 
	PositionEntity 	level,30,-1,0
	EntityType 		level,type_level
	ScaleEntity 	level,2,2,2

	; Create Camera
	camera 		= CreateCamera() ;p_body)
	PositionEntity 	camera,c_x#,c_y#,c_z#
	EntityType 		camera,type_camera

	; Handle Collisions
	Collisions type_player,type_level,2,2
	Collisions type_camera,type_level,2,2

	; Light
	AmbientLight 255,255,255

;Game Loop
;------------------------------------------------
While Not KeyHit(1)

	reset_vars()
	player_move()
	camera_move(camera,player,c_x,c_y,c_z)

	UpdateWorld
	RenderWorld
	player_info()
	Flip 
Wend
End
;------------------------------------------------

Function player_move()
	If KeyDown(key_arrowpad_left) Then 
		TurnEntity player,0,1,0
	EndIf

	If KeyDown(key_arrowpad_right) Then 
		TurnEntity player,0,-1,0
	EndIf

	If KeyDown(key_arrowpad_up) Then 
		p_z#=+p_speed#
		MoveEntity player,p_x#,p_y#,p_z#
	EndIf

	If KeyDown(key_arrowpad_down) Then 
		p_z#=-p_speed#
		MoveEntity player,p_x#,p_y#,p_z#
	EndIf
End Function

Function player_info()
	Text 0,FontHeight()*1,"p_x:"+EntityX(player)
	Text 0,FontHeight()*2,"p_y:"+EntityY(player)
	Text 0,FontHeight()*3,"p_z:"+EntityZ(player)
	Text 0,FontHeight()*4,"p_speed:"+p_speed#
	Text 0,FontHeight()*5,"p_yaw:"+EntityYaw(player)
	Text 0,FontHeight()*6,"p_roll:"+EntityRoll(player)
	Text 0,FontHeight()*7,"p_pitch:"+EntityPitch(player)
	Text 0,FontHeight()*8,"p_collisions:"+CountCollisions(player)
	Text 0,FontHeight()*9,"level distance:"+ProjectedX#()
End Function

Function reset_vars()
	p_x# 		= 0
	p_y# 		= 0
	p_z# 		= 0
	p_pitch# 	= 0
	p_yaw# 		= 0
	p_roll# 	= 0
End Function

Function camera_move(camera,entity,camx#,camy#,camz#,aimx#=0,aimy#=0,aimz#=0,smoothcam#=0.2,roll#=0)
	
	TFormPoint camx#,camy#,camz#,entity,0
	
	dx#=(TFormedX()-EntityX(camera))*smoothcam#
	dy#=(TFormedY()-EntityY(camera))*smoothcam#
	dz#=(TFormedZ()-EntityZ(camera))*smoothcam#
	
	TranslateEntity camera,dx,dy,dz
	
	TFormPoint aimx#,aimy#,aimz#,entity,0
	
	dx# = EntityX(camera)-TFormedX()
	dy# = EntityY(camera)-TFormedY()
	dz# = EntityZ(camera)-TFormedZ()
	dist#=Sqr#((dx#*dx#)+(dz#*dz#))
	pitch#=ATan2(dy#,dist#)
	yaw#=ATan2(dx#,-dz#)
	
	RotateEntity camera,pitch#,yaw#,roll#
	
End Function



GC-Martijn(Posted 2004) [#3]
YES THANKS,

I was looking for that , at this moment I was busy with the castle code

Function player_camera()
	dx#=EntityX(c_target,True)-EntityX(camera,True)
	dy#=EntityY(c_target,True)-EntityY(camera,True)
	dz#=EntityZ(c_target,True)-EntityZ(camera,True)
	
	TranslateEntity camera,dx*.1,dy*.1,dz*.1
	
	PointEntity 	camera,heading	
		
	PositionEntity 	c_target,0,0,0
	ResetEntity 	c_target
	PositionEntity 	c_target,0,0,0
End Function


and the other stuff .

but your script is the best :) !

Again Thanks,
GC-Martijn


Jeppe Nielsen(Posted 2004) [#4]
I am glad you could use it :)


GC-Martijn(Posted 2004) [#5]
You get the credits :)