Определение и управление трехмерным объектом с определенными поворотами - PullRequest
0 голосов
/ 14 февраля 2011

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

enter image description here

Я включил код для разрыва одной спирали (все остальные одинаковые).

Было бы полезно хранить геометрию моих объектов в массивах вершин вместо того, чтобы каждый раз отображать их отдельно для 7 разных цветов?(Каждая спираль состоит из 36 000 вершин, и я обеспокоен тем, что массивы могут стать достаточно большими, чтобы вызвать серьезные проблемы с производительностью?)

Я понимаю, что матричный стек - это структура данных для выполнения нескольких последовательных отдельных преобразований для определенных объектов,но я не уверен, как именно указать, чтобы наклонить всю мою спираль?(glRotatef по какой-то причине фактически не наклоняет спирали)

/*HELIX RENDERING*/

glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(0.0, 100.0, -5.0);  //Move Position
glRotatef(90.0, 0.0, 0.0, 0.0);
glBegin(GL_LINE_STRIP);

for(theta = 0.0; theta <= 360.0; theta += 0.01) {   
    x = r*(cosf(theta));
    y = r*(sinf(theta));
    z = c*theta;
    glVertex3f(x,y,z);
    glColor3f(1.0, 1.0, 0.0);           
}

glEnd();
glPopMatrix(); 

1 Ответ

0 голосов
/ 15 февраля 2011

Было бы полезно хранить геометрию моих объектов в вершинных массивах вместо того, чтобы визуализировать их каждый раз отдельно для 7 разных цветов?(Каждая спираль состоит из 36 000 вершин, и я обеспокоен тем, что массивы могут стать достаточно большими, чтобы вызвать серьезные проблемы с производительностью?

Рисование геометрии с использованием массивов вершин всегда имеет смысл. И в вашем случае, издержки вызвалиэти 36k * (5 операций с плавающим указателем + 2 вызова функций) серьезно повлияют на вашу производительность. Использование вершинных массивов даст вам увеличение производительности в 100 раз, просто потому, что вы не воссоздаете данные каждый вызов.

Вы также можете быть заинтересованы в том, чтобы не использовать линии, поскольку вы не можете их затенить каким-либо полезным способом. Я бы сделал эти спирали рендерингом, создав базовые строительные блоки, созданные из эллипсов, вытянутых вдоль спирали. Один основной блок дляintra helix и две заглавные буквы. Хиральность легко изменяется путем зеркального отражения вдоль одной оси. С современными реализациями OpenGL вы можете реализовать инстанцирование на элементе intra-helix для дальнейшего увеличения производительности.

Если вы хотите согнуть спиральЯ бы сделал это с помощью Sкелетальная кожура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...