1. 程式人生 > >小流涓涓成江海,拙技點點構平臺——OpenGL裡畫個帶方向箭頭的線段

小流涓涓成江海,拙技點點構平臺——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是通過旋轉角度計算得到的。