glBegin()使用小结

 

在glBegin()和glEnd()之间可调用的函数

函数 函数意义
glVertex*() 设置顶点坐标
glColor*() 设置当前颜色
glIndex*() 设置当前颜色表
glNormal*() 设置法向坐标
glCoord*() 产生坐标
glCallList(),glCallLists() 执行显示列表
glTexCoord*() 设置纹理坐标
glEdgeFlag*() 控制边界绘制
glMaterial*() 设置材质

glVertex3f()表示了该函数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。

几何图元类型和说明

类型 说明
GL_POINTS 单个顶点集
GL_LINES 多组双顶点线段
GL_POLYGON 单个简单填充凸多边形
GL_TRAINGLES  多组独立填充三角形
GL_QUADS 多组独立填充四边形
GL_LINE_STRIP 不闭合折线
GL_LINE_LOOP 闭合折线
GL_TRAINGLE_STRIP 线型连续填充三角形串
GL_TRAINGLE_FAN 扇形连续填充三角形串
GL_QUAD_STRIP 连续填充四边形串


 
 实例如下所示:

复制代码
// OpenGLDemo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <GL/glut.h>
#include <math.h>
const int n = 1000;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
const GLfloat factor = 0.1f;
void myDisplay(void)

{
///第一个程序----矩形
//glClear(GL_COLOR_BUFFER_BIT);
//glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
//glFlush();

///第二个程序----圆
//int i;
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_POLYGON);//有顶点就必须要有glBegin() glEnd();
//for(i=0; i<n; ++i)
// glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
//glEnd();
//glFlush();

///第三个程序---五星
GLfloat a = 1 / (2-2*cos(72*Pi/180));
GLfloat bx = a * cos(18 * Pi/180);
GLfloat by = a * sin(18 * Pi/180);
GLfloat cy = -a * cos(18 * Pi/180);
GLfloat
PointA[2] = { 0, a },
PointB[2] = { bx, by },
PointC[2] = { 0.5, cy },
PointD[2] = { -0.5, cy },
PointE[2] = { -bx, by };

glClear(GL_COLOR_BUFFER_BIT);
// 按照A->C->E->B->D->A的顺序,将五角星画出
glBegin(GL_LINE_LOOP);//闭合折线
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glEnd();
glFlush();

///第四个程序----画出正弦函数图形
//GLfloat x;
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_LINES);
//glVertex2f(-1.0f, 0.0f);
//glVertex2f(1.0f, 0.0f); // 以上两个点可以画x轴
//glVertex2f(0.0f, -1.0f);
//glVertex2f(0.0f, 1.0f); // 以上两个点可以画y轴
//glEnd();
//glBegin(GL_LINE_STRIP);
//for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)
//{
// glVertex2f(x*factor, sin(x)*factor);
//}
//glEnd();
//glFlush();

}

int main(int argc, char *argv[])

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

glutInitWindowPosition(100, 100);

glutInitWindowSize(400, 400);

glutCreateWindow("第一个OpenGL程序");

glutDisplayFunc(&myDisplay);

glutMainLoop();

return 0;

}
复制代码

效果图如下所示:

 
 
 
 
 
 

posted @   叶梅树  阅读(13302)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示