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的效果是一样的。

    有图为证:

posted @ 2013-04-01 09:18  Tup  阅读(465)  评论(0)    收藏  举报