Пожалуй начнем, с того, что эта реализация отлично оптимизирована под мобильные платформы, поэтому массивы вершин мы можем задавать только с помощью целых чисел. Это конечно правильно, но во многом неудобно. Поэтому «укрупним» масштаб, чтобы после приведения не получить нули.
float V = 5.8778524f; float W = 8.0901700f;// две характерные точки.
Далее следует обратить внимание на то, что массивы содержащие нужные нам значения создаются заранее.
// Создаем объект VertexBuffer VertexBuffer vb = iVb = new VertexBuffer();
VertexBuffer vb1 = iVb1 = new VertexBuffer();
vb.setPositions(vertArray, 1.0f, null);
vb.setNormals(normArray);
vb.setDefaultColor(0x00FF0000);
vb1.setPositions(vertArray, 1.0f, null);
vb1.setNormals(normArray1);
vb1.setDefaultColor(0x00FF0000);
Этот подход похож на реализацию в DX. И как было сказано ранее, реализация open GL EX не поддерживает списков, которые позволяют сформировать массивы заранее.
Интересно будет сравнить FPS. И это мы сделаем в уроке 4(эффект флага), когда пересчитывать координаты придется делать динамически. Далее все аналогично уроку 1.
В функции paint меняем значения.
//iG3D.render(iVb, iIb, iAppearance, iTransform);// рисуем икосаэдр - грубый расчет нормалей iG3D.render(iVb1, iIb, iAppearance, iTransform); //рисуем икосаэдр - точный расчет нормалей
|