Scale Animated Mesh

Blitz3D Forums/Blitz3D Beginners Area/Scale Animated Mesh

Strider Centaur(Posted 2004) [#1]
Does ScaleMesh work on animated meshes, like those loaded with LoadAnimMesh()?

Im using Psionics, Zombie and Dwarf models, THANK PSIONIC!!!

But the Dwarf os like 50 units tall and I want to make him 1 unit tall. Im make 1 unit = 1 yard ( meter ).

WHen I try:

p\pmesh = LoadAnimMesh(p\pmeshname$, pivot)
ScaleMesh p\pmesh, .02,.02,.02


I get an error saying the p\pmesh is not a mesh. But if I comment out ScaleMesh, it runs perfectly. Just the models are to big.


Rob Farley(Posted 2004) [#2]
The bones don't scale when you scalemesh, as the command suggests it scales the mesh but only the mesh.

Use scaleentity and everything well be fine.


Strider Centaur(Posted 2004) [#3]
Thanks


Strider Centaur(Posted 2004) [#4]
Err, well, still getting error, I do have that mesh parented to a Pivot ( or is that the child of a Pivot ).

Im still getting entity is not a mesh.


Strider Centaur(Posted 2004) [#5]
Heres the full sorce code:

; A simple walk about with Grimly the DWARF

Type playerData
Field pmeshname$
Field pmesh ; entity handle for this mesh
Field Pname$
Field x#
Field y#
Field z#
Field yaw#
Field pitch#
Field roll#
Field speedx#
Field speedy#
Field speedz#
Field HP#
Field dam#
Field inventory[10] 
End Type 

; animation control codes
Const walk = 1
Const run  = 2
Const jump = 3
Const jumpat = 4
Const crouch = 5
Const battleidle = 6
Const battleidle1 = 7
Const attack = 8
Const jumpattack = 9
Const attack360 = 10
Const attack2swipe = 11
Const attackstab = 12
Const block = 13
Const fallforward = 14
Const fallbackward = 15
Const yes = 16
Const no = 17
Const idle = 18
Const idle1 = 19  ; default

;resolution
Const ScreenWidth = 1024
Const ScreenHeight = 768


;initialize player
Global p.playerdata = New playerData
Global camera,cam_pitch#,cam_yaw# 

; load up starting data
p\x# = 0.0
p\y# = 0.0
p\z# = 0.0
p\yaw# = 0.0
p\pitch# = 0.0
p\roll# = 0.0
p\HP = 100.0
p\dam# = 0.0
; give the mesh name
p\pmeshname$ = "models\dwarf1.b3d"

; init a 3d mode
Graphics3D ScreenWidth, ScreenHeight, 32, 1
MoveMouse 400,200 ; position mouse near center

;make a pivot for the camera
pivot = CreatePivot()
PositionEntity pivot, p\x,p\y+1.5,p\z 
;make camera
camera = CreateCamera( pivot )
CameraClsColor camera,100,100,100
PositionEntity camera,p\x,p\y+70,p\z-100

;setup lights
AmbientLight 190,190,190

Light2=CreateLight()
LightColor light2,120,120,220
RotateEntity light2, 0,90,0
PositionEntity light2, 40,20,0

light3=CreateLight()
LightColor light3,120,120,130
RotateEntity light3,0,0,0
PositionEntity light3, -400,20,0

; load terrain, mesh and animations
ter = LoadTerrain("terrain/ter1.bmp")
TerrainDetail ter,4000,True
ScaleMesh ter,100,0,100
PositionEntity ter,-50,0,-50
p\pmesh = LoadAnimMesh(p\pmeshname$, pivot)



;make a ground
plane = CreatePlane()
PositionEntity plane, 0, 0.1, 0
EntityAlpha plane, .5
mirror=CreateMirror
; make a box for a referance point
boxmesh = CreateMesh ()
boxmesh = CreateCube()
ScaleMesh boxmesh, 10,50,50
PositionEntity boxmesh, 5, 0, 200
;extract all sequances
AnimControl()
 




;Main Loop starts here:   Not no FPS control timer, yet.
While Not KeyHit(1)
	;
	; If the current animation has stopped, loop the idle animation.
	;
	If Not Animating( p\pmesh ) Then
		new_seq = idle1
		seq = new_seq
		Animate p\pmesh, 1, 0.2, seq, 0.8
	End If

	; clear turn flag
	p\yaw# = 0
	p\z# = 0
	
	;
	; Test keys.
	;
	moving=False
	If KeyDown( 203 ) Then
		p\yaw#=+1
		If seq <> jump Then
			new_seq = idle
		End If
		moving=True
	EndIf
	If KeyDown( 205 )  Then 
		p\yaw#=-1
		If seq <> jump Then
			new_seq = idle
		End If
		moving=True
	EndIf 
	If KeyDown( 208 ) Then 
		p\z#=-0.4
		If seq <> jump Then
			new_seq = walk
		End If
		moving=True
	EndIf
	If KeyDown( 200 ) Then
	  	p\z#=+0.4
		If seq <> jump Then
			new_seq = walk
		End If
		moving=True
	EndIf 
	If KeyDown( 57 ) Then
		If seq <> jump Then
			new_seq = jump
		End If
		moving=True
	EndIf


	;
	; If the player is not moving, switch back to
	; the idle animation...
	;
	If Not moving Then
		If seq <> jump Then
			new_seq=idle1
		End If
	End If

	;
	; Start playing a new animation sequence?
	;
	If seq <> new_seq Then
		seq = new_seq
		Animate p\pmesh, 3, 0.4, seq, 0.8
	End If
	
	;Animate p\pmesh,1,.2,seq
	ScaleEntity p\pmesh, .02, .02, .02
	TurnEntity pivot, p\pitch#, p\yaw#, p\roll#
	PointEntity camera, p\pmesh
	MoveEntity pivot, p\x#,p\y#,p\z#
	PositionEntity boxmesh, 5, 50, 200
	
	mouselook()

	UpdateWorld
	RenderWorld
	Flip
Wend
End

; uses constants list above to select animation by
; name, much easier to use than just numbers.
Function  AnimControl()
			ExtractAnimSeq p\pmesh, 2, 14  ;walk
			ExtractAnimSeq p\pmesh, 16, 26  ;run
			ExtractAnimSeq p\pmesh, 28, 40  ;jump 1
			ExtractAnimSeq p\pmesh, 42, 54  ;jump 2 - for user controlled jumps
			ExtractAnimSeq p\pmesh, 56, 74  ;crouch - 56-59=down, 60-69=crouch, 70-74=get up
			ExtractAnimSeq p\pmesh, 75, 88  ;battle idle 1
			ExtractAnimSeq p\pmesh, 90, 110 ;battle idle 1
			ExtractAnimSeq p\pmesh, 112, 126  ;Attack 1 - swing
			ExtractAnimSeq p\pmesh, 128, 142  ;Attack 2 - Jump and overhead whack
			ExtractAnimSeq p\pmesh, 144, 160  ;Attack 3 - 360 backhand 
			ExtractAnimSeq p\pmesh, 162, 180  ;Attack 4 - 2 Swipes 
			ExtractAnimSeq p\pmesh, 182, 192  ;Attack 5 - Stab
			ExtractAnimSeq p\pmesh, 194, 210  ;Attack 6 - BLOCK
			ExtractAnimSeq p\pmesh, 212, 227  ;Die 1 - Forwards
			ExtractAnimSeq p\pmesh, 230, 251	;Die 1 - Backwards
			ExtractAnimSeq p\pmesh, 253, 272	;Nod YES
			ExtractAnimSeq p\pmesh, 274, 290	;Shake head NO
			ExtractAnimSeq p\pmesh, 292, 325	;Idle 1
			ExtractAnimSeq p\pmesh, 327, 360	;Idle 2
End Function

Function MoveControl()


End Function

Function mouselook()
	; Mouse look
	; ----------

	; Mouse x and y speed
	mxs=MouseXSpeed()
	mys=MouseYSpeed()
	
	; Mouse shake (total mouse movement)
	mouse_shake=Abs(((mxs+mys)/2)/1000.0)

	; Destination camera angle x and y values
	dest_cam_yaw#=dest_cam_yaw#-mxs
	dest_cam_pitch#=dest_cam_pitch#+mys

	; Current camera angle x and y values
	cam_yaw=cam_yaw+((dest_cam_yaw-cam_yaw)/5)
	cam_pitch=cam_pitch+((dest_cam_pitch-cam_pitch)/5)
	
	RotateEntity camera,cam_pitch#,cam_yaw#,0
	;RotateEntity camera,mxs,mys,0
		
	; Rest mouse position to centre of screen
	MoveMouse 400,300

		; Move camera using movement values
	MoveEntity camera,x#,y#,z#
		
End Function	



Strider Centaur(Posted 2004) [#6]
Doh!

Solved the problem, It was with a ScaleMesh on a Terrain. Silly me. Would have found it sooner if the Blitz IDE would at least highlight where the code generated the error.
:)