Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Генерация шара равносторнними треугольниками

Генерация шара равносторнними треугольниками

aziНовичокwww10 фев. 20039:20#0
<Сабж>


Если можно, то как генерить шар(радиус пусть равен 1) итеративно (начиная с минимальной детализации, а потом разбивая нужные треугольники), если нет, то хотябы с заданной точностью(кол-во треуг или длинна их грани?

Заранее спасибо.

SwenПостоялецwww10 фев. 20039:38#1
Очень просто:

for (B=-90;B<=90;B+=dB)
  for (L=0;L<=360;L+=dL)
{
x = R * cos(B)*sin(L);
y = R * cos(B) *cos(L);
z = R * sin(B);
.......
}

dB, dL показывают степень детализации(шаг) чем меньше тем более "гладкий" шар

ячейки четырёхугольные.Не помню надо градусы в радианы переводить.

streamПостоялецwww10 фев. 200310:07#2
пример из OpenGL programming guide:
//Drawing an Icosahedron

#define X .525731112119133606
#define Z .850650808352039932

static GLfloat vdata[12][3] = {
    {-X, 0.0, Z}, {X, 0.0, Z}, {-X, 0.0, -Z}, {X, 0.0, -Z},
    {0.0, Z, X}, {0.0, Z, -X}, {0.0, -Z, X}, {0.0, -Z, -X},
    {Z, X, 0.0}, {-Z, X, 0.0}, {Z, -X, 0.0}, {-Z, -X, 0.0}
};

static GLuint tindices[20][3] = {
    {0,4,1}, {0,9,4}, {9,5,4}, {4,5,8}, {4,8,1},
    {8,10,1}, {8,3,10}, {5,3,8}, {5,2,3}, {2,7,3},
    {7,10,3}, {7,6,10}, {7,11,6}, {11,0,6}, {0,1,6},
    {6,1,10}, {9,0,11}, {9,11,2}, {9,2,5}, {7,2,11}
};

glBegin(GL_TRIANGLES);
for (int i = 0; i < 20; i++) {
    glVertex3fv(&vdata[tindices[i][0]][0]);
    glVertex3fv(&vdata[tindices[i][1]][0]);
    glVertex3fv(&vdata[tindices[i][2]][0]);
}
glEnd();
beavisПостоялецwww10 фев. 200310:21#3
Ну и на десерт вариант для D3D8:
LPD3DXMESH  pMesh;  // здесь будет наша сфера (именно сфера, а не геосфера)
D3DXCreateSphere(g_pd3dDevice, fRadius, nSlices, nStacks, &pMesh, NULL);

...
// теперь рисуем
pMesh->DrawSubset(0);
aziНовичокwww10 фев. 200311:04#4
Я же говорю о равносторонних треугольниках (для тех кто не знает - это такие у которых все три стороны равны)

Я не уверен, но возможно, такая сфера называется геосферой

CybeRUSПостоялецwww10 фев. 200313:15#5
azi
Есть два способа:
1. рекурсией разбивать треугольник на 4 треугольника.
2. Сразу по сфере строить треугольники.

1-й способ проще, но там много нюансов и сферу трудно получить.
2-й способ сложне, но качество лучше

KasheyПостоялецwww10 фев. 200314:44#6
первый способ есть по сути атишный труформ. так что при желании можно его на железо переложить.
ZПостоялецwww10 фев. 200315:11#7
У второго способа качество лучше, а код можно вътащить из SDK МAX-a (та же geosphere).

/ Форум / Программирование игр / Графика

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр