Я хотел бы отобразить 100 плавающих кубов, используя DirectX
или OpenGL
.
Я ищу либо образец исходного кода, либо описание техники. У меня проблемы с получением более одного куба для правильного отображения.
Я прочесал сеть для хорошей серии учебных пособий и хотя они говорят о том , как сделать 3D
примитивы, что я не могу найти информацию о том , как сделать большое количество из 3D
примитивов - cubes
, spheres
, pyramids
и так далее.
Вы говорите, у вас достаточно проблем с отображением одного куба ... поэтому я не уверен, есть ли у вас один для отображения или нет.
По сути ... поместите код для написания куба в одну функцию, затем просто вызовите эту функцию 100 раз.
void DrawCube()
{
//code to draw the cube
}
void DisplayCubes()
{
for(int i = 0; i < 10; ++i)
{
for(int j = 0; j < 10; ++j)
{
glPushMatrix();
//alter these values depending on the size of your cubes.
//This call makes sure that your cubes aren't drawn overtop of each other
glTranslatef(i*5.0, j*5.0, 0);
DrawCube();
glPopMatrix();
}
}
}
Это основной план того, как вы могли бы сделать это. Если вы хотите что-то более эффективное, взгляните на списки отображения, как только у вас есть основы :)
Просто используйте glTranslatef (или эквивалент DirectX), чтобы нарисовать куб, используя тот же код, но перемещая относительную точку, где вы его рисуете. Возможно, есть лучший способ сделать это, хотя я довольно новичок в OpenGL. Обязательно установите точку обзора, чтобы вы могли видеть их все.
Да, если бы вы работали эффективно, вы бы бросили все в один и тот же вершинный буфер, но я не думаю, что отрисовка 100 кубов подтолкнет любой графический процессор, произведенный за последние 5 лет, так что вы должны быть в порядке, следуя приведенным выше советам.
Напишите базовый проход через вершинный шейдер, затеняйте как хотите в пиксельном шейдере. Либо передайте матрицу мира и выполните перевод в вершинном шейдере, либо просто вычислите позиции вершин мирового пространства на стороне процессора (делайте это, если ваши кубы будут оставаться фиксированными).
Вы можете получить фантазию и создать геометрию и т. Д., Но сначала начните с основ.