2013-08-16 2 views
1

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

Тем не менее, я очень хочу нарисовать нечто похожее на изображение блендеров графического представления костей блендера (с головами и хвостами).

Я пример кода У меня (внизу) работает только для стыков, которые направлены в направлении (0,1,0). Если у меня кость (1,0,0), то она не точно отражает эту кость.

Итак, мой вопрос: есть ли математическое уравнение для ориентации этих вершин от (0,1,0) до некоторого произвольного векторного направления, основанного на том, как сталкиваются мои костяные суставы.

glm::vec3 vert[14]; 
vert[ 0] = glm::vec3(0.0f, 0.0f, 0.0f); 
vert[ 1] = glm::vec3(-0.2f, 0.2f,-0.2f); 
vert[ 2] = glm::vec3(0.2f, 0.2f,-0.2f); 
vert[ 3] = glm::vec3(0.0f, getLength(), 0.0f); 
vert[ 4] = glm::vec3(-0.2f, 0.2f,-0.2f); 
vert[ 5] = glm::vec3(-0.2f, 0.2f, 0.2f); 
vert[ 6] = glm::vec3(0.0f, 0.0f, 0.0f); 
vert[ 7] = glm::vec3(0.2f, 0.2f,-0.2f); 
vert[ 8] = glm::vec3(0.2f, 0.2f, 0.2f); 
vert[ 9] = glm::vec3(0.0f, 0.0f, 0.0f); 
vert[10] = glm::vec3(-0.2f, 0.2f, 0.2f); 
vert[11] = glm::vec3(0.0f, getLength(), 0.0f); 
vert[12] = glm::vec3(0.2f, 0.2f, 0.2f); 
vert[13] = glm::vec3(-0.2f, 0.2f, 0.2f); 
+1

Если у вас есть направление и ориентация кости, вы можете построить вокруг нее многогранник с простой векторной алгеброй. Вы также можете создать «запасную» модель (на первичной оси), а затем повернуть и масштабировать ее в соответствии с костью, которую вы хотите отобразить. – didierc

ответ

1

Ниже приведен общий рецепт, но он может работать по вашей проблеме.

Вам в основном нужна модель, выстроившаяся в произвольном направлении, обычно используется вертикальная ось, но любой из них будет делать. Затем вы можете использовать разницу точек приложения кости как вектор назначения, а ось модели - как вектор начала. С этого ,:

  • вы вычислить вращения кватернион между этими векторами, как объяснено there,

  • и масштабный коэффициент путем деления длины вектора назначения по длине координат вектора.

  • Вы можете повторить первую операцию с векторным лицом, если визуализированный должен быть направлен в определенном направлении.

Теперь у вас есть параметры поворота и масштаба, чтобы преобразовать вашу модель в нужную посадку. Просто превратите их в матрицу и примените ее на этапе преобразования вершины.

This recent question имеет дело с рендерингом многих экземпляров одной и той же сетки, может быть полезно получить представление о том, как вы можете продолжить, как только у вас будут все готовые данные.