Page 1 sur 1

ClipTexture()

Publié : sam. 08/oct./2005 9:37
par comtois
C'est l'équivalent de la fonction ClipSprite() mais pour une texture.
Je vais ajouter cette fonction dans la lib M3D_Matrix3D.

Voici une démo , il suffit d'appuyer sur une des touches du curseur pour animer le personnage.

J'utilise cette image

Image

Code : Tout sélectionner

Structure UV
u.f
v.f
EndStructure
Structure Facette
P1.uv
P2.uv
P3.uv
P4.uv
EndStructure
Declare ClipTexture(x.f,y.f,l.f,h.f)

If InitEngine3D()=0 Or InitSprite()=0 Or InitKeyboard()=0
	End ; pas de MessageRequester() pour une démo , on sort direct !
EndIf
OpenScreen(1024,768,32,"")    

;Mesh
CreateMesh(0)
SetMeshData(0, #PB_Mesh_Vertices     , ?PlainVertices, 4)
SetMeshData(0, #PB_Mesh_Triangles    , ?IndexPlain   , 4)
SetMeshData(0, #PB_Mesh_Normals       , ?PlainNormals, 4)
SetMeshData(0, #PB_Mesh_UVCoordinates, ?PlainTexture , 4)

;Texture
LoadTexture(0, "BlondeHero.JPG")

;Entity
CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0)))
ResizeEntity(0,0.5,0,0.5)	
RotateEntity(0, 0,90,0)	

;Camera
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,7)

AmbientColor(RGB(255,255,255))

;Variables
l.f=1.0/3.0 ; 3 images sur la largeur
h.f=1.0/4.0 ; 4 images en hauteur
max=150
Tps=ElapsedMilliseconds()


ClipTexture(image*l,h,l,h)

Repeat
	If ElapsedMilliseconds()-Tps>max
		Tps=ElapsedMilliseconds()
   	image+1
	 	If image>2
	 		image=0
		EndIf
	EndIf
	If ExamineKeyboard()
		If KeyboardPushed(#PB_Key_Left)
			ClipTexture(image*l,0,l,h)
		ElseIf KeyboardPushed(#PB_Key_Down)
			ClipTexture(image*l,h,l,h)
		ElseIf KeyboardPushed(#PB_Key_Right)
			ClipTexture(image*l,h*2,l,h)
		ElseIf KeyboardPushed(#PB_Key_Up)
			ClipTexture(image*l,h*3,l,h)
		EndIf
	EndIf	
	RenderWorld()
	FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 

 
End

Procedure  ClipTexture(x.f,y.f,l.f,h.f)
*Ptr.Facette=?PlainTexture

*Ptr\P2\u=x
*Ptr\P2\v=y

*Ptr\P3\u=x+l
*Ptr\P3\v=y

*Ptr\P4\u=x+l
*Ptr\P4\v=y+h

*Ptr\P1\u=x
*Ptr\P1\v=y+h
 SetMeshData(0, #PB_Mesh_UVCoordinates, ?PlainTexture , 4)
EndProcedure

DataSection

PlainVertices: 
Data.f -0.5,0,-0.5
Data.f -0.5,0,0.5
Data.f 0.5,0,0.5
Data.f 0.5,0,-0.5

PlainNormals:
Data.f 0,1,0
Data.f 0,1,0
Data.f 0,1,0
Data.f 0,1,0 

PlainTexture:
Data.f 0,0
Data.f 0,1
Data.f 1,1
Data.f 1,0

IndexPlain: 
Data.w 0,1,2
Data.w 2,3,0
Data.w 2,1,0
Data.w 0,3,2

EndDataSection