SetCubeMode texture,mode

Parameters

texture - a valid texture handle

mode - the rendering mode of the cubemap texture:
1: Specular (default)
2: Diffuse
3: Refraction

Description

Set the rendering mode of a cubemap texture.

The available rendering modes are as follows:

1: Specular (default). Use this to give your cubemapped objects a shiny effect.

2: Diffuse. Use this to give your cubemapped objects a non-shiny, realistic lighting effect.

3: Refraction. Good for 'cloak'-style effects.

See also: CreateTexture, LoadTexture, SetCubeFace.

Example

; SetCubeMode Example
; -------------------

width=640
height=480
depth=0
mode=0

Graphics3D width,height,depth,mode
SetBuffer BackBuffer()

; If user's graphics card does not support cubic mapping then quit example
If GfxDriverCaps3D()<110 Then RuntimeError "Sorry, your graphics card does not support cubic environemnt maps."

cam=CreateCamera()
PositionEntity cam,0,10,-10

; Create separate camera for updating cube map - this allows us to manipulate main camera and cube camera which avoids any confusion
cube_cam=CreateCamera()
HideEntity cube_cam

light=CreateLight()
RotateEntity light,90,0,0

; Load object we will apply cubemap to - the classic teapot
teapot=LoadMesh("media/teapot.x")
ScaleEntity teapot,3,3,3
PositionEntity teapot,0,10,0

; Create some scenery

; ground
ground=CreatePlane()
EntityColor ground,168,133,55
ground_tex=LoadTexture("media/sand.bmp")
ScaleTexture ground_tex,10,10
EntityTexture ground,ground_tex

; sky
sky=CreateSphere(24)
ScaleEntity sky,500,500,500
FlipMesh sky
EntityFX sky,1
sky_tex=LoadTexture("media/sky.bmp")
EntityTexture sky,sky_tex

; cactus
cactus=LoadMesh("media/cactus2.x")
FitMesh cactus,-5,0,-5,2,6,.5

; camel
camel=LoadMesh("media/camel.x")
FitMesh camel,5,0,-5,6,5,4

; Load ufo to give us a dynamic moving object that the cubemap will be able to reflect
ufo_piv=CreatePivot()
PositionEntity ufo_piv,0,15,0
ufo=LoadMesh("media/green_ufo.x",ufo_piv)
PositionEntity ufo,0,0,10

; Create texture with color + cubic environment map + store in vram flags
tex=CreateTexture(256,256,1+128+256)

; Apply cubic environment map to teapot
EntityTexture teapot,tex

; Set initial cube mode value
cube_mode=1

While Not KeyDown(1)

; Control camera

; mouse look

mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)

RotateEntity cam,mys#,-mxs#,0

MoveMouse width/2,height/2

; move camera forwards/backwards/left/right with cursor keys

If KeyDown(200)=True Then MoveEntity cam,0,0,.2 ; move camera forward
If KeyDown(208)=True Then MoveEntity cam,0,0,-.2 ; move camera back

If KeyDown(205)=True Then MoveEntity cam,.2,0,0 ; move camera left
If KeyDown(203)=True Then MoveEntity cam,-.2,0,0 ; move camera right

; If M key pressed then change cube mode
If KeyHit(50)
cube_mode=cube_mode+1
If cube_mode=4 Then cube_mode=1
SetCubeMode tex,cube_mode
EndIf

; Turn ufo pivot, causing child ufo mesh to spin around it (and teapot)
TurnEntity ufo_piv,0,2,0

; Hide our main camera before updating cube map - we don't need it to be rendererd every time cube_cam is rendered
HideEntity cam

; Update cubemap
UpdateCubemap(tex,cube_cam,teapot)

; Show main camera again
ShowEntity cam

RenderWorld

Text 0,0,"Use mouse to look around"
Text 0,20,"Use cursor keys to change camera position"
Text 0,40,"Press M to change cube mode"
Text 0,60,"SetCubeMode tex,"+cube_mode

Flip

Wend


Function UpdateCubemap(tex,camera,entity)

tex_sz=TextureWidth(tex)

; Show the camera we have specifically created for updating the cubemap
ShowEntity camera

; Hide entity that will have cubemap applied to it. This is so we can get cubemap from its position, without it blocking the view
HideEntity entity

; Position camera where the entity is - this is where we will be rendering views from for cubemap
PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity)

CameraClsMode camera,False,True

; Set the camera's viewport so it is the same size as our texture - so we can fit entire screen contents into texture
CameraViewport camera,0,0,tex_sz,tex_sz

; Update cubemap

; do left view
SetCubeFace tex,0
RotateEntity camera,0,90,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; do forward view
SetCubeFace tex,1
RotateEntity camera,0,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; do right view
SetCubeFace tex,2
RotateEntity camera,0,-90,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; do backward view
SetCubeFace tex,3
RotateEntity camera,0,180,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; do up view
SetCubeFace tex,4
RotateEntity camera,-90,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; do down view
SetCubeFace tex,5
RotateEntity camera,90,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; Show entity again
ShowEntity entity

; Hide the cubemap camera
HideEntity camera

End Function

Index

Click here to view the latest version of this page online