openGL 高程配色绘制点云(csGL)

  • 配色函数
private void setColor(double Z)
        {
            float r, g, b;
            if (Z > colorParam1)
            {
                r = (float)((Z - colorParam1) / colorParam2);
                b = 0;
            }
            else
            {
                r = 0;
                b = (float)((colorParam1 - Z) / colorParam2);
            }
            g = 1 - (float)((Math.Abs(colorParam1 - Z)) / colorParam2);
            GL.glColor3f(r, g, b);
            return;
        }
  • 画点函数
private void draw_Points(float[] X, float[] Y, float[] Z)
        {
            GL.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            GL.glClearDepth(1.0);
            GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

            GL.glMatrixMode(GL.GL_PROJECTION);
            GL.glLoadIdentity();
            GL.gluPerspective(90.0, 1.0, 1.0, 6 * eyez);  // 投影矩阵( y 45度,纵横比1:1,near截平面1,far截平面10000.)

            //GL.glOrtho(vertx[0].Min(), vertx[0].Max(), vertx[1].Min(), vertx[1].Max(), 1.0f, 6 * eyez);//dtmZ.Min(), dtmZ.Max());

            GL.glMatrixMode(GL.GL_MODELVIEW);    // 模型矩阵
            GL.glLoadIdentity();

            //GL.glDrawBuffer(GL.GL_BACK);                                   // Specifies up to four color buffers to be drawn into with the following acceptable symbolic constants.

            GL.glPushMatrix();

            GL.gluLookAt(eyex, eyey, eyez, centerx, centery, 0.0f, 0.0f, 1.0f, 0.0f); //defines a viewing transformation
            GL.glRotatef(roll_x, 1.0f, 0.0f, 0.0f);//    
            GL.glRotatef(yaw_z, 0.0f, 0.0f, 1.0f);//
            GL.glRotatef(pitch_y, 0.0f, 1.0f, 0.0f);//
            GL.glScalef(m_Scalex, m_Scaley, m_Scalez);//缩放


            for (int i = 0; i < row; i += LOD_scale)
            {

                GL.glBegin(GL.GL_POINTS);

                for (int j = 0; j < column; j += LOD_scale)
                {
                    if (Z[i * column + j] == -frm3d.Zc)
                        continue;
                    setColor(Z[i * column + j]);

                    GL.glVertex3f(X[i * column + j], Y[i * column + j], Z[i * column + j]);

                }
                GL.glEnd();
                GL.glFlush();
            }
            /*
             * glFlush:将GL命令队列中的命令发送给显卡并清空命令队列,发送完立即返回;
             * glFinish:将GL命令队列中的命令发送给显卡并清空命令队列,显卡完成这些命令(也就是画完了)后返回。
             */
            
            GL.glPopMatrix();
        }

 

转载于:https://www.cnblogs.com/Lemon-Li/p/3254143.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一个语言模型AI,无法直接进行编程。但是,我可以为你提供一些编程思路和参考资料。 基于DEM数据的3D地形绘制是一个比较复杂的任务,需要用到计算机图形学、地理信息系统和数学等多个领域的知识。其中,CSGL是一个比较常用的计算机图形学库,可以方便地实现3D绘制和渲染。 下面是一个简单的基于CSGL绘制3D地形的示例代码: ```c++ #include <GL/glut.h> #include <iostream> #include <fstream> #include <vector> using namespace std; const int WINDOW_WIDTH = 800; const int WINDOW_HEIGHT = 600; int rows, cols; vector<vector<float>> data; void init() { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (GLfloat)WINDOW_WIDTH / (GLfloat)WINDOW_HEIGHT, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glColor3f(0.0, 0.0, 0.0); for (int i = 0; i < rows - 1; i++) { glBegin(GL_TRIANGLE_STRIP); for (int j = 0; j < cols; j++) { glVertex3f(j, i, data[i][j]); glVertex3f(j, i + 1, data[i + 1][j]); } glEnd(); } glPopMatrix(); glutSwapBuffers(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (GLfloat)w / (GLfloat)h, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void readDEMData(const char* filename) { ifstream file(filename); file >> rows >> cols; data.resize(rows); for (int i = 0; i < rows; i++) { data[i].resize(cols); for (int j = 0; j < cols; j++) { file >> data[i][j]; } } file.close(); } int main(int argc, char** argv) { if (argc < 2) { cout << "Usage: " << argv[0] << " filename" << endl; return 1; } readDEMData(argv[1]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; } ``` 这个程序可以读取一个DEM数据文件,然后绘制出3D地形。其中,读取DEM数据的函数readDEMData()需要根据自己的数据格式进行修改。绘制地形的部分使用了GL_TRIANGLE_STRIP来绘制三角形网格,可以根据需要自行修改。 参考资料: 1. OpenGL Programming Guide: https://www.glprogramming.com/red/ 2. CSGL: https://github.com/csgl/csgl 3. DEM数据格式: https://en.wikipedia.org/wiki/Digital_elevation_model

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值