【发布时间】:2020-04-19 05:04:11
【问题描述】:
我有一个从外部 csv 读取和绘制点的功能。数据类似于激光雷达输出的数据。我需要看看是否有办法为一组点赋予不同的颜色。就像 xz 平面中半径范围为 0 - 50 的所有圆将具有蓝色,50-10 将具有红色等等。
这是我绘制点的代码
glBegin(GL_POINTS);
glColor3f(0.961, 0.961, 0.961);
for (int i = 0; i <vx.size(); i++)
{
if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))<96.00)
{
glVertex3f(vx[i], vy[i], vz[i]);
}
}
glEnd();
其中 vx,vy 和 vz 是 std::vector<float> 数据类型,分别存储 x,y,z 值。我试过给出如下条件
if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))<5.00)
{
glColor3f(1.000, 0.549, 0.000);
glVertex3f(vx[i], vy[i], vz[i]);
}
else if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))>= 5.00 && sqrt((vx[i] * vx[i]) + (vz[i] * vz[i])) <= 10.00)
{
glColor3f(1.000, 0.843, 0.000);
glVertex3f(vx[i], vy[i], vz[i]);
}
else if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))>= 11.00 && sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))<= 20.00)
{
glColor3f(1.000, 1.000, 0.000);
glVertex3f(vx[i], vy[i], vz[i]);
}
else if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))>= 21.00 && sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))<=30.00)
{
glColor3f(0.678, 1.000, 0.184);
glVertex3f(vx[i], vy[i], vz[i]);
}
-----------------//till radius <96
glend();
这为我生成了所需的输出,但渲染有点慢。我已经包含了缩放和平移功能等,这是由于多个条件检查而滞后的。有没有更有效的方法来做到这一点?
【问题讨论】:
-
如果将所有点(带有颜色)放入顶点缓冲区,然后一遍又一遍地渲染顶点缓冲区,它可能会渲染得更快。对于 Stack Overflow 的回答来说,这可能太长了。
标签: c++ opengl visual-c++ freeglut glu