Тема: Странное.
Показать сообщение отдельно
Старый 02.11.2012, 01:59   #467
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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;
    }



};
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 871
Размер:	130.2 Кб
ID:	17969  
(Offline)
 
Ответить с цитированием