《计算机图形学基础》OpenGL画点画直线画虚线实现不同线宽
#include<stdio.h>
#include<glut.h>
#include<GL.h>
#include<GLU.h>
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f,0.0f,0.0f);
//画点
GLfloat sizesPoint[2];
GLfloat stepPoint;
GLfloat curSizePoint;
glGetFloatv(GL_POINT_SIZE_RANGE,sizesPoint);
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&stepPoint);
curSizePoint=sizesPoint[0];
for (int i=0;i<10;i++) {
glPointSize(curSizePoint);
glBegin(GL_POINTS);
glVertex3f(25.0+i*20,200.0f,0.0f);
glEnd();
curSizePoint +=stepPoint*3;
}
//直线
GLfloat curSizeLine=5;
glLineWidth(curSizeLine);
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();
glLineWidth(10);
glLineStipple(1,0x070F); //0xFF0C
glBegin(GL_LINES);
glVertex3f(25.0f,80.0f,0.0f);
glVertex3f(225.0f,80.0f,0.0f);
glEnd();
glLineStipple(4,0x070F);
glBegin(GL_LINES);
glVertex3f(25.0f,40.0f,0.0f);
glVertex3f(225.0f,40.0f,0.0f);
glEnd();
glDisable(GL_LINE_STIPPLE);
glFlush();
}
void ChangeSize(GLsizei w,GLsizei h)
{
if (h==0) {
h=1;
}
glViewport(0,0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w<=h) {
glOrtho (0.0f,250.0f,0.0f,250.0f*h/w,1.0f, -1.0f);
}else{
glOrtho (0.0f,250.0f*w/h,0.0f,250.0f,1.0f, -1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB |GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glClearColor(1.0f,1.0f, 1.0f,1.0f);
glutMainLoop();
return 0;
}