小流涓涓成江海,拙技點點構平臺——OpenGL裡畫個帶方向箭頭的線段
我用OpenGL畫個箭頭基本思路是這樣的:
1、確定起點和終點;
2、確定方向;
3、確定箭翼的長度;
4、畫出箭頭兩側;
帶箭頭的線就畫好了。
lineto(origin,dst)
//////////////////////////////////////////
float signX = 1.0;
float signY = 1.0;/// X,Y軸向的符號標記
float deltX = dst.X - origin.X;
float deltY = dst.Y-origin.Y;
float cosalph = deltX/sqrt(deltX*deltX+deltY*deltY);//算一算旋轉的角度
float sinalph = deltY/sqrt(deltX*deltX+deltY*deltY);
float x = cosalph*(-箭翼長度*signX);
float y = sinalph*(-箭翼長度*signY);
if(deltX>=0)
{
signX =-1.0;
}
if(deltY>=0)
{
signY =-1.0;
}
/// 畫帶箭頭的直線
glLineWidth(1.0);
glColor3f(1.0,0,0);
glEnable(GL_LINE_SMOOTH);
glBegin(GL_LINES);
glVertex2f(originX,originY);
glVertex2f(dstX,dstY);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex2f((x*cos(-0.5)- y*sin(0.5))+dstX,(x*sin(-0.5)+y*cos(-0.5))+dstY); /\
glVertex2f(dstX,dstY); / | \
glVertex2f((x*cos(0.5)- y*sin(0.5))+dstX,(x*sin(0.5)+y*cos(0.5))+dstY); |
glEnd(); |
glDisable(GL_LINE_SMOOTH);
張開的角度實際是箭頭兩邊的線相對於中間的線旋轉的角度,例項中0.5是通過旋轉角度計算得到的。