В opengl (lwjgl для java) использование glu.Sphere.Sphere() может очень легко сгенерировать сферу, но после нескольких десятков сфер с разрешением 32x32 она становится очень медленной. Теперь я думаю о том, чтобы использовать буферы для отправки вершин + цветов + нормалей + индексов только один раз и изменять их с помощью opencl.Создание сферы вручную
Вопрос: Если я беру начало как (0,0,0) в качестве центра сферы, могу ли я выбрать нормаль, равную ее вершине?
Пример: Северный полюс сферы - это вершина = (0,1,0), так может ли его нормаль поверхности (0,1,0) снова? Можем ли мы сделать то же самое для всех вершин? Как насчет порядка элементов массива, если мы можем оптимизировать его? Угадание треугольной вершины может использоваться многими соседними треугольниками. Я начинаю, поэтому мне нужен некоторый указатель на использование эффективной функции drawElementArray и генерации индекса.
Примечание: Im сохраняет мой процессор на частоте 1400 МГц, поэтому он не может обрабатывать много вычислений на стороне хоста, а opengl не принимает многопоточный рисунок сфер.
Следуя предложению Валентина, я открылся внутри glu и нашел, что это рисование элемента за элементом. Будет использовать это для генерации буфера.
if (this.drawStyle == 100010)
{
GL11.glBegin(0);
if (normals)
GL11.glNormal3f(0.0F, 0.0F, nsign);
GL11.glVertex3f(0.0F, 0.0F, radius);
if (normals)
GL11.glNormal3f(0.0F, 0.0F, -nsign);
GL11.glVertex3f(0.0F, 0.0F, -radius);
for (int i = 1; i < stacks - 1; i++) {
float rho = i * drho;
for (int j = 0; j < slices; j++) {
float theta = j * dtheta;
float x = cos(theta) * sin(rho);
float y = sin(theta) * sin(rho);
float z = cos(rho);
if (normals)
GL11.glNormal3f(x * nsign, y * nsign, z * nsign);
GL11.glVertex3f(x * radius, y * radius, z * radius);
}
}
GL11.glEnd();
Да, вы правы. Он рисует элемент за элементом. Будет использовать это, спасибо. У вас есть подсказка для индексов элементов для оптимизации? –
Использует ли массив вершинного индекса большую производительность? –
Ну, используя Array Elements, это действительно зависит от модели и ее сложности. Хотя для простой сферы я бы просто использовал обычный VBO и сохранил все. – Vallentin