Line eg. with testing glLineWidth
#define FREEGLUT_STATIC #include <GL/glut.h> GLfloat nRange=100.0f;//视景体的边界值 GLfloat xRot=0.0f,yRot=0.0f; GLfloat PI=3.1416f; GLfloat y=0.0f;//各条直线对应的y坐标值 GLfloat fCurrSize=0.0f;//当前的直线宽度 GLfloat fSizes[2]={0.0f};//直线宽度的极限值 void SetupRC() { //background color glClearColor(0.0f,0.0f,0.0f,1.0f); //drawpen color glColor3f(0.0f,0.0f,1.0f); } void RenderScene() { //清除颜色缓冲区 glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); //旋转 glRotatef(xRot,1.0f,0.0f,0.0f); glRotatef(yRot,0.0f,1.0f,0.0f); //绘制一系列直线 glGetFloatv(GL_LINE_WIDTH_RANGE,fSizes); fCurrSize=fSizes[0]; for(y=-90.0f;y<90.0f;y+=20.0f) { glLineWidth(fCurrSize); glBegin(GL_LINES); glVertex3f(-80.0f,y,0.0f); glVertex3f(80.0f,y,0.0f); glEnd(); fCurrSize+=1.0f; } glPopMatrix(); glutSwapBuffers(); } void ChangeSize(int w,int h) { if(h==0) h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-nRange,nRange,-nRange,nRange*h/w,1.0f,-1.0f); else glOrtho(-nRange,nRange*w/h,-nRange,nRange,1.0f,-1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void SpecialKeys(int key,int x,int y) { if(key==GLUT_KEY_UP) xRot-=2.0f; if(key==GLUT_KEY_DOWN) xRot+=2.0f; if(key==GLUT_KEY_LEFT) yRot+=2.0f; if(key==GLUT_KEY_RIGHT)//>360,opengl也会自动处理啊 yRot-=2.0f; } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitWindowSize(800,600); glutCreateWindow("Lines with increasing WIDTH"); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA); glutDisplayFunc(RenderScene); glutSpecialFunc(SpecialKeys); glutReshapeFunc(ChangeSize); SetupRC(); glutMainLoop(); return 0; }
总结:glut库比较老的版本中,glLineWidth(0.0f);是很细的;但在较新的版本中(比如超级宝典5th带的glut库),范围是0.0f~8.0f,且有点“补码”的感觉,如果将线宽设置为0.0f,其实和最大值8.0f的效果是一样的。
有图为证:

浙公网安备 33010602011771号