Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 09.12.2005, 10:46   #1
Akima
Бывалый
 
Регистрация: 22.10.2005
Сообщений: 701
Написано 7 полезных сообщений
(для 5 пользователей)
Здравстуйте товарищи трудящиеся
Объявляется общий сбор, цель которого помощь в
испровлении ошибок описанного ниже кода.
теперь серьезно:
Помогите с прогой пишу ее для тестирования тура,
чтобы с разных видов смотреть и выявлять ошибки в туре
но как видете ,если уже посмотрели, не очень .

Описание: один игрок двигается, а камеры других игроков
отоброжаются на экране
(код проецирования позаимствован из сампла tex_render.bb)
по типу как в играх RAINBOW SIX,

как сделать чтобы не тормозило.



Graphics3D 640,480,32,2

Global af$
af=LoadFont("arial cyr",18,True)
SetFont af


Global C_ind;номер активной камеры

;ставим объекты
Dim Obj(10)
Dim cam(10)
Global C_Count=3 ;колво объектов
For i=1 To c_count
obj(i)=CreateCube()
cam(i)=CreateCamera (obj(i))
PositionEntity obj(i),i*10,1,0
EntityColor obj(i),Rnd(255),Rnd(255),Rnd(255)
PositionEntity cam(i),0,2,-15

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
SetBuffer BackBuffer()

plane=CreatePlane()
EntityTexture plane,grid_tex
;--------------------------------------

c_ind=2

While Not KeyHit(1)

;устанавливаем номер активной камеры
If KeyDown(59) c_ind=1
If KeyDown(60) c_ind=2
If KeyDown(61) c_ind=3

For i=1 To c_count;переключаем камеры
If i=c_ind ShowEntity cam(c_ind) Else HideEntity cam(i)
Next


If KeyDown( 205 )=True Then TurnEntity obj(c_ind),0,-2,0
If KeyDown( 203 )=True Then TurnEntity obj(c_ind),0,2,0
If KeyDown( 208 )=True Then MoveEntity obj(c_ind),0,0,-0.5
If KeyDown( 200 )=True Then MoveEntity obj(c_ind),0,0,0.5


ScreenCamera c_ind,3,340,0
UpdateWorld
RenderWorld



Text 20,20,c_ind,True,True


Text 320,400,"F1~F3 - переключение между объектами",True,True
Text 320,430,"стрелки - движение",True,True
Flip
Wend
End



Function ScreenCamera(ind,plan_cam,xc,yc)
;Описание: ind -активная камера
; plan_cam- номер камеры которая ваводится о окне
; xc,yc -позиция окна
;

texture=CreateImage( 640,480)

;UpdateWorld
;RenderWorld

HideEntity cam(ind)
ShowEntity cam(plan_cam)
UpdateWorld
RenderWorld
CopyRect 0,0,640,480,0,0,0,ImageBuffer( texture )
ResizeImage texture ,180,120
Cls
ShowEntity cam(ind)
HideEntity cam(plan_cam)

DrawImage texture,xc,yc
Flip

End Function
(Offline)
 
Ответить с цитированием
Старый 09.12.2005, 15:19   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
ResizeImage texture ,180,120
это зло
Сразу задай размер изображения для камеры через
CameraViewport camera,x,y,width,height
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.12.2005, 16:58   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Ну если кортенько, то вот:
Graphics3D 640,480,32,2


Global C_ind=2;номер активной камеры

Type iCamera
	Field cam
	Field preview_cam
	Field obj
End Type

Function Create_iCamera.iCamera(Iparam)
	iC.iCamera= New iCamera
	iC\obj=CreateCube()
	iC\cam=CreateCamera (iC\obj)
	iC\preview_cam=CreateCamera (iC\obj)
	CameraViewport iC\preview_cam,0,0,180,120
	PositionEntity iC\obj,Iparam*10,1,0
	EntityColor iC\obj,Rnd(255),Rnd(255),Rnd(255)
	PositionEntity iC\cam,0,2,-15
	PositionEntity iC\preview_cam,0,2,-15
	Return iC
End Function
;ставим объекты 

Global Preview_Image=CreateImage(180,120)

Const C_Count=3;колво объектов
Local CMas.iCamera[C_Count]

For i=1 To C_Count
	CMas[i]=Create_iCamera(i)
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()
While Not KeyHit(1)

;устанавливаем номер активной камеры
If KeyDown(59) c_ind=1
If KeyDown(60) c_ind=2
If KeyDown(61) c_ind=3

For i=1 To c_count;переключаем камеры
If i=c_ind 
	CameraProjMode CMas[c_ind]\cam,1
	CameraProjMode CMas[c_ind]\preview_cam,1
Else 
	CameraProjMode CMas[i]\cam,0
	CameraProjMode CMas[c_ind]\preview_cam,0
EndIf
Next

ScreenCamera(CMas[c_ind],CMas[3])
RenderWorld

DrawImage Preview_Image,0,0
Flip
Wend
End


Function ScreenCamera(ind.iCamera,plan_cam.iCamera)
;Описание: ind -активная камера
; plan_cam- номер камеры которая ваводится о окне 

CameraProjMode ind\cam,0
CameraProjMode plan_cam\preview_cam,1

RenderWorld()
CopyRect 0,0,180,120,0,0,FrontBuffer(),ImageBuffer( Preview_Image )

CameraProjMode ind\cam,1
CameraProjMode plan_cam\preview_cam,0

End Function
Тут ещё бы оптимизацию переключения камер и т.п.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.12.2005, 17:01   #4
alex-mad
Модератор
 
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений
(для 10 пользователей)
Смех

а разрулил то не плохо!
(Offline)
 
Ответить с цитированием
Старый 09.12.2005, 17:54   #5
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
мммда, а я хотел через cameraviewport сделать - нифига не получилось.

есть в блице один недостаток, нельзя определить порядок рендера камер, камеры рендерятся в порядке или их создания, или тогда, когда реендерится родительский объект камеры, который в свою очередь рендерится в своем порядке создания объектов...

2 Imp

Rulezzz!
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 09.12.2005, 20:45   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Согласен - но твой код более конкретный, я же надеюсь на использование кода в дальнейшем.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FoV камеры HolyDel 3D-программирование 1 01.08.2008 15:56
Эффекты камеры)))))))) AndruXa Blitz3D 12 21.11.2007 00:01
Тип Камеры jimon 2D-программирование 4 18.10.2007 22:07
Баг камеры Wins Vega 3D-программирование 1 08.05.2007 04:14
1 окно, 2 камеры Chuma 3D-программирование 9 18.02.2007 01:14


Часовой пояс GMT +4, время: 17:48.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com