Opengl es 如何使用OpenGL ES 1绘制虚线?
要在OpenGL中绘制虚线,我可以使用GllineStiple,但如何在OpenGL ES 1中实现相同的效果?线条可以像三角形一样进行纹理处理。启用alpha测试,应用alpha纹理,设置一些纹理坐标,然后欣赏。事实上,我已经意识到圆点线或虚线用于循环,但将其用作绘图方法的线型链接仍然毫无意义,下面是我的圆点线和虚线的代码:Opengl es 如何使用OpenGL ES 1绘制虚线?,opengl-es,Opengl Es,要在OpenGL中绘制虚线,我可以使用GllineStiple,但如何在OpenGL ES 1中实现相同的效果?线条可以像三角形一样进行纹理处理。启用alpha测试,应用alpha纹理,设置一些纹理坐标,然后欣赏。事实上,我已经意识到圆点线或虚线用于循环,但将其用作绘图方法的线型链接仍然毫无意义,下面是我的圆点线和虚线的代码: glPushAttrib(GL_ENABLE_BIT); # glPushAttrib is done to return everything to normal a
glPushAttrib(GL_ENABLE_BIT);
# glPushAttrib is done to return everything to normal after drawing
glLineStipple(1, 0xAAAA); # [1]
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINES);
glVertex3f(-.5,.5,-.5);
glVertex3f(.5,.5,-.5);
glEnd();
glPopAttrib();
圆点线:
(void)drawVerticalDotedInternalGrid{
float a,b;
int drawCount =0;
GLfloat dotedInternalGrid[1296];
for (a = -0.5f; a <= 0.5f; a +=0.5f) {
for (b = -0.875f; b <=0.925f; b += 0.025f)
{
dotedInternalGrid[drawCount] = b;
drawCount++;
dotedInternalGrid[drawCount] = a;
drawCount++;
};
};
glPointSize(1.0f);
glColor4f(0.863f,0.863f,0.863f,0.8f); //line color
glVertexPointer(2, GL_FLOAT, 0, dotedInternalGrid);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_POINTS, 0, 648);
glDisableClientState(GL_VERTEX_ARRAY);
}
(无效)drawVerticalDotedInternalGrid{
浮子a、b;
int drawCount=0;
GLfloat点式内部网格[1296];
为了便于解释(a=-0.5f;a,我将drawHorizontalDashedLine()放在第一位
要理解,请单击此图像。
因为我的名声,我不能在这篇文章上贴图片。
+(void)绘图水平虚线:(GLfloat)x1 x2:(GLfloat)x2 y:(GLfloat)y{
//参数
GLfloat破折号长度=4.0f;
GLfloat间隙长度=2.0f;
GLfloat LINE_厚度=1.5f;
//计算绘制整条直线需要多少虚线
GLF水平长度=fabsf(x2-x1);
int nDashedLineCount=f横向长度/(短划线长度+间隙长度);
int nVerticesSize=nDashedLineCount*4;//虚线有4个值(2个点)
//顶点
GLfloat顶点[重新认证];
//第一条虚线表示顶点
顶点[0]=(x1
drawDashedLine()
我用三角函数来计算长度
+(void)drawDashedLine:(CGPoint)point1 point2:(CGPoint)point2 {
//Parameters
GLfloat DASH_LENGTH = 3.0f;
GLfloat GAP_LENGTH = 1.0f;
GLfloat LINE_THICKNESS = 1.5f;
//Calculate how many dashes require to draw the whole line
GLfloat fWidth = point2.x - point1.x;
GLfloat fHeight = point2.y - point1.y;
GLfloat fRadian = atan2(fHeight, fWidth);
float fLineLength = sqrtf(powf(fWidth, 2) + powf(fHeight, 2));
int nDashedLineCount = fabsf(fLineLength / (DASH_LENGTH + GAP_LENGTH));
int nVerticesSize = nDashedLineCount * 4; //A dashed line has 4 values(2 points)
//Vertex
GLfloat vertices[nVerticesSize];
//The first dashed line vertices
vertices[0] = point1.x;
vertices[1] = point1.y;
vertices[2] = point1.x + cosf(fRadian) * DASH_LENGTH;
vertices[3] = point1.y + sinf(fRadian) * DASH_LENGTH;
//The other vertices of dashed lines
for (int nIndex=4; nIndex < nVerticesSize; nIndex=nIndex+4) {
vertices[nIndex] = vertices[nIndex-2] + cosf(fRadian) * GAP_LENGTH;
vertices[nIndex+1] = vertices[nIndex-1] + sinf(fRadian) * GAP_LENGTH;
vertices[nIndex+2] = vertices[nIndex] + cosf(fRadian) * DASH_LENGTH;
vertices[nIndex+3] = vertices[nIndex+1] + sinf(fRadian) * DASH_LENGTH;
//NSLog(@"DrawDash Point1(%.2f, %.2f)", vertices[nIndex], vertices[nIndex+1]);
//NSLog(@"DrawDash Point2(%.2f, %.2f)", vertices[nIndex+2], vertices[nIndex+3]);
}
//Draw the arrays
glPushMatrix();
glLineWidth(LINE_THICKNESS);
glVertexPointer (2, GL_FLOAT, 0, vertices);
glDrawArrays (GL_LINES, 0, nVerticesSize/2);
glPopMatrix();
}
+(void)drawDashedLine:(CGPoint)点1点2:(CGPoint)点2{
//参数
GLfloat破折号长度=3.0f;
GLfloat间隙长度=1.0f;
GLfloat LINE_厚度=1.5f;
//计算绘制整条直线需要多少虚线
GLfloat fWidth=点2.x-点1.x;
GLfloat FHHEIGHT=点2.y-点1.y;
GLfloat fRadian=atan2(高度,宽度);
浮子长度=sqrtf(功率(宽度,2)+功率(高度,2));
int nDashedLineCount=fabsf(长度/(短划线长度+间隙长度));
int nVerticesSize=nDashedLineCount*4;//虚线有4个值(2个点)
//顶点
GLfloat顶点[重新认证];
//第一条虚线表示顶点
顶点[0]=点1.x;
顶点[1]=点1.y;
顶点[2]=点1.x+cosf(fRadian)*破折号长度;
顶点[3]=点1.y+sinf(fRadian)*破折号长度;
//虚线的其他顶点
对于(int nIndex=4;nIndex
这看起来像是一段复制粘贴的代码,可能来自
+(void)drawHorizontalDashedLine:(GLfloat)x1 x2:(GLfloat)x2 y:(GLfloat)y {
//Parameters
GLfloat DASH_LENGTH = 4.0f;
GLfloat GAP_LENGTH = 2.0f;
GLfloat LINE_THICKNESS = 1.5f;
//Calculate how many dashes require to draw the whole line
GLfloat fHorizontalLength = fabsf(x2-x1);
int nDashedLineCount = fHorizontalLength / (DASH_LENGTH + GAP_LENGTH);
int nVerticesSize = nDashedLineCount * 4; //A dashed line has 4 values(2 points)
//Vertex
GLfloat vertices[nVerticesSize];
//The first dashed line vertices
vertices[0] = (x1 < x2)? x1 : x2;
vertices[1] = y;
vertices[2] = (x1 < x2)? x1 : x2 + DASH_LENGTH;
vertices[3] = y;
//The other vertices of dashed lines
for (int nIndex=4; nIndex < nVerticesSize; nIndex=nIndex+4) {
vertices[nIndex] = vertices[nIndex-2] + GAP_LENGTH;
vertices[nIndex+1] = y;
vertices[nIndex+2] = vertices[nIndex] + DASH_LENGTH;
vertices[nIndex+3] = y;
//NSLog(@"Point1(%.2f, %.2f)", vertices[nIndex], vertices[nIndex+1]);
//NSLog(@"Point2(%.2f, %.2f)", vertices[nIndex+2], vertices[nIndex+3]);
}
//Draw the arrays
glPushMatrix();
glLineWidth(LINE_THICKNESS);
glVertexPointer (2, GL_FLOAT, 0, vertices);
glDrawArrays (GL_LINES, 0, nVerticesSize/2);
glPopMatrix();
}
+(void)drawDashedLine:(CGPoint)point1 point2:(CGPoint)point2 {
//Parameters
GLfloat DASH_LENGTH = 3.0f;
GLfloat GAP_LENGTH = 1.0f;
GLfloat LINE_THICKNESS = 1.5f;
//Calculate how many dashes require to draw the whole line
GLfloat fWidth = point2.x - point1.x;
GLfloat fHeight = point2.y - point1.y;
GLfloat fRadian = atan2(fHeight, fWidth);
float fLineLength = sqrtf(powf(fWidth, 2) + powf(fHeight, 2));
int nDashedLineCount = fabsf(fLineLength / (DASH_LENGTH + GAP_LENGTH));
int nVerticesSize = nDashedLineCount * 4; //A dashed line has 4 values(2 points)
//Vertex
GLfloat vertices[nVerticesSize];
//The first dashed line vertices
vertices[0] = point1.x;
vertices[1] = point1.y;
vertices[2] = point1.x + cosf(fRadian) * DASH_LENGTH;
vertices[3] = point1.y + sinf(fRadian) * DASH_LENGTH;
//The other vertices of dashed lines
for (int nIndex=4; nIndex < nVerticesSize; nIndex=nIndex+4) {
vertices[nIndex] = vertices[nIndex-2] + cosf(fRadian) * GAP_LENGTH;
vertices[nIndex+1] = vertices[nIndex-1] + sinf(fRadian) * GAP_LENGTH;
vertices[nIndex+2] = vertices[nIndex] + cosf(fRadian) * DASH_LENGTH;
vertices[nIndex+3] = vertices[nIndex+1] + sinf(fRadian) * DASH_LENGTH;
//NSLog(@"DrawDash Point1(%.2f, %.2f)", vertices[nIndex], vertices[nIndex+1]);
//NSLog(@"DrawDash Point2(%.2f, %.2f)", vertices[nIndex+2], vertices[nIndex+3]);
}
//Draw the arrays
glPushMatrix();
glLineWidth(LINE_THICKNESS);
glVertexPointer (2, GL_FLOAT, 0, vertices);
glDrawArrays (GL_LINES, 0, nVerticesSize/2);
glPopMatrix();
}