SetCubeMode texture,mode

Параметры

texture - указатель существующей текстуры

mode - способ визуализации (рендеринга) текстуры с кубической картой окружения:
1: Зеркальный (specular)-по умолчанию
2: Рассеянный (diffuse)
3: Преломление (refraction)

Описание

Устанавливает режим визуализации для текстуры с кубической картой окружения (cubemap texture).

Доступны следующие режимы:

1: Зеркальный (по умолчанию). Используйте, чтобы придать Вашему объекту больше блеска.

2: Рассеянный. Используйте, чтобы придать объекту более мягкие и реалистичные отражения.

3: Преломление. Придает объекту эффект линзы, в которой свет преломляется.

Смотрите также : CreateTexture, LoadTexture, SetCubeFace.

Пример

; Пример использования SetCubeMode
; -------------------

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

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

; Если видеокарта не поддерживает кубическую карту окружения, то завершаем программу
If GfxDriverCaps3D()<110 Then RuntimeError "Извините, Ваша видеокарта никуда не годится!"

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

; Создаём отдельную камеру для того, чтобы обновлять кубическую карту - это позволит нам управлять главной камерой и камерой текстуры.
cube_cam=CreateCamera()
HideEntity cube_cam

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

; Создаем объект, на котором испытаем нашу текстуру-классический чайник
teapot=LoadMesh("media/teapot.x")
ScaleEntity teapot,3,3,3
PositionEntity teapot,0,10,0

; Создаем остальные объекты

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

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

; кактус
cactus=LoadMesh("media/cactus2.x")
FitMesh cactus,-5,0,-5,2,6,.5

; верблюд
camel=LoadMesh("media/camel.x")
FitMesh camel,5,0,-5,6,5,4

; Создаем НЛО-динамический объект, который будет отражаться в нашей текстуре
ufo_piv=CreatePivot()
PositionEntity ufo_piv,0,15,0
ufo=LoadMesh("media/green_ufo.x",ufo_piv)
PositionEntity ufo,0,0,10

; Создаем текстуру с параметрами цвет+кубическая карта+сохранять в видеопамяти
tex=CreateTexture(256,256,1+128+256)

; Накладываем текстуру на чайник
EntityTexture teapot,tex

; Переменная, в которой будем хранить режим визуализации текстуры
cube_mode=1

While Not KeyDown(1)

; Управление камерой

; обзор мышкой

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

RotateEntity cam,mys#,-mxs#,0

MoveMouse width/2,height/2

; двигаем камеру вперед/назад/влево/вправо курсорными клавишами

If KeyDown(200)=True Then MoveEntity cam,0,0,.2 ; камеру вперед
If KeyDown(208)=True Then MoveEntity cam,0,0,-.2 ; камеру назад

If KeyDown(205)=True Then MoveEntity cam,.2,0,0 ; камеру влево
If KeyDown(203)=True Then MoveEntity cam,-.2,0,0 ; камеру вправо

; Клавишей M меняем режим визуализации
If KeyHit(50)
cube_mode=cube_mode+1
If cube_mode=4 Then cube_mode=1
SetCubeMode tex,cube_mode
EndIf

; поворачиваем точку, к которой привязан НЛО, заставляя и его поворачиваться вокруг чайника
TurnEntity ufo_piv,0,2,0

; Скроем главную камеру перед обновлением кубической карты текстуры
HideEntity cam

; Обновляем карту
UpdateCubemap(tex,cube_cam,teapot)

; Снова задействуем главную камеру
ShowEntity cam

RenderWorld

Text 0,0,"Перемещайте мышь для обзора "
Text 0,20,"Используйте курсорные клавиши для перемещения камеры"
Text 0,40,"Клавиша M для выбора режима"
Text 0,60,"SetCubeMode tex,"+cube_mode

Flip

Wend


Function UpdateCubemap(tex,camera,entity)

tex_sz=TextureWidth(tex)

; Используем камеру, которую мы прежде создали для обновления текстуры
ShowEntity camera

; Скроем объект, на который будет накладываться текстура
HideEntity entity

; Раасположим камеру в координатах объекта
PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity)

CameraClsMode camera,False,True

; Установим поле зрения камеры таким же, как и размеры текстуры-так мы сможем все, чт видит камера, вместить в текстуру
CameraViewport camera,0,0,tex_sz,tex_sz

; Обновляем кубическую карту

; вид слева
SetCubeFace tex,0
RotateEntity camera,0,90,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; вид спереди
SetCubeFace tex,1
RotateEntity camera,0,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; вид справа
SetCubeFace tex,2
RotateEntity camera,0,-90,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; вид сзади
SetCubeFace tex,3
RotateEntity camera,0,180,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; вид сверху
SetCubeFace tex,4
RotateEntity camera,-90,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; вид снизу
SetCubeFace tex,5
RotateEntity camera,90,0,0
RenderWorld
CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex)

; Снова показываем скрытый объект
ShowEntity entity

; Скрываем дополнительную камеру
HideEntity camera

End Function

Главная страница

Нажмите сюда, чтобы увидеть последнюю версию этой страницы в интернете