Code archives/3D Graphics - Effects/3D Desktop Cubes
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Example of the GetDesktop Function (in Graphics section of Code archives). NOTE: Only gets desktop in fullscreen. i.e debug off. See GetDesktop function code archives entry in Graphics section for userlib info you may need. | |||||
; 3D Cubes Desktop Sample
Const SRCCOPY = $CC0020
Const CF_BITMAP = 2
Const SW_HIDE = 0
Const SW_SHOW = 5
Function GetDesktop(flag=0,update=0)
; ADAmor ZILTCH 2003
;
; This command must come after your GRAPHICS(3D) x,y command.
;
; flag 0 = create texture
; 1 = create image
DeskHwnd = GetDesktopWindow()
; Get screen coordinates
fwidth = GetSystemMetrics%(0)
fheight = GetSystemMetrics%(1)
BlitzHwnd = GetActiveWindow()
ShowWindow(BlitzHwnd,SW_HIDE)
; Get the device context of Desktop and allocate memory
hdc = GetDC(DeskHwnd)
Blitzhdc = GetDC(BlitzHwnd)
; Copy data
BitBlt(Blitzhdc, 0, 0, fwidth, fheight, hdc, 0,0, SRCCOPY)
; Clean up handles
ReleaseDC(DeskHwnd, hdc)
ReleaseDC(BlitzHwnd, Blitzhdc)
ShowWindow(BlitzHwnd,SW_SHOW)
; Create/update texture or image
Select flag
Case 0
If update = 0 Then
tex=CreateTexture(fwidth,fheight)
Else
tex=update
End If
CopyRect 0,0,fwidth,fheight,0,0,FrontBuffer(),TextureBuffer(tex)
Return tex
Case 1
If update = 0 Then
image=CreateImage(fwidth,fheight)
Else
image=update
End If
CopyRect 0,0,fwidth,fheight,0,0,FrontBuffer(),ImageBuffer(image)
Return image
End Select
End Function
;--start sample code
deskwidth=GetSystemMetrics(0);800
deskheight=GetSystemMetrics(1);600
Graphics3D deskwidth,deskheight
cam=CreateCamera()
PositionEntity cam,0,0,-4
CameraClsMode cam,False,True
l1=CreateLight(2)
LightColor l1,255,255,50
LightRange l1,300
PositionEntity l1,-100,50,100
l2=CreateLight(2)
LightColor l2,255,200,100
LightRange l2,300
PositionEntity l2,100,50,100
l3=CreateLight(2)
LightColor l3,255,100,255
LightRange l3,300
PositionEntity l3,0,-50,-10
tex=CreateTexture(1024,1024,1)
ScaleTexture tex,(1024/Float(deskwidth)),(1024/Float(deskheight))
cube1=CreateCube()
EntityTexture cube1,tex
ScaleMesh cube1,3,3,3
GetDesktop(0,tex)
image = getdesktop(1)
Type cube
Field ent
End Type
For x = -200 To 200 Step 20
For z = -100 To 300 Step 20
a =a + 1
c.cube = New cube
c\ent= CopyEntity(cube1)
PositionEntity c\ent,x,Rand(-100,150),z
TurnEntity c\ent,Rand(360),Rand(360),Rand(360)
UpdateNormals c\ent
Next
Next
HideEntity cube1
FreeEntity cube1
SetBuffer BackBuffer()
While Not GetKey()
DrawBlock image,0,0
For tc.cube = Each cube
TurnEntity tc\ent,1,1,0
MoveEntity tc\ent,0,0,.1
Next
TurnEntity cam,.05,.1,0
MoveEntity cam,0,0,.2
ms = MilliSecs() Shr 2
AmbientLight Sin(ms)*128+127,Cos(ms)*128+127,Sin(ms*3.5)*Cos(ms*4.7)*128+127
RenderWorld
Flip
Wend
End |
Comments
| ||
| Very cool. |
Code Archives Forum