Отображение 100 плавающих кубов с использованием DirectX ИЛИ OpenGL

Я хотел бы отобразить 100 плавающих кубов, используя DirectXили OpenGL.

Я ищу либо образец исходного кода, либо описание техники. У меня проблемы с получением более одного куба для правильного отображения.

Я прочесал сеть для хорошей серии учебных пособий и хотя они говорят о том , как сделать 3Dпримитивы, что я не могу найти информацию о том , как сделать большое количество из 3Dпримитивов - cubes, spheres, pyramidsи так далее.

4.08.2008 06:51:20
3 ОТВЕТА

Вы говорите, у вас достаточно проблем с отображением одного куба ... поэтому я не уверен, есть ли у вас один для отображения или нет.

По сути ... поместите код для написания куба в одну функцию, затем просто вызовите эту функцию 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();
         }
    }              
}

Это основной план того, как вы могли бы сделать это. Если вы хотите что-то более эффективное, взгляните на списки отображения, как только у вас есть основы :)

8
5.08.2008 11:54:57

Просто используйте glTranslatef (или эквивалент DirectX), чтобы нарисовать куб, используя тот же код, но перемещая относительную точку, где вы его рисуете. Возможно, есть лучший способ сделать это, хотя я довольно новичок в OpenGL. Обязательно установите точку обзора, чтобы вы могли видеть их все.

7
4.08.2008 09:04:01

Да, если бы вы работали эффективно, вы бы бросили все в один и тот же вершинный буфер, но я не думаю, что отрисовка 100 кубов подтолкнет любой графический процессор, произведенный за последние 5 лет, так что вы должны быть в порядке, следуя приведенным выше советам.

Напишите базовый проход через вершинный шейдер, затеняйте как хотите в пиксельном шейдере. Либо передайте матрицу мира и выполните перевод в вершинном шейдере, либо просто вычислите позиции вершин мирового пространства на стороне процессора (делайте это, если ваши кубы будут оставаться фиксированными).

Вы можете получить фантазию и создать геометрию и т. Д., Но сначала начните с основ.

6
19.08.2008 11:12:23