可可西

OpenGL几何图元绘制

在glBegin和glEnd之间执行有效的函数

1
2
3
4
5
6
7
8
9
10
11
glVertex*()    //设置顶点坐标
glColor*()      //设置当前颜色
glIndex*()     //设置当前颜色索引
glNormal*()   //设置法线向量坐标
glTexCoord*()    //设置纹理坐标
glMultiTexCoord*ARB()  //为多重纹理映射设置纹理坐标
glEdgeFlag*()    //控制边的绘制
glMaterial*()      //设置材质属性
glArrayElement()  //抽取顶点数组数据
glEvalCoord*()、glEvalPoint*()  //生成坐标
glCallList()、glCallLists()        //执行显示列表


  缺省逆时针(GL_CCW)为正方向,可通过glFrontFace来指定面元的正面。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
void DrawMyObjects(void)
{
  /* draw some points */
  glBegin(GL_POINTS);
    glColor3f(1.0,0.0,0.0);
    glVertex2f(-10.0,11.0);
    glColor3f(1.0,1.0,0.0);
    glVertex2f(-9.0,10.0);
    glColor3f(0.0,1.0,1.0);
    glVertex2f(-8.0,12.0);
  glEnd();
 
  /* draw some line_segments */
  glBegin(GL_LINES);
    glColor3f(1.0,1.0,0.0);
    glVertex2f(-11.0,8.0);
    glVertex2f(-7.0,7.0);
    glColor3f(1.0,0.0,1.0);
    glVertex2f(-11.0,9.0);
    glVertex2f(-8.0,6.0);
  glEnd();
 
  /* draw one opened_line */
  glBegin(GL_LINE_STRIP);
    glColor3f(0.0,1.0,0.0);
    glVertex2f(-3.0,9.0);
    glVertex2f(2.0,6.0);
    glVertex2f(3.0,8.0);
    glVertex2f(-2.5,6.5);
  glEnd();
 
  /* draw one closed_line */
  glBegin(GL_LINE_LOOP);
    glColor3f(0.0,1.0,1.0);
    glVertex2f(7.0,7.0);
    glVertex2f(8.0,8.0);
    glVertex2f(9.0,6.5);
    glVertex2f(10.3,7.5);
    glVertex2f(11.5,6.0);
    glVertex2f(7.5,6.0);
  glEnd();
 
  /* draw one filled_polygon */
  glBegin(GL_POLYGON);
    glColor3f(0.5,0.3,0.7);
    glVertex2f(-7.0,2.0);
    glVertex2f(-8.0,3.0);
    glVertex2f(-10.3,0.5);
    glVertex2f(-7.5,-2.0);
    glVertex2f(-6.0,-1.0);
  glEnd();
 
  /* draw some filled_quandrangles */
  glBegin(GL_QUADS);
    glColor3f(0.7,0.5,0.2);
    glVertex2f(0.0,2.0);
    glVertex2f(-1.0,3.0);
    glVertex2f(-3.3,0.5);
    glVertex2f(-0.5,-1.0);
    glColor3f(0.5,0.7,0.2);
    glVertex2f(3.0,2.0);
    glVertex2f(2.0,3.0);
    glVertex2f(0.0,0.5);
    glVertex2f(2.5,-1.0);
  glEnd();
 
  /* draw some filled_strip_quandrangles */
  glBegin(GL_QUAD_STRIP);
    glVertex2f(6.0,-2.0);
    glVertex2f(5.5,1.0);
    glVertex2f(8.0,-1.0);
    glColor3f(0.8,0.0,0.0);
    glVertex2f(9.0,2.0);
    glVertex2f(11.0,-2.0);
    glColor3f(0.0,0.0,0.8);
    glVertex2f(11.0,2.0);
    glVertex2f(13.0,-1.0);
    glColor3f(0.0,0.8,0.0);
    glVertex2f(14.0,1.0);
  glEnd();
 
  /* draw some filled_triangles */
  glBegin(GL_TRIANGLES);
    glColor3f(0.2,0.5,0.7);
    glVertex2f(-10.0,-5.0);
    glVertex2f(-12.3,-7.5);
    glVertex2f(-8.5,-6.0);
    glColor3f(0.2,0.7,0.5);
    glVertex2f(-8.0,-7.0);
    glVertex2f(-7.0,-4.5);
    glVertex2f(-5.5,-9.0);
  glEnd();
 
  /* draw some filled_strip_triangles */
  glBegin(GL_TRIANGLE_STRIP);
    glVertex2f(-1.0,-8.0);
    glVertex2f(-2.5,-5.0);
    glColor3f(0.8,0.8,0.0);
    glVertex2f(1.0,-7.0);
    glColor3f(0.0,0.8,0.8);
    glVertex2f(2.0,-4.0);
    glColor3f(0.8,0.0,0.8);
    glVertex2f(4.0,-6.0);
  glEnd();
 
  /* draw some filled_fan_triangles */
  glBegin(GL_TRIANGLE_FAN);
    glVertex2f(8.0,-6.0);
    glVertex2f(10.0,-3.0);
    glColor3f(0.8,0.2,0.5);
    glVertex2f(12.5,-4.5);
    glColor3f(0.2,0.5,0.8);
    glVertex2f(13.0,-7.5);
    glColor3f(0.8,0.5,0.2);
    glVertex2f(10.5,-9.0);
  glEnd();
}

点的大小[方形]  反走样后点为圆形

1
void glPointSize(GLfloat size);

线宽

1
void glLineWidth(GLfloat width);

点画线 glEnable(GL_LINE_STIPPLE)

1
void glLineStipple(GLint factor, GLushort pattern);

多边形模式

线框模式:glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

1
void glPolygonMode(GLenum face, GLenum mode);

多边形剔除 glEnable(GL_CULL_FACE)

剔除反面:glCullFace(GL_BACK);

1
void glCullFace(GLenum mode);

点画多边形 glEnable(GL_POLYGON_STIPPLE)

1
void glPolygonStipple(const GLubyte *mask);

法线向量

归一化(开销较下要大)   glEnable(GL_NORMALIZE)

均匀缩放归一化     glEnable(GL_RESCALE_NORMAL)

 

posted on   可可西  阅读(1203)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

统计信息

点击右上角即可分享
微信分享提示