#include
#include
/*
几何图元类型和说明
类型 说明
GL_POINTS 单个顶点集
GL_LINES 多组双顶点线段
GL_POLYGON 单个简单填充凸多边形
GL_TRIANGLES 多组独立填充三角形
GL_QUADS 多组独立填充四边形
GL_LINE_STRIP 不闭合折线
GL_LINE_LOOP 闭合折线
GL_TRIANGLE_STRIP 线型连续填充三角形串
GL_TRIANGLE_FAN 扇形连续填充三角形串
GL_QUAD_STRIP 连续填充四边形串
*/
void display(void)
{
const int n = 12;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
//glBegin和glEnd函数限定了一组或多组图元的定点定义。
//glBegin(GL_LINE_STRIP);
//glBegin(GL_QUADS);
//glBegin(GL_QUAD_STRIP);
//glBegin(GL_POINTS);
//glBegin(GL_LINE_LOOP);
//glBegin(GL_TRIANGLES);
//glBegin(GL_TRIANGLE_FAN);
//glBegin(GL_TRIANGLE_STRIP);
for (int i = 0; i < n; ++i)
glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));
//glVertex 开头指定点
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);//初始化OpenGL Utility Toolkit
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
//设置显示模式GLUT_RGB表示使用RGB颜色,GLUT_INDEX(表示使用索引颜色)。
//UT_SINGLE表示使用单缓冲,GLUT_DOUBLE(使用双缓冲)
glutInitWindowPosition(100, 100);
//设置窗口在屏幕中的位置
glutInitWindowSize(400, 400);
//设置窗口的大小。
glutCreateWindow("画几何图形");
//根据前面设置的信息创建窗口。参数将被作为窗口的标题。
//窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
glutDisplayFunc(&display);
//注册一个绘图函数
glutMainLoop();
//进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。
return 0;
}
GL_POLYGON
GL_LINE_STRIP
GL_QUADS
GL_QUAD_STRIP
GL_POINTS
GL_LINE_LOOP
GL_TRIANGLES
GL_TRIANGLE_FAN
GL_TRIANGLE_STRIP
#include
#include
void display(void)
{
const GLfloat factor = 0.1f;
/*
glColor3f(0.0, 0.0, 0.0); --> 黑色
glColor3f(1.0, 0.0, 0.0); --> 红色
glColor3f(0.0, 1.0, 0.0); --> 绿色
glColor3f(0.0, 0.0, 1.0); --> 蓝色
glColor3f(1.0, 1.0, 0.0); --> 黄色
glColor3f(1.0, 0.0, 1.0); --> 品红色
glColor3f(0.0, 1.0, 1.0); --> 青色
glColor3f(1.0, 1.0, 1.0); --> 白色
*/
GLfloat x;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(0.0f, 0.0f, 1.0f);
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);
glColor3f(1.0f, 0.0f, 0.0f);
for (x = -1.0f / factor; x < 1.0f / factor; x += 0.01f)
glVertex2f(x*factor, sin(x)*factor);
glEnd();
glBegin(GL_POINTS);
glColor3f(1.0, 1.0, 0.0); //黄色
glColor3f(0.0, 1.0, 0.0); //绿色 //连续调用,最后的起作用
glVertex2f(0.25, 0.75);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);//初始化OpenGL Utility Toolkit
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
//设置显示模式GLUT_RGB表示使用RGB颜色,GLUT_INDEX(表示使用索引颜色)。
//UT_SINGLE表示使用单缓冲,GLUT_DOUBLE(使用双缓冲)
glutInitWindowPosition(100, 100);
//设置窗口在屏幕中的位置
glutInitWindowSize(400, 400);
//设置窗口的大小。
glutCreateWindow("画几何图形");
//根据前面设置的信息创建窗口。参数将被作为窗口的标题。
//窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
glutDisplayFunc(&display);
//注册一个绘图函数
glutMainLoop();
//进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。
return 0;
}
//花点
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_POINTS);
glColor3f(1.0f, 0.0f, 0.0f);//里面的起作用,外面的被屏蔽
glPointSize(1.0f);//里面的没法起作用,外面的起作用???
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
void display(void)
{
const int n = 12;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
glColor3f(1.0f, 0.0f, 0.0f);
glLineWidth(5.0f);//直线的宽度
//画虚线
glEnable(GL_LINE_STIPPLE);//启动画虚线
glLineStipple(2, 0x00FF);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
//glLineWidth(5.0f);//直线的宽度,不起作用
for (int i = 0; i < n; ++i)
glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));
glEnd();
glBegin(GL_LINES);
//glLineWidth(5.0f); 不起作用
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
//多边形的两面以及绘制方式
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT, GL_FILL);//正面为填充模式
glPolygonMode(GL_BACK, GL_LINE);//反面为线性模式
glFrontFace(GL_CCW);//CounterClockWise,设置逆时针为正面。
glBegin(GL_POLYGON);//逆时针绘制一个正方形。左下方
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);//顺时针绘制一个正方形,在右上方
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, 0.0f);
glEnd();
glFlush();
}
改成glFrontFace(GL_CW);即顺时针为正面
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(5.0f);
glColor3f(1.0f, 0.0f, 0.0f);
//glPolygonMode(GL_FRONT, GL_FILL);//正面为填充模式
//glPolygonMode(GL_BACK, GL_LINE);//反面为线性模式
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
// 设置两面均为顶点绘制方式
glFrontFace(GL_CW);//CounterClockWise,设置逆时针为正面。
glBegin(GL_POLYGON);//逆时针绘制一个正方形。左下方
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);//顺时针绘制一个正方形,在右上方
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, 0.0f);
glEnd();
glFlush();
}