Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
зачем то сделал класс который трехмерный массив из 0 и 1 рисует кубиками, одной поверхностью...
float rand(float min, float max)
{
return (max-min)*rand()/(float)RAND_MAX;
}
class chunk_Surf
{
/*
Это из трехмерного массива может сделать меш
*/
public:
//variables place
Handle mesh;
Handle surf;
Handle tex;
int size;
int * test_data;
//func place
chunk_Surf()
{
tex=xLoadTexture("media/1.jpg");
size = 16;
test_data = new int [ size * size * size ];
for ( int i = 0; i < size * size * size; i ++ )
{
test_data[ i ] =(int) floor(rand( 0 , 2 ));
}
mesh = xCreateMesh();
surf = xCreateSurface(mesh);
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
for(int k=0; k<size; k++)
{
make_cube(i,j,k);
}}}
xPositionEntity(mesh,3,0,3);
xEntityTexture(mesh,tex);
}
void make_cube(int a, int b, int c){
{
int _x=0,_y=0,_z=1;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a, b, c+1);
int v1 = xAddVertex(surf, a+1, b, c+1);
int v2 = xAddVertex(surf, a, b+1, c+1);
int v3 = xAddVertex(surf, a+1, b+1, c+1);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v1,v2);
xAddTriangle(surf,v3,v2,v1);
}
_x=0,_y=0,_z=-1;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a, b, c);
int v1 = xAddVertex(surf, a+1, b, c);
int v2 = xAddVertex(surf, a, b+1, c);
int v3 = xAddVertex(surf, a+1, b+1, c);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v2,v1);
xAddTriangle(surf,v3,v1,v2);
}
_x=0,_y=1,_z=0;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a, b+1, c);
int v1 = xAddVertex(surf, a+1, b+1, c);
int v2 = xAddVertex(surf, a, b+1, c+1);
int v3 = xAddVertex(surf, a+1, b+1, c+1);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v2,v1);
xAddTriangle(surf,v3,v1,v2);
}
_x=0,_y=-1,_z=0;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a, b, c);
int v1 = xAddVertex(surf, a+1, b, c);
int v2 = xAddVertex(surf, a, b, c+1);
int v3 = xAddVertex(surf, a+1, b, c+1);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v1,v2);
xAddTriangle(surf,v3,v2,v1);
}
_x=1,_y=0,_z=0;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a+1, b, c);
int v1 = xAddVertex(surf, a+1, b+1, c);
int v2 = xAddVertex(surf, a+1, b, c+1);
int v3 = xAddVertex(surf, a+1, b+1, c+1);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v1,v2);
xAddTriangle(surf,v3,v2,v1);
}
_x=-1,_y=0,_z=0;
if(diff(a,b,c,_x,_y,_z)==1)
{
int v0 = xAddVertex(surf, a, b, c);
int v1 = xAddVertex(surf, a, b+1, c);
int v2 = xAddVertex(surf, a, b, c+1);
int v3 = xAddVertex(surf, a, b+1, c+1);
xVertexNormal(surf,v0,_x,_y,_z);
xVertexNormal(surf,v1,_x,_y,_z);
xVertexNormal(surf,v2,_x,_y,_z);
xVertexNormal(surf,v3,_x,_y,_z);
xVertexTexCoords(surf,v0,0,0);
xVertexTexCoords(surf,v1,1,0);
xVertexTexCoords(surf,v2,0,1);
xVertexTexCoords(surf,v3,1,1);
xAddTriangle(surf,v0,v2,v1);
xAddTriangle(surf,v3,v1,v2);
}
}
}
int diff (int i , int j , int k, int _x ,int _y, int _z)
{
//адрес ячейки , нормаль смещения
int current_cell = test_data[i*size*size + j*size +k];
int disp_cell = 0;
if(current_cell!=0){
int x = i+_x;
int y = j+_y;
int z = k+_z;
if(x>=0 && y>=0 && z>=0){
if(x<size && y<size && z<size){
disp_cell = test_data[x*size*size + y*size +z];
}}
}
return current_cell-disp_cell;
}
};
|