Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > [Direct3D] Додекаэдр, не отображаются грани...


Автор: Sfate 20.12.2009, 23:56
надо написать программу, которая будет выводить на экран крутящийся http://ru.wikipedia.org/wiki/Додекаэдр...
написал... но несколько граней отображаются неправильно или вообще не отображаются... smile 
Код

        float alpha, beta;

        alpha = sqrt(2.0f / (3.0f + sqrt(5.0f)));
        beta = 1.0f + sqrt(6.0f / (3.0f + sqrt(5.0f)) - 2.0f + 2.0f * sqrt(2.0f / (3.0f + sqrt(5.0f))));

        vertices[0] = s_vertex( sv.x - alpha * e, sv.y + 0 * e, sv.z + beta * e );
        vertices[1] = s_vertex( sv.x + alpha * e, sv.y + 0 * e, sv.z + beta * e );
        vertices[2] = s_vertex( sv.x - e, sv.y - e, sv.z - e );
        vertices[3] = s_vertex( sv.x - e, sv.y - e, sv.z + e );
        vertices[4] = s_vertex( sv.x - e, sv.y + e, sv.z - e );
        vertices[5] = s_vertex( sv.x - e, sv.y + e, sv.z + e );
        vertices[6] = s_vertex( sv.x + e, sv.y - e, sv.z - e );
        vertices[7] = s_vertex( sv.x + e, sv.y - e, sv.z + e );
        vertices[8] = s_vertex( sv.x + e, sv.y + e, sv.z - e );
        vertices[9] = s_vertex( sv.x + e, sv.y + e, sv.z + e );
        vertices[10] = s_vertex( sv.x + beta * e, sv.y + alpha * e, sv.z - 0 * e );
        vertices[11] = s_vertex( sv.x + beta * e, sv.y - alpha * e, sv.z - 0 * e );
        vertices[12] = s_vertex( sv.x - beta * e, sv.y + alpha * e, sv.z + 0 * e );
        vertices[13] = s_vertex( sv.x - beta * e, sv.y - alpha * e, sv.z + 0 * e );
        vertices[14] = s_vertex( sv.x - alpha * e, sv.y + 0 * e, sv.z - beta * e );
        vertices[15] = s_vertex( sv.x + alpha * e, sv.y - 0 * e, sv.z - beta * e );
        vertices[16] = s_vertex( sv.x - 0 * e, sv.y + alpha * e, sv.z + beta * e );
        vertices[17] = s_vertex( sv.x - 0 * e, sv.y + beta * e, sv.z - alpha * e );
        vertices[18] = s_vertex( sv.x + 0 * e, sv.y - beta * e, sv.z + alpha * e );
        vertices[19] = s_vertex( sv.x + 0 * e, sv.y - beta * e, sv.z - alpha * e );
...
        //1
        indices[0] = 9; indices[1] = 16; indices[2] = 1;
        indices[3] = 16; indices[4] = 0; indices[5] = 1;///fail
        indices[6] = 16; indices[7] = 5; indices[8] = 0;
        //2
        indices[9] = 18; indices[10] = 7; indices[11] = 1; 
        indices[12] = 18; indices[13] = 1; indices[14] = 3;//ok(?)
        indices[15] = 3; indices[16] = 1; indices[17] = 0;
        //3
        indices[18] = 7; indices[19] = 11; indices[20] = 10;
        indices[21] = 7; indices[22] = 10; indices[23] = 1;///ok
        indices[24] = 1; indices[25] = 10; indices[26] = 9;
        //4
        indices[27] = 6; indices[28] = 11; indices[29] = 7;
        indices[30] = 6; indices[31] = 7; indices[32] = 19;///ok
        indices[33] = 19; indices[34] = 7; indices[35] = 18;
        //5
        indices[36] = 9; indices[37] = 10; indices[38] = 8;
        indices[39] = 9; indices[40] = 8; indices[41] = 16;///fail
        indices[42] = 16; indices[43] = 8; indices[44] = 17;
        //6
        indices[45] = 19; indices[46] = 2; indices[47] = 14;
        indices[48] = 19; indices[49] = 14; indices[50] = 6;///ok
        indices[51] = 6; indices[52] = 14; indices[53] = 15;
        //7
        indices[54] = 14; indices[55] = 2; indices[56] = 13;
        indices[57] = 14; indices[58] = 13; indices[59] = 4;///ok
        indices[60] = 4; indices[61] = 13; indices[62] = 12;
        //8
        indices[63] = 3; indices[64] = 13; indices[65] = 2;
        indices[66] = 3; indices[67] = 2; indices[68] = 19;///ok
        indices[69] = 18; indices[70] = 3; indices[71] = 19;
        //9
        indices[72] = 3; indices[73] = 0; indices[74] = 5;
        indices[75] = 13; indices[76] = 3; indices[77] = 5;///ok
        indices[78] = 13; indices[79] = 5; indices[80] = 12;
        //10
        indices[81] = 11; indices[82] = 6; indices[83] = 15;
        indices[84] = 11; indices[85] = 15; indices[86] = 8;///ok
        indices[87] = 11; indices[88] = 8; indices[89] = 10;
        //11
        indices[90] = 14; indices[91] = 4; indices[92] = 17;
        indices[93] = 14; indices[94] = 17; indices[95] = 15;///fail
        indices[96] = 15; indices[97] = 17; indices[98] = 8;
        //12
         indices[99] = 16; indices[100] = 17; indices[101] = 5;
        indices[102] = 5; indices[103] = 17; indices[104] = 12;///fail
        indices[105] = 12; indices[106] = 17; indices[107] = 4;


в куске кода: vertices - массив вершин; s_vertex - функция, куда передаются значения sv.x - e и т.п.(положения вершин); indices - массив индексов для создания граней... там где в камменте fail, те грани не отображаются...
проект: http://rghost.ru/731081 (4 МБ)
надеюсь, что кто нибудь поможет smile 

Автор: Sfate 22.12.2009, 20:22
все проблема решена... smile 
перепутал координаты 16й вершины))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)