一、对于点、线学习
主代码
void RenderScene(void)
{
// 用当前的清除颜色清除窗口
glClear(GL_COLOR_BUFFER_BIT);
// 把绘图颜色设置为紫色(RGB)
glColor3f(1.0f,0.0f,1.0f);
用当前颜色绘制一个填充的矩形,参数表示左上角点和右下角点的坐标
glRectf(100.0f, 150.0f, 150.0f, 100.0f);
//glRectf(-25.0f, 25.0f, 25.0f, -25.0f);
GLfloat sizes[2]; //保存绘制点的尺寸范围
GLfloat step;//保存绘制点尺寸的步长
GLfloat curSize; //当前绘制的点的大小
glGetFloatv(GL_POINT_SIZE_RANGE,sizes);//获得点的尺寸范围
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);//获得点尺寸的步长
//绘制不同大小的点
curSize=sizes[0];
for (int i=0;i<25;i++)
{
glPointSize(curSize); //设置点的大小
glBegin(GL_POINTS);
glVertex3f(25.0+i*8,200.0f,0.0f);
glEnd();
curSize +=step*2;
}
//绘制一条宽度为5的直线
glLineWidth(5); //设置线宽
glBegin(GL_LINES);
glVertex3f(25.0f,160.0f,0.0f);
glVertex3f(225.0f,160.0f,0.0f);
glEnd();
//绘制一条虚线
glEnable(GL_LINE_STIPPLE);
glLineStipple(1,0x00FF); //设置点划线模式
glBegin(GL_LINES);
glVertex3f(25.0f,120.0f,0.0f);
glVertex3f(225.0f,120.0f,0.0f);
glEnd();
//绘制一条宽度为3的点划线
glLineWidth(3);
glLineStipple(1,0xFF0C);
glBegin(GL_LINES);
glVertex3f(25.0f,80.0f,0.0f);
glVertex3f(225.0f,80.0f,0.0f);
glEnd();
//增加重复因子绘制的点划线
glLineStipple(4,0xFF0C);
glBegin(GL_LINES);
glVertex3f(25.0f,40.0f,0.0f);
glVertex3f(225.0f,40.0f,0.0f);
glEnd();
glDisable(GL_LINE_STIPPLE);
// 刷新OpenGL绘图命令队列
glFlush();
}
运行结果
二、三角形的绘制
主要代码
void ProcessMenu(int value)
{ switch(value)
{
case 1:
// 修改多边形正面为填充模式
glPolygonMode(GL_FRONT,GL_FILL);
break;
case 2:
//修改多边形正面为线模式
glPolygonMode(GL_FRONT,GL_LINE);
break;
case 3:
//修改多边形正面为点模式
glPolygonMode(GL_FRONT,GL_POINT);
break;
case 4:
//修改多边形反面为填充模式
glPolygonMode(GL_FRONT,GL_FILL);
break;
case 5:
//修改多边形反面为线模式
glPolygonMode(GL_FRONT,GL_LINE);
break;
case 6:
//修改多边形反面为点模式
glPolygonMode(GL_FRONT,GL_POINT);
break;
case 7:
//设置多边形的阴影模式为平面明暗模式
glShadeModel(GL_FLAT);
break;
case 8:
//设置多边形的阴影模式为光滑明暗模式
glShadeModel(GL_SMOOTH);
break;
case 9:
bWinding = !bWinding;
break;
default:
break;
}
glutPostRedisplay();
}
int main(int argc, char* argv[])
{
int nModeMenu;
int nMainMenu;
int nColorMenu;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB );
glutCreateWindow("多边形演示");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys); // 设置特殊键响应回调函数
glutDisplayFunc(RenderScene);
// 创建一个子菜单并定义菜单回调函数
nModeMenu = glutCreateMenu(ProcessMenu);
//添加菜单项,1表示选择菜单条目时传递的参数
glutAddMenuEntry("正面多边形填充模式",1);
glutAddMenuEntry("正面线框模式",2);
glutAddMenuEntry("正面点模式",3);
glutAddMenuEntry("反面多边形填充模式",4);
glutAddMenuEntry("反面线框模式",5);
glutAddMenuEntry("反面点模式",6);
//增加一个子菜单
nColorMenu = glutCreateMenu(ProcessMenu);
glutAddMenuEntry("平面明暗模式",7);
glutAddMenuEntry("光滑明暗模式",8);
//创建主菜单
nMainMenu = glutCreateMenu(ProcessMenu);
glutAddSubMenu("多边形模式", nModeMenu);
glutAddSubMenu("颜色模式", nColorMenu);
glutAddMenuEntry("改变绕法",9);
//将创建的菜单与右键关联,即把菜单设置为右键弹出式菜单
glutAttachMenu(GLUT_RIGHT_BUTTON);
SetupRC();
glutMainLoop();
return 0;
}
运行结果
通过按右键选择正反面模式,上下左右键控制旋转:
按右键,修改图片显示属性