Тема: КАМЕРЫ
Показать сообщение отдельно
Старый 09.12.2005, 19:17   #6
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
2Akima: Подход к решению вопроса ИМХО изначально неверный. См. код ниже.
2Imp: Проще надо быть, проще!.. Обрати внимание на изменение ФПС.

Сори, комменты при копировании кода превратились в крякозябры и я их перебивал наскоро...
;инициализация
Graphics3D 640,480,32,1

;создаем камеры
Global MainCam=CreateCamera()
Global PrevCam=CreateCamera()
	CameraViewport PrevCam,0,0,256,256
	CameraClsColor PrevCam,100,100,250
Global C_ind=0;номер обьекта, на который смотрит гл.камера
Global C_prev_ind=0;... на который смотрит доп.камера
;создаем экран для вывода доп.камеры
Global Preview_Texture=CreateTexture(256,256,256)
Global Screen=CreateSprite()
EntityTexture Screen,Preview_Texture
PositionEntity Screen,-1.5,1,3
EntityParent Screen,MainCam

;создаем обьекты
Const C_Count=2;(кол-во обьектов +1)
Dim Obj(C_Count)
For i=0 To C_Count
	obj(i)=CreateCube()
	PositionEntity obj(i),I*10,1,0
	EntityColor obj(i),Rnd(255),Rnd(255),Rnd(255)
Next 

;небо в клеточку...
grid_tex=CreateTexture( 16,16,8,2 )
ScaleTexture grid_tex,10,10
SetBuffer TextureBuffer( grid_tex )
ClsColor 255,255,255:Cls:ClsColor 0,0,0
Color 192,192,192:Rect 0,0,8,8:Rect 8,8,8,8
plane=CreatePlane()
EntityTexture plane,grid_tex

SetBuffer BackBuffer()

;--------------------------------------
;MAIN LOOP
While Not KeyHit(1)

;выбираем обьект для гл.камеры ([F1]-[F10])
For q=0 To C_Count
	If KeyHit(q+59) Then c_ind=q
Next
;...для доп.камеры ([1]-[10])
For q=0 To C_Count
	If KeyHit(q+2) Then c_prev_ind=q
Next

;расставляем камеры к обьектам
PositionEntity MainCam,EntityX(obj(c_ind)),EntityY(obj(c_ind))+1,EntityZ(obj(c_ind))-15
PositionEntity PrevCam,EntityX(obj(c_prev_ind)),EntityY(obj(c_prev_ind))+1,EntityZ(obj(c_prev_ind))-15

;рендер в экран
CameraProjMode MainCam,0
CameraProjMode PrevCam,1
EntityAlpha Screen,0
RenderWorld()
CopyRect 0,0,256,256,0,0,BackBuffer(),TextureBuffer(Preview_Texture)

;главный рендер
CameraProjMode MainCam,1
CameraProjMode PrevCam,0
EntityAlpha Screen,1
RenderWorld()

;подсчет ФПС
FPS=FPS+1
If mFPS<MilliSecs() Then
	mFPS=MilliSecs()+1000
	CurrentFPS=FPS
	FPS=0
EndIf
Text 10,10,"FPS: "+CurrentFPS
Flip(0)


;--------------------
;MAIN LOOP END
Wend
End
(Offline)
 
Ответить с цитированием