六、绘制圈 GL_LINE_LOOP ( 奇数个点 )
绘制圈时 , 如果设置奇数个点 , 最后一个点也会进行连线 , 如上面的四个点 , 去掉第三个点 , 也可以画出一模一样的图形 ;
// 渲染场景 // 清除缓冲区 , // 使用之前设置的 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);
七、绘制彩色的线
在上面 六 的代码基础上 , 在绘制每个点之前 , 都设置当前的颜色值 , 即 OpenGL 状态机中的当前颜色值 ,
第一个点 glVertex3f(0.0f, 0.0f, -10.0f) , 绘制前设置的是 白色 ,
第二个点 glVertex3f(-5.0f, 0.0f, -10.0f) , 绘制前设置的是 绿色 ,
第三个点 glVertex3f(-5.0f, -2.0f, -10.0f) , 绘制前设置的是 蓝色 ;
设置颜色就是在点设置前调用 glColor4ub(0, 0, 255, 255) 方法 , 设置当前颜色 ;
当 白色的点 到 绿色的点 之间连线时 , 颜色会从白色渐变到绿色 ;
代码如下 :
// 渲染场景 // 清除缓冲区 , // 使用之前设置的 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_STRIP); glBegin(GL_LINE_LOOP); // 绘制线 , 每两个点组成一条线 // glVertex3f (GLfloat x, GLfloat y, GLfloat z) glVertex3f(0.0f, 0.0f, -10.0f); // 设置绿色 glColor4ub(0, 255, 0, 255); glVertex3f(-5.0f, 0.0f, -10.0f); // 上面的设置会从 (0,0,-10) 坐标向 (-5,0,-10) 坐标绘制一条线 // 设置蓝色 glColor4ub(0, 0, 255, 255); //glVertex3f(-5.0f, 0.0f, -10.0f); glVertex3f(-5.0f, -2.0f, -10.0f); glColor4ub(255, 255, 255, 255); // 上面的设置会从 (-5,0,-10) 坐标向 (-5,-2,-10) 坐标绘制一条线 // 绘制点结束 glEnd(); // 将后缓冲区绘制到前台 SwapBuffers(dc);
运行效果如下 :
第 1 11 个点白色 , 第 2 22 个点绿色 , 第 3 33 个点蓝色 ;
线段 1 11 白色 ~ 绿色渐变 , 线段 2 22 绿色 ~ 蓝色渐变 , 线段 3 33 蓝色 ~ 白色渐变 , 这是 OpenGL 固定管线差值出来的颜色 ;
八、相关资源
GitHub 地址 : https://github.com/han1202012/OpenGL
博客源码快照 : https://download.csdn.net/download/han1202012/14740988