1、点:

  1. void TestPoint()
  2. {
  3. //点的大小默认为一个像素,通过下面的函数可以设置一点的大小
  4. glPointSize(50.0f);
  5.  
  6. glBegin(GL_POINTS);
  7. glVertex2f(, );
  8. glVertex2f(0.5f, 0.5f);
  9.  
  10. glEnd();
  11. }

2、线:

  1. void TestLine()
  2. {
  3. //设置线的宽度
  4. glLineWidth(500.0f);
  5.  
  6. glBegin(GL_LINES);
  7.  
  8. glVertex2f(, );
  9. glVertex2f(0.5f, 0.5f);
  10.  
  11. glEnd();
  12. }

3、虚线:

  1. //画虚线
  2. void TestLineSttiple()
  3. {
  4. //开启虚线模式 , 使用 glDisable(GL_LINE_STIPPLE) 关闭虚线模式
  5. glEnable(GL_LINE_STIPPLE);
  6.  
  7. //设置线的宽度
  8. glLineWidth(500.0f);
  9.  
  10. //设置虚线的样式
  11. //参数一: 要画的点的个数
  12. //参数二: 是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。
  13. glLineStipple(, 0x0F0F);
  14.  
  15. glBegin(GL_LINES);
  16.  
  17. glVertex2f(, );
  18. glVertex2f(0.5f, 0.5f);
  19.  
  20. glEnd();

4、多边形:

  1>多边形的两面及绘制方式:

    多边形的有两个面,每一个面均可以设置不同的绘制模式:填充(默认的绘制模式)、只绘制边缘轮廓、只绘制顶点。

    glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充方式

    glPolygonMode(GL_BACK, GL_LINE); // 设置反面为边缘绘制方式

    glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式

  2>一般约定,逆时针为正面,顺时针为反面,

    可以通过glFrontFace函数来交换“正面”和“反面”的概念。

    glFrontFace(GL_CCW);   // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针

    glFrontFace(GL_CW);    // 设置CW方向为“正面”,CW即ClockWise,顺时针

  1. void TestPolygon()
  2. {
  3. //glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充方式
  4.  
  5. //glPolygonMode(GL_BACK, GL_LINE); // 设置反面为边缘绘制方式
  6.  
  7. //glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式
  8.  
  9. glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式
  10.  
  11. glPolygonMode(GL_BACK, GL_LINE); // 设置反面为线形模式
  12.  
  13. glFrontFace(GL_CCW); // 设置逆时针方向为正面
  14.  
  15. glBegin(GL_POLYGON); // 按逆时针绘制一个正方形,在左下方
  16.  
  17. glVertex2f(-0.5f, -0.5f);
  18.  
  19. glVertex2f(0.0f, -0.5f);
  20.  
  21. glVertex2f(0.0f, 0.0f);
  22.  
  23. glVertex2f(-0.5f, 0.0f);
  24.  
  25. glEnd();
  26.  
  27. glBegin(GL_POLYGON); // 按顺时针绘制一个正方形,在右上方
  28.  
  29. glVertex2f(0.0f, 0.0f);
  30.  
  31. glVertex2f(0.0f, 0.5f);
  32.  
  33. glVertex2f(0.5f, 0.5f);
  34.  
  35. glVertex2f(0.5f, 0.0f);
  36.  
  37. glEnd();
  38.  
  39. glFlush();
  40. }

  3>剔除多边形:

    glEnable(GL_CULL_FACE)    启动剔除功能

      glDisable(GL_CULL_FACE)   关闭剔除功能

    glCullFace的参数可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。

    注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。

  4>多边形镂空:

    glEnable(GL_POLYGON_STIPPLE)    启动镂空模式

    glDisable(GL_POLYGON_STIPPLE)   关闭镂空模式

    使用 glPolygonStipple(const GLubyte *mask) 来设置镂空的样式,参数mask指向一个长度为128字节的空间,它表示了一个32*32的矩形应该如何镂空。其中:第一个字节表示了最左下方的从左到右(也可以是从右到左,这个可以修改)8个像素是否镂空(1表示不镂空,显示该像素;0表示镂空,显示其后面的颜色),最后一个字节表示了最右上方的8个像素是否镂空。

  1. static GLubyte Mask[] =
  2. {
  3. 0x00, 0x00, 0x00, 0x00, // 这是最下面的一行
  4. 0x00, 0x00, 0x00, 0x00,
  5. 0x03, 0x80, 0x01, 0xC0,
  6. 0x06, 0xC0, 0x03, 0x60,
  7. 0x04, 0x60, 0x06, 0x20,
  8. 0x04, 0x30, 0x0C, 0x20,
  9. 0x04, 0x18, 0x18, 0x20,
  10. 0x04, 0x0C, 0x30, 0x20,
  11. 0x04, 0x06, 0x60, 0x20,
  12. 0x44, 0x03, 0xC0, 0x22,
  13. 0x44, 0x01, 0x80, 0x22,
  14. 0x44, 0x01, 0x80, 0x22,
  15. 0x44, 0x01, 0x80, 0x22,
  16. 0x44, 0x01, 0x80, 0x22,
  17. 0x44, 0x01, 0x80, 0x22,
  18. 0x44, 0x01, 0x80, 0x22,
  19. 0x66, 0x01, 0x80, 0x66,
  20. 0x33, 0x01, 0x80, 0xCC,
  21. 0x19, 0x81, 0x81, 0x98,
  22. 0x0C, 0xC1, 0x83, 0x30,
  23. 0x07, 0xE1, 0x87, 0xE0,
  24. 0x03, 0x3F, 0xFC, 0xC0,
  25. 0x03, 0x31, 0x8C, 0xC0,
  26. 0x03, 0x3F, 0xFC, 0xC0,
  27. 0x06, 0x64, 0x26, 0x60,
  28. 0x0C, 0xCC, 0x33, 0x30,
  29. 0x18, 0xCC, 0x33, 0x18,
  30. 0x10, 0xC4, 0x23, 0x08,
  31. 0x10, 0x63, 0xC6, 0x08,
  32. 0x10, 0x30, 0x0C, 0x08,
  33. 0x10, 0x18, 0x18, 0x08,
  34. 0x10, 0x00, 0x00, 0x08 // 这是最上面的一行
  35. };
  36.  
  37. void TestPolygonStipple()
  38. {
  39. //启动镂空模式
  40. glEnable(GL_POLYGON_STIPPLE);
  41. //设置镂空模式
  42. glPolygonStipple(Mask);
  43. //在右上角画一个带有镂空效果的矩形
  44. glRectf(0.0f, 0.0f, 0.5f, 0.5f);
  45.  
  46. //关闭镂空效果
  47. glDisable(GL_POLYGON_STIPPLE);
  48. //在左下角绘制一个没有镂空效果的矩形
  49. glRectf(-0.5f, -0.5f, 0.0f, 0.0f);
  50. }

    具体镂空出的是什么样的图形,可以试着用具体绘图工具生成相关 的镂空参数。

OpenGL入门程序三:点、线、面的绘制的更多相关文章

  1. SCARA——OpenGL入门学习三

    OpenGL入门学习[三] 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用 ...

  2. OpenGL入门程序五:三维绘制

    1.现实世界观察一个物体的时候,可能涉及到的三维变化: 1>视图变化------从不同的角度观察. 2>模型变化------移动.旋转物体,计算机中当然还可以对物体进行缩放. 3>投 ...

  3. OpenGL入门程序一:绘制简单的矩形

    #include <GL/glut.h> void MyDisplay(void); int main(int argc, char **argv) { //设置窗口的大小 glutIni ...

  4. OpenGL入门程序二:绘制简单的圆

    学习 绘制一个圆: ; const float Pi = 3.1415926536f; const float R = 0.5f; //绘制一个圆 void DrawCircle() { //绘制一个 ...

  5. OpenGL入门程序四:颜色模式

    1.OpenGL支持两种颜色模式: 1>RGBA颜色模式 ,用 glClearColor 指定清空屏幕后的颜色,即“空颜色” . 2>索引颜色模式,用 glClearIndex 指定清空屏 ...

  6. ssm整合快速入门程序(三)之Data类型转换器

    今天就写写springmvc配置Data类型转换器 首先在创建一个转换器的包cn.my.ssm.controller.converter,创建一个CustomDateConverter类实现Conve ...

  7. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  8. OpenGL入门学习(转)

    OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...

  9. OpenGL入门学习(转载)

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

随机推荐

  1. X-UA-Compatible

    X-UA-Compatible是神马? X-UA-Compatible是IE8的一个专有<meta>属性,它告诉IE8采用何种IE版本去渲染网页,在html的<head>标签中 ...

  2. MFC工具栏的创建、设计与使用实例

    本文通过实例说明MFC工具栏的创建.设计和使用方法,包括三个demo.       demo1:创建一个工具栏 C++代码 //摘抄自MSDN demo1 (创建一个工具栏) 1.Create a t ...

  3. HTML ajax 上传文件限制文件的类型和文件大小

    html    <input type="file" name="excel" id="excel_input" accept=&qu ...

  4. Python: 序列: 过滤序列元素

    问题: 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 answer: eg1:列表推导 最简单的过滤序列元素的方法就是使用列表推导.比如:>>> mylist = ...

  5. redis删除单个key和多个key,ssdb会落地导致重启redis无法清除缓存

    redis删除单个key和多个key,ssdb会落地导致重启redis无法清除缓存,需要针对单个key进行删除 删除单个:del key 删除多个:redis-cli -a pass(密码) keys ...

  6. 开启你的kali linux DIY之旅

    更新源 首先 是kali2016.2更新源的问题,网上找了好久,都不是很满意.后来把kali 2016.2安装到实体机中才发现,里面自带了更新源.下面我把这个官方自带更新源分享出来(速度蛮快的) de ...

  7. 01: RabbitMQ

    目录: 1.1 RabbitMq与Redis队列对比 1.2 在win7 64位机上安装RabbitMQ 1.3 RabbitMQ消息分发轮询 与 持久化 1.4 RabbitMQ 设定某个队列里最大 ...

  8. Json解析类

      Json解析类 定义两个辅助类 public class JSONObject : Dictionary<string, object> { } public class JSONAr ...

  9. JAVA学习调查问卷——20145101

    1.你对自己的未来有什么规划?做了哪些准备? 我希望在未来不管自己是否从事机要工作,都要做一个有能力,对社会能有所贡献的人.所以在现阶段我应该努力学习基础知识,夯实基本功,具备成为合格机要人的素质. ...

  10. 启动Sql server的服务CMD命令

    启动:net start mssqlserver 停止:net stop mssqlserver