here is my code. This is really bugging me.
;this is a program to demonstrate the use of single surface quads
Graphics3D 800,600
ClearTextureFilters
Type sprite
Field width ;width of sprite in pixels
Field height ;height of sprite in pixels
Field u1#,v1# ;top left texture coords
Field u2#,v2# ;bottom right texture coords
Field tile ;tile number of sprite (for use in deleting tiles)
End Type
;create array of seven sprites
Dim image.sprite(6)
;globals
Global texture, surf, brush, camera, light, mesh
;create texture to be used
;this creates a 1024*1024 texture, allowing for 4*4 tiles
texture = CreateTexture(256,256,1)
;load in sample graphics tile, add to texture at first tile position
textureImage = LoadImage ("sample graphics.bmp")
SetBuffer TextureBuffer(texture)
DrawImage textureImage,0,0
SetBuffer BackBuffer()
;create the brush
brush = CreateBrush()
BrushTexture brush,texture
;okay! That works! Mwahahahahahah!
;Now, the aim is to load in the image information contained in "sample graphics.dat"
file = ReadFile("sample graphics.dat")
sprites = ReadInt(file)
For a = 1 To sprites
x = ReadInt(file)
y = ReadInt(file)
width = ReadInt(file)
height = ReadInt(file)
image(a-1) = New sprite
image(a-1)\width = width
image(a-1)\height = height
image(a-1)\u1 = (x/255.0)
image(a-1)\v1 = (y/255.0)
image(a-1)\u2 = ((x+width-1)/255.0)
image(a-1)\v2 = ((y+height-1)/255.0)
image(a-1)\tile = 1
Next
CloseFile (file)
camera=CreateCamera()
CameraZoom camera,1
light=CreateLight()
RotateEntity light,45,0,0
LightColor light,255,255,255
; Create blank mesh
mesh=CreateMesh()
; Create blank surface which is attached to mesh (surfaces must always be attached to a mesh)
surf=CreateSurface(mesh)
;call draw3DImage function, drawing an object on screen
draw3DImage(image(0),0,200,1,1)
draw3DImage(image(2),0,400,1,1)
;position mesh so it can be seen
PositionEntity mesh,-400,-300,400
PositionEntity camera,0,0,0
;paint the surface with the brush
WireFrame False
PaintSurface surf,brush
; main loop
While Not KeyDown(1)
If KeyDown(200) MoveEntity camera,0,-1,0
If KeyDown(203) MoveEntity camera,1,0,0
If KeyDown(205) MoveEntity camera,-1,0,0
If KeyDown(208) MoveEntity camera,0,1,0
If KeyDown(44) MoveEntity camera,0,0,1
If KeyDown(45) MoveEntity camera,0,0,-1
UpdateNormals mesh
RenderWorld
Flip
Wend
End
;function draw3DImage(image, xpos, ypos, xscale, yscale)
Function draw3DImage(this.sprite, xpos#, ypos#, xscale#, yscale#)
;first, create the four vertices as part of the quad.
v1 = AddVertex(surf, xpos, ypos, 0, this\u1, this\v1)
v2 = AddVertex(surf, (xpos+this\width-1), ypos, 0, this\u2, this\v1)
v3 = AddVertex(surf, (xpos+this\width-1), (ypos-this\height+1), 0, this\u2, this\v2)
v4 = AddVertex(surf, xpos, (ypos-this\height+1), 0, this\u1, this\v2)
;add two triangles
t1 = AddTriangle(surf, v1, v2, v4)
t2 = AddTriangle(surf, v2, v3, v4)
End Function
|