1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
void Visualize::RenderCar() {
std::lock_guard<std::mutex> lock(mtx_state_);
// 从导航状态获取旋转矩阵和位置
Eigen::Matrix3f R = nav_state_.orientation.matrix();
Eigen::Vector3f t = nav_state_.position;
// 计算车体坐标系三个轴的世界坐标表示
// X轴: 前进方向(1,0,0), Y轴: 右侧(0,1,0), Z轴: 上方(0,0,1)
Eigen::Vector3f forward = R * Eigen::Vector3f(1, 0, 0) * car_size_;
Eigen::Vector3f right = R * Eigen::Vector3f(0, 1, 0) * car_size_ * 0.5f;
Eigen::Vector3f up = R * Eigen::Vector3f(0, 0, 1) * car_size_ * 0.3f;
glLineWidth(2.0f);
// 使用 GL_LINES 绘制三条坐标轴
glBegin(GL_LINES);
// X 轴(前进方向)- 红色
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(t.x(), t.y(), t.z());
glVertex3f(t.x() + forward.x(), t.y() + forward.y(), t.z() + forward.z());
// Y 轴 - 绿色
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(t.x(), t.y(), t.z());
glVertex3f(t.x() + right.x(), t.y() + right.y(), t.z() + right.z());
// Z 轴 - 蓝色
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(t.x(), t.y(), t.z());
glVertex3f(t.x() + up.x(), t.y() + up.y(), t.z() + up.z());
glEnd();
}
|