January 26, 2021, 06:15:27 AM
Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email
?
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
Home
Forum
Help
Search
Gallery
Login
Register
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
3D Graphics - Effects
»
[bb] SIMPLE SHADOW SYSTEM by degac [ 1+ years ago ]
« previous
next »
Print
Pages: [
1
]
Go Down
Author
Topic: [bb] SIMPLE SHADOW SYSTEM by degac [ 1+ years ago ] (Read 651 times)
BlitzBot
Jr. Member
Posts: 1
[bb] SIMPLE SHADOW SYSTEM by degac [ 1+ years ago ]
«
on:
June 29, 2017, 12:28:39 AM »
Title :
SIMPLE SHADOW SYSTEM
Author :
degac
Posted :
1+ years ago
Description :
I was thinking of a method of culling and it's jumped out this simple system to create shadow. In this stage it can be used to create shadow of structure on terrain for a strategic game or for indoor in an adventure game.
Probably already created!
Enjoy
You need to add 3 image to work out!
Code :
Code: BlitzBasic
;lightmap world 01
;test
;graphio - degac72 at katamail.com
;16-04-2004
;please inform me if the algo is useful!
; --- good playing ---
; use linepick code from Tim Fisher (Flynn)
; probably needs some triks...
Graphics3D
640
,
480
,
32
,
2
SetBuffer
BackBuffer
(
)
Dim
lm#
(
129
,
129
)
,lmap#
(
129
,
129
)
AmbientLight
20
,
20
,
20
Global
fps=
30
Global
numeroOggetti=
5
Global
showMap=
CreateImage
(
64
,
64
)
Global
imgbuffer=
ImageBuffer
(
showMap
)
Color
255
,
255
,
255
For
xx=
0
To
63
For
yy=
0
To
63
Plot
xx,yy
Next
Next
GrabImage
showMap,
0
,
0
Cls
; --------------
txtBrick=
LoadTexture
(
"gfxgothic3.bmp"
,
1
)
txtPillar=
LoadTexture
(
"gfxcastlest.bmp"
,
1
)
Global
cuplane=
CreateCube
(
)
ScaleMesh
cuplane,
30
,
1
,
30
PositionEntity
cuplane,
30
,-
2
,
30
Global
LMbuffer=
CreateTexture
(
256
,
256
,
1
)
; 256-->scale texture 4 128-->2 64-->1
ScaleTexture
txtBrick,.5,.5
EntityTexture
cuplane,txtBrick,
0
,
0
cu=
CreateCube
(
)
ScaleTexture
txtPillar,.5,.5
EntityTexture
cu,txtPillar
;EntityColor cu,200,200,200
ScaleMesh
cu,
1
,
4
,
1
HideEntity
cu
WireFrame
0
SeedRnd
(
MilliSecs
(
)
)
Dim
oggetti
(
numeroOggetti
)
hh#=
1
px=
5
py=
15
For
k=
0
To
numeroOggetti
oggetti
(
k
)
=
CopyEntity
(
cu
)
Next
For
k=
0
To
numeroOggetti
px=k+
5
+
Rand
(
0
,
15
)
*
3
py=k+
5
+
Rand
(
0
,
15
)
*
3
PositionEntity
oggetti
(
k
)
,px,
0
,py
If
Rand
(
1
,
10
)
>
8
Then
ScaleMesh
oggetti
(
k
)
,
1.2
,
1.2
,
1.2
EntityTexture
oggetti
(
k
)
,txtBrick
Next
Global
sfera=
CreatePivot
(
)
Global
sprite=
LoadSprite
(
"gfxflare.png"
,
1
+
2
,sfera
)
ScaleSprite
sprite,
2
,
2
movLight=
CreateLight
(
2
,sfera
)
LightRange
movLight,
8
cameraPivot=
CreatePivot
(
cuplane
)
camera=
CreateCamera
(
cameraPivot
)
PositionEntity
camera,
30
,
10
,-
5
RotateEntity
camera,
20
,
90
,
0
CreatePlaceMap
(
)
Global
lightX=
16
Global
lightY=
16
CreateMAP
(
)
;ShowPlaceMap()
CreateShowMap
(
)
Repeat
kk=kk+
1
timeStart=
MilliSecs
(
)
;TurnEntity sfera,1,0,0
If
giro=
1
Then
TurnEntity
cameraPivot,
0
,.5,
0
End If
UpdateWorld
RenderWorld
If
lightX<>
MouseX
(
)
Or
lightY<>
MouseY
(
)
lightX=
MouseX
(
)
lightY=
64
-
MouseY
(
)
PositionEntity
sfera,lightX,
1
,lightY
CreateMap
(
)
End If
If
KeyDown
(
200
)
Then
MoveEntity
camera,
0
,
1
,
0
:
PointEntity
camera,cuplane
If
KeyDown
(
208
)
Then
MoveEntity
camera,
0
,-
1
,
0
:
PointEntity
camera,cuplane
If
KeyDown
(
57
)
Then
giro=
1
-giro
timeEnd=
MilliSecs
(
)
elapsed=
(
timeEnd-TimeStart
)
Text
0
,
460
,
"Time: "
+elapsed
Text
0
,
470
,
"FPS : "
+
(
(
1000
-elapsed
)
/FPS
)
Flip
Until
KeyDown
(
1
)
EndGraphics
(
)
End
Function
CreateMAP
(
)
CreateLightMap
(
lightX,lightY,
10
)
CreateShowMap
(
)
CopyRect
0
,
0
,
64
,
64
,
0
,
0
,imgBuffer,
TextureBuffer
(
LMbuffer
)
ScaleTexture
LMbuffer,
4
,
4
EntityTexture
cuplane,LMbuffer,
0
,
2
End Function
Function
ShowPlaceMap
(
)
Local
stepx=
1
Local
sizeX=
64
Local
sizeY=sizex
xx=
0
yy=
0
For
x=
0
To
sizeX-
1
For
y=SizeY-
1
To
0
Step
-
1
p=lm
(
x,y
)
alm=
255
-lmap
(
x,y
)
yy=yy+stepx
If
alm>
0
Then
Color
alm,alm,alm:
Rect
xx,yy,
2
,
2
,
1
Next
xx=xx+stepx
yy=
0
Next
End Function
Function
CreateShowMap
(
)
LockBuffer
(
imgBuffer
)
Local
stepx=
1
Local
sizeX=
64
Local
sizeY=sizex
xx=
0
yy=
0
cc=
128
rgb=cc
Or
(
cc
Shl
8
)
Or
(
cc
Shl
16
)
rrgb=
255
Or
(
255
Shl
8
)
Or
(
255
Shl
16
)
For
x=
0
To
sizeX-
1
For
y=SizeY-
1
To
0
Step
-
1
;p=lm(x,y)
alm=lmap
(
x,y
)
yy=yy+stepx
;rrgb=ReadPixelFast(xx,yy,imgBuffer)
If
alm>
0
Then
WritePixelFast
(
xx,yy,rgb,imgBuffer
)
;WritePixelFast(xx+1,yy,rgb,imgBuffer)
;WritePixelFast(xx,yy+1,rgb,imgBuffer)
;WritePixelFast(xx+1,yy+1,rgb,imgBuffer)
Else
WritePixelFast
(
xx,yy,rrgb,imgBuffer
)
;WritePixelFast(xx+1,yy,rrgb,imgBuffer)
;WritePixelFast(xx,yy+1,rrgb,imgBuffer)
;WritePixelFast(xx+1,yy+1,rrgb,imgBuffer)
End If
Next
xx=xx+stepx
yy=
0
Next
UnlockBuffer
(
ImgBuffer
)
End Function
Function
CreateLightMap
(
sx#,sy#,sz#
)
If
sz>
1060
Then
Return
For
x=
0
To
63
For
y=
0
To
63
If
lockedLine
(
x,y,lm
(
x,y
)
,sx,sy,sz
)
Then
lmap
(
x,y
)
=
100
Else
lmap
(
x,y
)
=
0
Next
Next
End Function
Function
LockedLine
(
x1#,y1#,z1#,x2#,y2#,z2#
)
Local
steps,xi#
x2=x2-x1
y2=y2-y1
z2=z2-z1
If
Abs
(
x2
)
>
Abs
(
y2
)
steps=
Abs
(
x2
)
Else
steps=
Abs
(
y2
)
xI=x2/steps
y2=y2/steps
z2=z2/steps
While
(
x1<=
64
)
And
(
y1<=
64
)
And
(
z1<=
64
)
And
(
x1=>
0
)
And
(
y1=>
0
)
And
(
z1=>
0
)
If
lm
(
x1,y1
)
>z1
Then
Return
True
x1=x1+XI
y1=y1+y2
z1=z1+z2
Wend
Return
False
End Function
Function
CreatePlaceMap
(
)
For
k=
0
To
numeroOggetti
cu=Oggetti
(
k
)
x=
EntityX
(
cu
)
z=
EntityZ
(
cu
)
w=
MeshWidth
(
cu
)
d=
MeshDepth
(
cu
)
h=
MeshHeight
(
cu
)
x1=x+
1
y1=z+
2
If
x1<
0
Then
x1=
0
If
y1<
0
Then
y1=
0
x2=x1+w-
1
y2=
(
y1+d-
1
)
If
x2>
64
Then
x2=
64
If
y2>
64
Then
y2=
64
For
xx=x1
To
x2
For
yy=y1
To
y2
lm
(
xx,yy
)
=h
Next
Next
Next
End Function
Comments :
none...
Logged
Print
Pages: [
1
]
Go Up
« previous
next »
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
3D Graphics - Effects
»
[bb] SIMPLE SHADOW SYSTEM by degac [ 1+ years ago ]
SimplePortal 2.3.6 © 2008-2014, SimplePortal