【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(二)

简介: 【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(二)

三、绘制多条线段 GL_LINES


绘制线段时 , glBegin(GL_LINES) 方法传入的参数是 GL_LINES ;


在 glBegin(GL_LINES) 和 glEnd() 之间设置的点 , 会被自动当做线的两个端点 , 如果设置 4 个点 , OpenGL 会按照顺序 , 从上到下 , 两两组合成一条线段 ;


如在上述 glBegin 和 glEnd 两个方法之间调用了


     

glVertex3f(0.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, -2.0f, -10.0f);


代码 , 含义是 绘制 2 条线段 , 线段 1 端点分别是 (0,0,-10) 和 (-5,0,-10) , 线段 2 端点分别是 (-5,0,-10) 和 (-5, -2, -10) ;


// 渲染场景
  // 清除缓冲区 , 
  // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区
  // 红色背景
  glClear(GL_COLOR_BUFFER_BIT);
        // 设置当前的绘制颜色 , 4 个 unsigned byte 
        // 每个颜色的分量占一个字节
        // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
        // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
        glColor4ub(255, 255, 255, 255);
  // 设置线的宽度 
  glLineWidth(2.0f);
        // 绘制线时, 会将从 glBegin 到 glEnd 之间的所有的点都绘制出来
        // 可以调用 glVertex3f 方法 成对 设置多条线
  // 注意必须成对设置 , 如果设置奇数个点 , 最后一个点会被丢弃
        // 绘制线段开始
        glBegin(GL_LINES);
        // 绘制线 , 每两个点组成一条线
  // glVertex3f (GLfloat x, GLfloat y, GLfloat z)
        glVertex3f(0.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, 0.0f, -10.0f);
  // 上面的设置会从 (0,0,-10) 坐标向 (-5,0,-10) 坐标绘制一条线
        glVertex3f(-5.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, -2.0f, -10.0f);
  // 上面的设置会从 (-5,0,-10) 坐标向 (-5,-2,-10) 坐标绘制一条线
        // 绘制点结束
        glEnd();
  // 将后缓冲区绘制到前台
  SwapBuffers(dc);


绘制效果 :

image.png







四、绘制依次连接的点组成的线 GL_LINE_STRIP


给 glBegin 传入 GL_LINE_STRIP 参数 , 其作用是绘制各个点依次连接的线 , 但是首尾不连接 ;


这里注意与 GL_LINE_LOOP 区别 , GL_LINE_LOOP 设置后 , 在 GL_LINE_STRIP 基础上 , 还要进行首尾连接 ;


代码示例 :


// 渲染场景
  // 清除缓冲区 , 
  // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区
  // 红色背景
  glClear(GL_COLOR_BUFFER_BIT);
        // 设置当前的绘制颜色 , 4 个 unsigned byte 
        // 每个颜色的分量占一个字节
        // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
        // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
        glColor4ub(255, 255, 255, 255);
  // 设置线的宽度 
  glLineWidth(2.0f);
        // 绘制线时, 会将从 glBegin 到 glEnd 之间的所有的点都绘制出来
        // 可以调用 glVertex3f 方法 成对 设置多条线
  // 注意必须成对设置 , 如果设置奇数个点 , 最后一个点会被丢弃
        // 绘制线段开始
        //glBegin(GL_LINES);
        //glBegin(GL_LINE_LOOP);
        glBegin(GL_LINE_STRIP);
        // 绘制线 , 每两个点组成一条线
  // glVertex3f (GLfloat x, GLfloat y, GLfloat z)
        glVertex3f(0.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, 0.0f, -10.0f);
  // 上面的设置会从 (0,0,-10) 坐标向 (-5,0,-10) 坐标绘制一条线
        glVertex3f(-5.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, -2.0f, -10.0f);
  // 上面的设置会从 (-5,0,-10) 坐标向 (-5,-2,-10) 坐标绘制一条线
        // 绘制点结束
        glEnd();
  // 将后缓冲区绘制到前台
  SwapBuffers(dc);


效果展示 :


image.png






五、绘制圈 GL_LINE_LOOP ( 偶数个点 )


绘制圈时 , 在 glBegin 中传入 GL_LINE_LOOP 参数 , 绘制时会将 glBegin 和 glEnd 之间的点连线 , 并且最后一个点会和第一个点连在一起 , 组成一个圈 ;


代码示例 : 下面的代码与 三 中的代码区别是 , glBegin 中传入的参数是 GL_LINE_LOOP , 不再传入 GL_LINES 参数 ;


// 渲染场景
  // 清除缓冲区 , 
  // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区
  // 红色背景
  glClear(GL_COLOR_BUFFER_BIT);
        // 设置当前的绘制颜色 , 4 个 unsigned byte 
        // 每个颜色的分量占一个字节
        // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
        // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
        glColor4ub(255, 255, 255, 255);
  // 设置线的宽度 
  glLineWidth(2.0f);
        // 绘制线时, 会将从 glBegin 到 glEnd 之间的所有的点都绘制出来
        // 可以调用 glVertex3f 方法 成对 设置多条线
  // 注意必须成对设置 , 如果设置奇数个点 , 最后一个点会被丢弃
        // 绘制线段开始
        //glBegin(GL_LINES);
        glBegin(GL_LINE_LOOP);
        // 绘制线 , 每两个点组成一条线
  // glVertex3f (GLfloat x, GLfloat y, GLfloat z)
        glVertex3f(0.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, 0.0f, -10.0f);
  // 上面的设置会从 (0,0,-10) 坐标向 (-5,0,-10) 坐标绘制一条线
        glVertex3f(-5.0f, 0.0f, -10.0f);
        glVertex3f(-5.0f, -2.0f, -10.0f);
  // 上面的设置会从 (-5,0,-10) 坐标向 (-5,-2,-10) 坐标绘制一条线
        // 绘制点结束
        glEnd();
  // 将后缓冲区绘制到前台
  SwapBuffers(dc);




绘制效果 : 最后一个点与第一个点连成线段 , 组成一个闭合的三角形 ;


image.png




目录
相关文章
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
215 0
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
|
存储
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
212 0
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(三)
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(三)
438 0
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(三)
|
API Android开发 索引
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(一)
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(一)
132 0
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(一)
|
API
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(三)
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(三)
198 0
|
API 索引 容器
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(二)
【OpenGL ES】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解(二)
196 0
|
机器学习/深度学习 API Android开发
|
2月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
71 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
101 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
368 0