原以为画个宽点的直线, 非常easy, 结果弄了半天, 才发现opengl在我机器就只支持0~7的宽度!
这要画20像素的直线如何做? (要技持点画线, 抗锯齿, 半透明)(画几次, 算起来很麻烦, 而且抗锯齿, 半透明后, 会出问题)
(画矩形, 要做到点画线, 也太麻烦了)
这要画20像素的直线如何做? (要技持点画线, 抗锯齿, 半透明)(画几次, 算起来很麻烦, 而且抗锯齿, 半透明后, 会出问题)
(画矩形, 要做到点画线, 也太麻烦了)
代码如下, 以便他人参考: //////////////////////////////////////////////////////////////////////////
//画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);
glBegin(GL_LINES);
glVertex2i( 0, 0);
glVertex2i( 100, 500);
glEnd();
glBegin(GL_LINES);
glVertex2i( 10, 0);
glVertex2i( 110, 500);
glEnd();
若两条线之间的" glEnd(); glBegin(GL_LINES); "去掉,
第二条线抗锯齿好像不太行, 只有前一段生效, 后段没效果;