Code archives/3D Graphics - Effects/Stereoscopic Camera
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This IS the code for a stereoscopic 3d camera! Probably you will have to set the offset of the 2 cameras in lines 6 and 9 of "CreateStereoCamera" function... dabbede2000@... | |||||
Global Screen_Width=800
Global Screen_Height=600
Global StereoTex_Width=256 ;The width of the StereoImage
Global StereoTex_Height=256 ;The height of the StereoImage
Type StereoCamera
Field Cam,Dx,Sx,ViewDx,ViewSx,PlaneDx,PlaneSx
End Type
;--Main----------------------------------------------------------------------------------------------
Graphics3D Screen_Width,Screen_Height
SetBuffer BackBuffer()
camera.StereoCamera=CreateStereoCamera()
box=CreateCube()
FitMesh box,-1,-1.1,.5,2,2.2,1
MoveEntity box,2,2,10
If FileType("Bart.bmp")<>1 Then RuntimeError "Missing file 'Bart.bmp'"
tex=LoadTexture("Bart.bmp") ;Any texture you want
EntityTexture box,tex
While Not KeyHit(1)
If MouseDown(1) MoveEntity camera\cam,0,0,.1
If MouseDown(2) MoveEntity camera\cam,0,0,-.1
x#=MouseXSpeed()
y#=MouseYSpeed()
MoveMouse Screen_Width/2,Screen_Height/2
TurnEntity camera\cam,y,-x,0
RotateEntity camera\cam,EntityPitch(camera\cam),EntityYaw(camera\cam),0
ShowEntity box ;Remember to show all the objects of your world
TakeStereoWorld()
HideEntity box ;And now remember to hide all the objects of your world :)
RenderStereoWorld()
Flip
Wend
End
;--Functions-----------------------------------------------------------------------------------------
Function CreateStereoCamera.StereoCamera()
a.StereoCamera=New StereoCamera
a\cam=CreateCamera()
ScaleEntity a\cam,.1,.1,.1
a\dx=CreateCamera(a\cam)
MoveEntity a\dx,+.3,0,0
CameraViewport a\dx,0,0,StereoTex_Width,StereoTex_Height
a\sx=CreateCamera(a\cam)
MoveEntity a\sx,-.3,0,0
CameraViewport a\sx,0,0,StereoTex_Width,StereoTex_Height
a\viewdx=CreateTexture(StereoTex_Width,StereoTex_Height)
a\viewsx=CreateTexture(StereoTex_Width,StereoTex_Height)
a\planedx=CreateSprite(a\cam)
SpriteViewMode a\planedx,1
ScaleSprite a\planedx,1,.75
MoveEntity a\planedx,0,0,1.001
EntityOrder a\planedx,-1000
EntityBlend a\planedx,3
EntityTexture a\planedx,a\viewdx
HideEntity a\planedx
a\planesx=CreateSprite(a\cam)
SpriteViewMode a\planesx,1
ScaleSprite a\planesx,1,.75
MoveEntity a\planesx,0,0,1.001
EntityOrder a\planesx,-1000
EntityBlend a\planesx,3
EntityTexture a\planesx,a\viewsx
HideEntity a\planesx
Return a
End Function
Function TakeStereoWorld()
For a.StereoCamera=Each StereoCamera
;--Dx--------------------
CameraProjMode a\Dx,1
CameraProjMode a\Sx,0
CameraProjMode a\cam,0
AmbientLight 255,0,0
RenderWorld
CopyRect 0,0,StereoTex_Width,StereoTex_Height,0,0,BackBuffer(),TextureBuffer(a\viewdx)
;--Sx--------------------
CameraProjMode a\Dx,0
CameraProjMode a\Sx,1
CameraProjMode a\cam,0
AmbientLight 0,255,255
RenderWorld
CopyRect 0,0,StereoTex_Width,StereoTex_Height,0,0,BackBuffer(),TextureBuffer(a\viewsx)
Next
End Function
Function RenderStereoWorld()
For a.StereoCamera=Each StereoCamera
ShowEntity a\planedx
ShowEntity a\planesx
CameraProjMode a\Dx,0
CameraProjMode a\Sx,0
CameraProjMode a\cam,1
RenderWorld
HideEntity a\planedx
HideEntity a\planesx
Next
End Function |
Comments
| ||
| Just in case you didn't know... if you have a NVIDIA card, you can download the 3D Glasses add-on, which works fine with Anaglyph Stereo (coloured glasses) on almost ANY 3D program or game you create/own... (Click consumer 3D stereo instead of graphics driver on the nvidia software download page) |
| ||
| There are other forms of stereotopics :) but yes I have seen the info of what you say on edimensional. |
Code Archives Forum