Сведения о вопросе

Henry

16:03, 1st July, 2020

Теги

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

Просмотров: 575   Ответов: 3

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

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

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



  Сведения об ответе

ASER

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

fo_I_K

18:03, 1st July, 2020

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


  Сведения об ответе

davran

18:03, 1st July, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться