首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点云的变颜色方案

点云的变颜色方案
EN

Stack Overflow用户
提问于 2019-12-30 12:40:10
回答 1查看 268关注 0票数 1

我有一个从外部csv.The数据中读取和绘图点的函数,类似于Lidar输出。我需要看看是否有办法给一组点不同的颜色。就像xz平面上的所有圆一样,半径在0-50之间的平面有蓝色,50-10有红色,等等。

这是我画点的代码

代码语言:javascript
复制
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分别存储x、y、z值的std::vector<float>数据类型。我已经试过给出如下条件

代码语言:javascript
复制
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();

这为我生成了想要的输出,但是渲染有点慢。我已经包括变焦和pan功能等,这是滞后的多条件检查。有没有更有效的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-30 12:50:31

但是请注意,一个现代的解决方案是将所有的点放在一个顶点缓冲对象中,并使用一个着色器程序来计算片段的颜色。另见LearnOpenGL -阴影

无论如何,主要的性能影响是由欧氏距离的多重计算造成的。sqrt是一个非常耗时的函数。

因为您只是想比较距离,所以根本不需要计算距离。与其比较距离,不如比较距离的平方。例如:

而不是

代码语言:javascript
复制
if (sqrt((vx[i] * vx[i]) + (vz[i] * vz[i]))<96.00)

代码语言:javascript
复制
if ( vx[i]*vx[i] + vz[i]*vz[i] < 96.00*96.00 )

此外,我建议简化代码,并只计算一次距离的平方:

代码语言:javascript
复制
```cpp

glBegin(GL_POINTS);

对于(int = 0;i

{

代码语言:javascript
复制
float dist_sq = vx[i]*vx[i] + vz[i]*vz[i];

代码语言:javascript
复制
if (dist_sq < 5.00 * 5.00)

代码语言:javascript
复制
    glColor3f(1.000, 0.549, 0.000);

代码语言:javascript
复制
else if (dist_sq < 10.00 * 10.00)

代码语言:javascript
复制
    glColor3f(1.000, 0.843, 0.000);

代码语言:javascript
复制
else if (dist_sq < 20.00 * 20.00)

代码语言:javascript
复制
    glColor3f(1.000, 1.000, 0.000);

代码语言:javascript
复制
//  [...]

代码语言:javascript
复制
glVertex3f(vx[i], vy[i], vz[i]);

}

glEnd();

代码语言:javascript
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59531028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档