|
3D-программирование Вопросы, касающиеся программирования 3D мира |
11.02.2007, 23:41
|
#1
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
1 окно, 2 камеры
Добрый день господа!
Позвольте задать Вам вопрос.
1. Как можно ли наложить окно первой камеры на окно второй с полупрозрачностью? Тоесть есть основная карта - а в углу показывается в отдельном окне 3-я камера, причем с точки зрения дизайна это окно должно быть полупрозрачным (иначе место теряется)
На ум приходит рендер в текстуру (но не уверен в качестве и скорости)
2. Как сделать так чтобы 2 камеры работая одновременно рендерили по разному, одна - солидом, вторая - WireFrame'ом
Заранее спасибо за ответ.
|
(Offline)
|
|
11.02.2007, 23:59
|
#2
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Re: 1 окно, 2 камеры
1) Не стоит делать дополнительные камеры - это дополнительные проходы рендера и соотвественно меньшая производительность. Поэтому карту делать квадом перед камерой с рендером в его текстуру, для высокой скорости юзай либу FastImage на форуме blitz.pp.ru в разделе "исходники"
2) Включай первую камеру, рендерь как обычно, включай вторую и рендерь с файрфреймом:
CameraProjMode(Камера2, 0)
CameraProjMode(Камера1, 1)
WireFrame(True)
RenderWorld()
CameraProjMode(Камера1, 0)
CameraProjMode(Камера2, 1)
WireFrame(False)
RenderWorld()
Возможно есть другой путь, для чего тебе это надо?
|
(Offline)
|
|
12.02.2007, 01:24
|
#3
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: 1 окно, 2 камеры
Сообщение от Cyan
1) Не стоит делать дополнительные камеры - это дополнительные проходы рендера и соотвественно меньшая производительность. Поэтому карту делать квадом перед камерой с рендером в его текстуру, для высокой скорости юзай либу FastImage на форуме blitz.pp.ru в разделе "исходники"
2) Включай первую камеру, рендерь как обычно, включай вторую и рендерь с файрфреймом:
CameraProjMode(Камера2, 0)
CameraProjMode(Камера1, 1)
WireFrame(True)
RenderWorld()
CameraProjMode(Камера1, 0)
CameraProjMode(Камера2, 1)
WireFrame(False)
RenderWorld()
Возможно есть другой путь, для чего тебе это надо?
|
Спасибо. Надо.. такс сейчас пример придумаю...
Во. Есть группа объектов (зданий, танков), выбранный объект(без окружения) дополнительно крутится в углу экрана с какими нибудь статсами (названия свойства) и доп эффектами (проволока + целшейдер). Это надо для пущей визуализации. Делается по совету холидела копированием его куда нить далеко(за границы мира) и установкой перед ним второй камеры.
Если просто врубать окно - то идет определенный диссонанс с имеющимся ГУИ и общим стилем.... Вот и пытаюсь как нибудь это безобразие подрехтовать.
собственно моделька низкополигональная так что 2-я камера много ресурсов кушать не должна.
|
(Offline)
|
|
12.02.2007, 02:19
|
#4
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Re: 1 окно, 2 камеры
Эм, непонял - зачем вторая камера? Ну скопируй ты этот мешь, отскаль его и помести его перед камерой (первой и единственной) и все дела. А делать "копированием его куда нить далеко" со второй камерой - это уже извращение чистой воды.
Еще лучше будет заранее наделать картинок (можно анимированных) и вместо меша выводить картинки с этим типом обьекта.
|
(Offline)
|
|
12.02.2007, 12:38
|
#5
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: 1 окно, 2 камеры
Сообщение от Cyan
Эм, непонял - зачем вторая камера? Ну скопируй ты этот мешь, отскаль его и помести его перед камерой (первой и единственной) и все дела. А делать "копированием его куда нить далеко" со второй камерой - это уже извращение чистой воды.
Еще лучше будет заранее наделать картинок (можно анимированных) и вместо меша выводить картинки с этим типом обьекта.
|
Спасибо за ответ!
по поводу 2 камеры. Ну это был самый простой вариант. И вполне укладывающийся в мои познания =)
А с рендерингом... хм, а пример есть какой нибудь? Точнее думается что он как то пересекается с вышеуказанным кодом... Боюсь начудить.
А вот картинки увы не катят, ибо в принципе отображаться должен ЛЮБОЙ объект, например только добавленный.
|
(Offline)
|
|
12.02.2007, 17:57
|
#6
|
Дэвелопер
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений (для 17 пользователей)
|
Re: 1 окно, 2 камеры
А если делать карту текстурой, тогда в 2Д неполучится(потомучто при повороте текстуры будет ГГлючить!!), прейдется делать 3Д(ну там спрайт вроде самый простой вариант), Так вот как сделать чтобы в углу показывался круг(небольшой, ну как в обычных играх), ну короче карта ведь большая, и её надо какбы этим кругом обрезать
ЗЫ. надеюсь вы поймете очем я, а есшо лутше если знаете как это сделать
|
(Offline)
|
|
12.02.2007, 21:28
|
#7
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: 1 окно, 2 камеры
Сообщение от vlad
А если делать карту текстурой, тогда в 2Д неполучится(потомучто при повороте текстуры будет ГГлючить!!), прейдется делать 3Д(ну там спрайт вроде самый простой вариант), Так вот как сделать чтобы в углу показывался круг(небольшой, ну как в обычных играх), ну короче карта ведь большая, и её надо какбы этим кругом обрезать
ЗЫ. надеюсь вы поймете очем я, а есшо лутше если знаете как это сделать
|
ну... если честно разговор не шел о карте...
но коль надо делать карту то самый простой вариант что приходит в голову:
Ты грузишь террейн из текстурки, так?. Берешь эту же текстуру и накладываешь на куб (короче любой мех, припивоченный к камере), сверху на него же альфа+бленд текстуру кружка = получаем круглую карту в углу экрана. Потом привязываем ее к осям (чтоб крутилась) и передаем координаты (чтобы скроллилась при перемещении)
|
(Offline)
|
|
15.02.2007, 16:07
|
#8
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: 1 окно, 2 камеры
дабы закрыть тему - код, нашел в семплах у себя.
Graphics3D 800,600
SetBuffer BackBuffer()
cone=CreateCone(6)
cube=CreateCube()
EntityColor cube,255,128,128
EntityColor cone,128,128,64
effectlight=CreateLight(1)
PositionEntity effectlight,40,30,40
PointEntity effectlight,cube
topcam=CreateCamera()
CameraViewport topcam,0,300,400,300
CameraProjMode topcam,2
sidecam=CreateCamera()
CameraViewport sidecam,0,0,400,300
CameraProjMode sidecam,2
frontcam=CreateCamera()
CameraViewport frontcam,400,0,400,300
CameraProjMode frontcam,2
rendercam=CreateCamera()
CameraViewport rendercam,400,300,400,300
PositionEntity cone,50,0,50
PositionEntity cube,52,0,50
PositionEntity topcam, 51,10,50
PositionEntity sidecam, 61,0,50
PositionEntity frontcam, 51,0,60
PositionEntity rendercam, 56,5,55
PointEntity topcam,cone
TurnEntity topcam,0,0,180
PointEntity sidecam,cone
PointEntity frontcam,cone
PointEntity rendercam,cone
EntityParent topcam,cone
EntityParent sidecam,cone
EntityParent frontcam,cone
EntityParent rendercam,cone
While Not KeyDown(1)
TranslateEntity cone,(KeyDown(208)-KeyDown(200)),0,0
TranslateEntity cone,0,0,(KeyDown(203)-KeyDown(205))
WireFrame True
HideEntity rendercam
ShowEntity sidecam
ShowEntity topcam
ShowEntity frontcam
RenderWorld
Flip
WireFrame False
ShowEntity rendercam
HideEntity sidecam
HideEntity topcam
HideEntity frontcam
RenderWorld
Flip
Wend
и для vlad'а примерчик карты в углу....
Graphics3D 800,600
SetBuffer BackBuffer()
Global camera = CreateCamera()
CameraRange camera,0.1,1000
Global light = CreateLight()
Global radar = CreateSphere(5)
EntityParent radar,camera
ScaleEntity radar,0.2,0.2,0.01
PositionEntity radar,0.7,-0.3,1
EntityFX radar,1
EntityColor radar,100,100,255
Global player_radar_ent = CreateSphere()
EntityParent player_radar_ent,radar
ScaleEntity player_radar_ent,0.05,0.05,0.05
PositionEntity player_radar_ent,0,0,-2
EntityFX player_radar_ent,1
Type entity
Field ent
Field radar_ent
Field e_type ; 0 = player, 1 = enemy
End Type
For loop = 1 To 20
e.entity = New entity
e\ent = CreateCube()
e\radar_ent = CreateCube()
EntityParent e\radar_ent,radar
EntityFX e\radar_ent,1
ScaleEntity e\radar_ent,0.05,0.05,0.05
PositionEntity e\ent,Rnd(-20,20),0,Rnd(-20,20)
HideEntity e\radar_ent
Next
While Not KeyHit(1)
If KeyDown(200) Then MoveEntity camera,0,0,0.1
If KeyDown(208) Then MoveEntity camera,0,0,-0.1
If KeyDown(203) Then TurnEntity camera,0,1,0
If KeyDown(205) Then TurnEntity camera,0,-1,0
updateradar()
UpdateWorld
RenderWorld
Flip
Wend
End
Function updateradar()
For e.entity = Each entity
If EntityDistance#(e\ent,camera) < 10 Then
ShowEntity e\radar_ent
x_dif# = EntityX(e\ent,True) - EntityX(camera,True)
z_dif# = EntityZ(e\ent,True) - EntityZ(camera,True)
PositionEntity e\radar_ent,x_dif/10,z_dif/10,-1
Else
HideEntity e\radar_ent
End If
Next
End Function
|
(Offline)
|
|
16.02.2007, 01:38
|
#9
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: 1 окно, 2 камеры
собсно можно и две текстуры на объект наложить.
нижнюю карту
верхнюю - круг, с блендом 2.
а потом PositionTexture нижнюю.
хотя сам не пробовал, но должно работать. 2 текстуры аппаратно поддерживают почти все видюхи (даже моя).
|
(Offline)
|
|
18.02.2007, 01:14
|
#10
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: 1 окно, 2 камеры
Во - вообще 1 в 1....
AppTitle "Minimap"
Dim GFX(3)
GFX(0) = 800
GFX(1) = 600
GFX(2) = 16
GFX(3) = 1
Graphics3D GFX(0),GFX(1),GFX(2),GFX(3)
SetBuffer BackBuffer()
Global FPS = MilliSecs()
Global player = CreateSphere()
PositionEntity player,0,2,0
Global cam1p = CreatePivot(Player)
TurnEntity cam1p,30,0,0
Global cam1 = CreateCamera(cam1p)
MoveEntity cam1,0,0,-5
Global l1 = CreateLight(cam1)
Global Boden = CreatePlane()
Global Boden_tex = CreateTexture(16,16)
SetBuffer TextureBuffer(Boden_tex) : Color 155,155,155 : Rect 0,0,16,16 : Color 255,0,0 : Rect 4,4,8,8 : Line 0,0,15,15 : Line 0,15,15,0 : Color 0,0,0 : Rect 0,0,16,16,0 : SetBuffer BackBuffer()
ScaleTexture Boden_tex,8,8
EntityTexture Boden,Boden_tex
;-man ben?igt fr diesen abschnitt die Media-datein--------
;-die man im Samples Order "/castle/castle" finden----------
;-diese einfach in einen "media"-order speichern und--------
;-den im Order abspeichern in dem sich diese Datei befindet-
Global world = CreateCone(); LoadMesh("media/castle1.x")
ScaleEntity world,0.2,0.2,0.2
PositionEntity world,0,-0.5,0
ScaleEntity player,2,2,2
PositionEntity player,0,2,-30
EntityType player,1
EntityType world,2
EntityType Boden,3
EntityRadius player,2
Collisions 1,2,2,3
Collisions 1,3,2,3
;-In der Hauptschleife folgt ein 2.Teil den man nicht------
;-ben?igt wenn man die Media-Dateien nicht haben----------
Const minimap_size = 250
Global minimap = CreateImage(minimap_size,minimap_size) : MaskImage minimap,10,20,30
Global minimap_cam = CreateCamera()
CameraViewport minimap_cam,GFX(0)-minimap_size,0,minimap_size,minimap_size
Global minimap_alpha = CreateImage(minimap_size,minimap_size) : MaskImage minimap_alpha,0,0,255
SetBuffer ImageBuffer(minimap_alpha) : Color 10,20,30 : Rect 0,0,minimap_size,minimap_size : Color 0,0,255 : Oval 0,0,minimap_size,minimap_size : Color 255,0,0 : Oval 0,0,minimap_size,minimap_size,0 : Oval 1,1,minimap_size-2,minimap_size-2,0 : Color 0,0,0 : Oval Minimap_size/2-4,minimap_size/2-4,8,8 : Rect minimap_size/2-2,minimap_size/2-7,4,3 : SetBuffer BackBuffer()
Repeat
If KeyDown(17) Then MoveEntity Player,0,0,+0.5
If KeyDown(31) Then MoveEntity Player,0,0,-0.5
If KeyDown(30) Then MoveEntity Player,-0.5,0,0
If KeyDown(32) Then MoveEntity Player,+0.5,0,0
PositionEntity minimap_cam,EntityX(player),100,EntityZ(player)
RotateEntity minimap_cam,90,EntityYaw(player),EntityRoll(player)
;-2.Teil l?chen wer keine Media-Datein will-
;-forsetzun von eben-------------------------
PositionEntity player,EntityX(player),EntityY(player)-0.2,EntityZ(player)
mxs = MouseXSpeed()
mys = MouseYSpeed()
TurnEntity player,0,-mxs,0
TurnEntity cam1p,mys,0,0
MoveMouse GFX(0)/2,GFX(1)/2
MouseXSpeed() : MouseYSpeed()
;--------------------------------------------
UpdateWorld
EntityOrder minimap_cam,-1
EntityOrder player,1
RenderWorld
CopyRect GFX(0)-minimap_size,0,minimap_size,minimap_size,0,0,BackBuffer(),ImageBuffer(minimap)
SetBuffer ImageBuffer(minimap) : DrawImage minimap_alpha,0,0 : SetBuffer BackBuffer()
EntityOrder minimap_cam,1
EntityOrder player,0
RenderWorld
DrawImage minimap,10,10
Color 255,255,255
Text 10,GFX(1)-30,"TrisRendered() = " + TrisRendered()
Text 10,GFX(1)-15,"F(rames)P(er)S(econd) = " + FPS_return()
Flip
Until KeyHit(1)
End
Function FPS_return()
If FPS < MilliSecs() Then currentframes = 1000/(MilliSecs() - FPS)
FPS = MilliSecs()
Return currentframes
End Function
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:44.
|