///*************************
/// cubemap rendering bug??
#include <acknex.h>
#include <default.c>
#include <mtlFx.c>
BMAP* cubemap ;
var res = 128;
typedef struct {VIEW* front;VIEW* left;VIEW* back;VIEW* right;VIEW* top;VIEW* down;} CUBEV;
CUBEV cuberender;
function create_cube_render (CUBEV* dest)
{
cubemap = bmap_createblack (res*6,res,16);
bmap_to_cubemap (cubemap);
dest.back = view_create(1);
dest.back.bmap = cubemap;
dest.back.arc = 90;
dest.back.size_x = res;
dest.back.size_y = res;
dest.back.pos_x = 0;
dest.back.pos_y = 0;
vec_set(dest.back.pan,vector(180,0,0));
set(dest.back,SHOW | NOFLAG1);
dest.left = view_create(1);
dest.left.bmap = cubemap;
dest.left.arc = 90;
dest.left.size_x = res;
dest.left.size_y = res;
dest.left.pos_x = res;
dest.left.pos_y = 0;
vec_set(dest.left.pan,vector(90,0,0));
set(dest.left,SHOW | NOFLAG1);
dest.front = view_create(1);
dest.front.bmap = cubemap;
dest.front.arc = 90;
dest.front.size_x = res;
dest.front.size_y = res;
dest.front.pos_x = res*2;
dest.front.pos_y = 0;
vec_set(dest.front.pan,vector(0,0,0));
set(dest.front,SHOW | NOFLAG1);
dest.right = view_create(1);
dest.right.bmap = cubemap;
dest.right.arc = 90;
dest.right.size_x = res;
dest.right.size_y = res;
dest.right.pos_x = res*3;
dest.right.pos_y = 0;
vec_set(dest.right.pan,vector(-90,0,0));
set(dest.right,SHOW | NOFLAG1);
dest.down = view_create(1);
dest.down.bmap = cubemap;
dest.down.arc = 90;
dest.down.size_x = res;
dest.down.size_y = res;
dest.down.pos_x = res*4;
dest.down.pos_y = 0;
vec_set(dest.down.pan,vector(90,-90,0));
set(dest.down,SHOW | NOFLAG1);
dest.top = view_create(1);
dest.top.bmap = cubemap;
dest.top.arc = 90;
dest.top.size_x = res;
dest.top.size_y = res;
dest.top.pos_x = res*5;
dest.top.pos_y = 0;
vec_set(dest.top.pan,vector(90,90,0));
set(dest.top,SHOW | NOFLAG1);
}
MATERIAL* mtl_envMap1 =
{
event = mtl_envmap_view;
effect = "envMap.fx";
flags = ENABLE_VIEW;
}
action setcubemap()
{
my.ambient = 40;set(my,FLAG1);
vec_set(my.scale_x,vector(8,8,8));vec_set(camera.x,my.x);
create_cube_render (cuberender); // render 6 views into cubemap
mtl_envMap1.skin1 = cubemap;
my.material = mtl_envMap1;
while (1)
{
if (key_e) vec_set(my.x,camera.x);
vec_set(cuberender.front.x,my.x);
vec_set(cuberender.right.x,my.x);
vec_set(cuberender.back.x,my.x);
vec_set(cuberender.left.x,my.x);
vec_set(cuberender.top.x,my.x);
vec_set(cuberender.down.x,my.x);
wait(1);
}
}
void main ()
{
level_load ("map.wmb");def_move();
ent_createlayer ("blood_gorge+6.tga", SKY | CUBE | VISIBLE,0);
while (1)
{
draw_quad (cubemap,nullvector,0,0,0,0,100,0);
wait(1);
}
}