3 registered members (TipmyPip, AndrewAMD, dBc),
18,430
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Real DX9 Reflection
[Re: MMike]
#37722
12/15/04 07:21
12/15/04 07:21
|
Joined: Jul 2004
Posts: 1,710
MMike
Serious User
|
Serious User
Joined: Jul 2004
Posts: 1,710
|
OKay now im done with the size problem.. the script does a 128 cubemap ( its enough for now) and it work 100%
Now. I would like to take a screenshot 4 seconds in 4 seconds... and that overwrite them ..instead of saving as shot1, shot2, shot3 and so..
Anyone??
Last edited by Unknot; 12/15/04 07:43.
|
|
|
Re: Real DX9 Reflection
[Re: MMike]
#37723
12/15/04 08:18
12/15/04 08:18
|
Joined: Sep 2004
Posts: 1,214 Austin, Texas
Josh_Arldt
Senior Developer
|
Senior Developer
Joined: Sep 2004
Posts: 1,214
Austin, Texas
|
Use what Pappenheimer suggested. This saves the bitmaps as a cubemap instead of shot1, shot2 ect...
savedir="output"; var_nsave fh; bmap* canvas; bmap* b_render1; bmap* b_render2; bmap* b_render3; bmap* b_render4; bmap* b_render5; bmap* b_render6; var cubenumber = 0; var directions[18] = 180, 0, 0, 90, 0, 0, 0, 0, 0, -90, 0, 0, 90, -90, 0, 90, 90, 0; string tempstring1; string tempstring2; string _ts_;
//----------------------------------------------------------------------------- write_cubemap function write8(byte) // write char { file_asc_write(fh, byte); }
function write16(short) // write unsigned short { file_asc_write(fh, short&255); file_asc_write(fh, (short>>8)&255); }
function str_padding(str, number, padding) { str_for_num(_ts_, number); var i = 0; i = padding - str_len(_ts_); while(i > 0) { str_cat(str, "0"); i-=1; } str_cat(str, _ts_); }
function write_cubemap() { var i; var xx; var yy; var format; var pixel; var pixelalpha; var canvas_size[2];
canvas_size.x = bmap_width(b_render1); canvas_size.y = bmap_height(b_render1); format = bmap_lock(b_render1, 0); bmap_lock(b_render2, 0); bmap_lock(b_render3, 0); bmap_lock(b_render4, 0); bmap_lock(b_render5, 0); bmap_lock(b_render6, 0);
str_cpy(tempstring1, "cubemap"); str_padding(tempstring1, cubenumber, 4); str_cat(tempstring1, "+6.tga"); fh = file_open_write(tempstring1); cubenumber+=1; //--------------------------------------------------------write header write8(0); write8(0); write8(2); // image type write16(0); write16(0); write8(0); write16(0); write16(0); write16(canvas_size.x * 6); // width write16(canvas_size.y); // height write8(24); // color depth write8(0); //--------------------------------------------------------write image data yy = canvas_size.y - 1; while(yy >= 0) { i = 0; while(i < 6) { if(i==0){canvas=b_render1;} if(i==1){canvas=b_render2;} if(i==2){canvas=b_render3;} if(i==3){canvas=b_render4;} if(i==4){canvas=b_render5;} if(i==5){canvas=b_render6;} xx = 0; while(xx < canvas_size.x) { pixel = pixel_for_bmap(canvas, xx, yy); pixel_to_vec(temp, pixelalpha, format, pixel); write8(temp.x); // b write8(temp.y); // g write8(temp.z); // r xx+=1; } i+=1; } yy-=1; } file_close(fh); bmap_unlock(b_render1); bmap_unlock(b_render2); bmap_unlock(b_render3); bmap_unlock(b_render4); bmap_unlock(b_render5); bmap_unlock(b_render6); }
//----------------------------------------------------------------------------- capture_cubemap function capture_cubemap { var old_arc; var old_x; var old_y; var old_screen;
b_render1 = bmap_create("render.tga"); // use a 256x256 tga for example -> determines cube map size b_render2 = bmap_create("render.tga"); b_render3 = bmap_create("render.tga"); b_render4 = bmap_create("render.tga"); b_render5 = bmap_create("render.tga"); b_render6 = bmap_create("render.tga");
old_arc = camera.arc; old_x = screen_size.x; old_y = screen_size.y; old_screen = video_screen;
camera.arc = 90; video_set(256, 256, 32, 2); // should be same resolution as render.tga
freeze_mode = on; vec_set(camera.pan, directions[0]); wait(1); bmap_for_screen(b_render1,1,0); vec_set(camera.pan, directions[3]); wait(1); bmap_for_screen(b_render2,1,0); vec_set(camera.pan, directions[6]); wait(1); bmap_for_screen(b_render3,1,0); vec_set(camera.pan, directions[9]); wait(1); bmap_for_screen(b_render4,1,0); vec_set(camera.pan, directions[12]); wait(1); bmap_for_screen(b_render5,1,0); vec_set(camera.pan, directions[15]); wait(1); bmap_for_screen(b_render6,1,0); freeze_mode = off;
wait(1); write_cubemap();
wait(1); camera.arc = old_arc; video_set(old_x, old_y, 32, old_screen); }
on_c=capture_cubemap;
|
|
|
Re: Real DX9 Reflection
[Re: Joey]
#37731
12/16/04 00:18
12/16/04 00:18
|
Joined: May 2002
Posts: 2,541 Berlin
EX Citer
Expert
|
Expert
Joined: May 2002
Posts: 2,541
Berlin
|
I am using as a sky cube a 64x64per square or something (very small), and it´s looking good even if it is scaled very large. So the mirror map wouldn´t have to be big ether. maybe 32x32 per square would be enough.
EX Citer
:L
|
|
|
|