forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Скриншот в игре (http://forum.boolean.name/showthread.php?t=5047)

Maxxx.!!!. 17.11.2007 21:02

Скриншот в игре
 
Сразу не пинать, про SaveBuffer(FrontBuffer(), "pic.bmp") я знаю. Так вот. Как реализовать вот что:
1)делается скриншот экрана
2)он сохраняется сразу в текстуру размером 512х256, т.е. чтобы физически файл с ней не создавался, а как при createTexture
3)эта текстура натягивается на меш


Я с CreateTexture и буферами пробовал повозиться, но довозился только до того, что текст перестал отображаться на экране, зато на этом меше на черном фоне его видно. :-)

HolyDel 17.11.2007 21:24

Re: Скриншот в игре
 
редериш мир в тексу.
тексу натягиваеш, и наслаждаешся. по порядку:

CameraViewport cam,0,0,512,256
RenderWorld
CopyRect 0,0,512,256,0,0,BackBuffer(),TextureBuffer(MyLikes tTex)

entitytexture myLikestMesh,myLikestTex

в чем проблема то?
Да, текса должна быть с флагом 256, а то узнаеш что есть великие тормоза.

Maxxx.!!!. 17.11.2007 22:00

Re: Скриншот в игре
 
А то что ты мне написал - это не особо тормознуто?

Я сделал так:

EKt=CreateTexture (512,256,256);создаем текстуру
MoveEntity cam,0,5,0;перемещаем камеру, чтобы все было видно
CameraViewport cam,0,0,512,256;устанавливаем размер камеры
RenderWorld;рендерим мир
CopyRect 0,0,512,256,0,0,BackBuffer(),TextureBuffer(EKt);копируем в тексу скрин
EntityTexture EK,EKt;лепим на экран
MoveEntity cam,0,-5,0;возвращаем камеру на место
CameraViewport CAM,0,0,800,600;нормальный размер камеры

HolyDel 17.11.2007 22:28

Re: Скриншот в игре
 
поставишь флаг 256 будет наиболее быстрым родным способом блица.
быстрее - олько рендер непосредственно в текстуру (Ашадоу или другие надстройки)

Maxxx.!!!. 17.11.2007 22:39

Re: Скриншот в игре
 
EKt=CreateTexture (512,256,256) - так ведь надо здесь этот флаг ставить?

HolyDel 17.11.2007 22:52

Re: Скриншот в игре
 
ЭЭЭ. ты каждый кадр создаеш тексу?
почему не рендериш мир в нее?

Maxxx.!!!. 17.11.2007 23:10

Re: Скриншот в игре
 
Цитата:

Сообщение от HolyDel
ЭЭЭ. ты каждый кадр создаеш тексу?
почему не рендериш мир в нее?

Теперь я CreateTexture поставил вне цикла. Т.е. она один раз только создается. У меня эта картинка создается один раз в 10 секунд.
P.S. А учитывая, что флаг стоит 256, то FreeTexture делать не надо?

HolyDel 17.11.2007 23:26

Re: Скриншот в игре
 
EKt=CreateTexture (512,256,256)

игровой_цикл

CameraViewport cam,0,0,512,256
RenderWorld
CopyRect 0,0,512,256,0,0,BackBuffer(),TextureBuffer(EKt);
EntityTexture EK,EKt


CameraViewport cam,0,0,800,600
RenderWorld

конец_игрвоого_цикла

Maxxx.!!!. 17.11.2007 23:28

Re: Скриншот в игре
 
Так я и сделал. Спасибо!

dector 24.12.2007 01:34

Re: Скриншот в игре
 
у меня при команде
If KeyDown(62) SaveBuffer(FrontBuffer(), "img.bmp")
создается черная бмпшка(

HolyDel 24.12.2007 01:58

Re: Скриншот в игре
 
dector, а ты в каком месте ету команду вызываеш?
надо перед flip.

dector 24.12.2007 02:26

Re: Скриншот в игре
 
мня... опять сплошил я.
спасибо. щас на стенке запишу - "Работа с графикой и текстом - перед Flip()"

Сделал. заценил. Понравилось! Теперь можно скрины штамповать. Жаль незачем( :(


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot