原以为画个宽点的直线, 非常easy, 结果弄了半天, 才发现opengl在我机器就只支持0~7的宽度!
这要画20像素的直线如何做? (要技持点画线, 抗锯齿, 半透明)(画几次, 算起来很麻烦, 而且抗锯齿, 半透明后, 会出问题)
(画矩形, 要做到点画线, 也太麻烦了)

解决方案 »

  1.   

    嗯, 确实是个好方法!
    代码如下, 以便他人参考: //////////////////////////////////////////////////////////////////////////
    //画10个像素宽的矩形;
    //////////////////////////////////////////////////////////////////////////
    //准备填充样式
    BYTE mask[32][32];
    for(int i=0; i<32; i+=4)
    {
    memset(&mask[i], 0xFF, 32);
    memset(&mask[i+1], 0xFF, 32);
    memset(&mask[i+2], 0, 32);
    memset(&mask[i+3], 0, 32);
    }
    glPolygonStipple((BYTE*)mask);
    glEnable(GL_POLYGON_STIPPLE); //画多边形
    glBegin(GL_POLYGON);
    glColor3f(0.0f,1.0f,0.0f);
    glVertex2i( 0, 0);
    glVertex2i( 100, 500);
    glVertex2i( 110, 500);
    glVertex2i( 10, 0);
    glEnd(); //关闭填充样式
    glDisable(GL_POLYGON_STIPPLE); //////////////////////////////////////////////////////////////////////////
    //为矩形描边抗锯齿的边;
    //////////////////////////////////////////////////////////////////////////
    //开启抗锯齿功能
    glEnable(GL_LINE_SMOOTH);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_BLEND); //线条宽1, 样式与矩形填充模式一样
    glLineWidth(1.0);
    glEnable(GL_LINE_STIPPLE);
    glLineStipple(8,0x3333); //描边
    glBegin(GL_LINES);
    glVertex2i( 0, 0);
    glVertex2i( 100, 500);
    glEnd();
    glBegin(GL_LINES);
    glVertex2i( 10, 0);
    glVertex2i( 110, 500);
    glEnd(); //关闭抗锯齿
    glDisable(GL_LINE_SMOOTH);
    glDisable(GL_BLEND);
      

  2.   

    只是上面有一点不太明白://描边
    glBegin(GL_LINES);
    glVertex2i( 0, 0);
    glVertex2i( 100, 500);
    glEnd();
    glBegin(GL_LINES);
    glVertex2i( 10, 0);
    glVertex2i( 110, 500);
    glEnd();
    若两条线之间的" glEnd(); glBegin(GL_LINES); "去掉, 
    第二条线抗锯齿好像不太行, 只有前一段生效, 后段没效果;