【发布时间】:2015-10-28 21:46:43
【问题描述】:
我正在尝试围绕 3d 曲线的每个点渲染圆圈。基本上试图为曲线创建一个管状结构。但是如图所示,圆的方向是错误的。下面是我在计算frenet框架后对圆形对象的模型矩阵的计算。我哪里错了? 作为参考,绿线是切线,蓝色是法线,红色是副法线。
Frenet Frame Calculations:
glm::vec3 pointback = curve_points[i-1];
glm::vec3 pointmid = curve_points[i];
glm::vec3 pointforward = curve_points[i+1];
glm::vec3 forward_tangent_vector = glm::vec3(glm::normalize(pointforward - pointmid)) ;
glm::vec3 backward_tangent_vector = glm::vec3(glm::normalize(pointmid - pointback)) ;
glm::vec3 second_order_tangent = glm::normalize(forward_tangent_vector - backward_tangent_vector);
glm::vec3 binormal = glm::normalize(glm::cross(forward_tangent_vector, second_order_tangent));
glm::vec3 normal = glm::normalize(glm::cross(binormal, forward_tangent_vector));
Model Matrix for Circle calculations
glm::mat3 tbn = glm::mat3(forward_tangent_vector,binormal,normal);
glm::vec3 normal_axis = glm::vec3(0, 1, 0);
//normal_axis = forward_tangent_vector;
glm::vec3 circleNormal = glm::normalize(tbn * normal_axis);
glm::vec3 rotationAxis = glm::cross(normal_axis, circleNormal);
float rotationAngle = glm::acos(glm::dot(normal_axis, circleNormal));
R = glm::rotate(R, glm::degrees(rotationAngle), rotationAxis);
T = glm::translate(T, pointmid);
glm::mat4 Model = T*R;
【问题讨论】:
-
圆必须由法线和副法线向量构成。
-
我不确定我是否在关注你。能详细点吗?
-
目前它们似乎是由切线和法线向量构建的。
-
目前它们是在循环中使用此构建的
float x = 0.1f*cos(dt * i);float y = 0.f;float z = 0.1f*sin(dt * i); -
然后交换两个坐标。
标签: c++ opengl computational-geometry curve glm-math