OpenGL:矢印を書くコード

arrow.png

webGLデモ

マウスでドラッグすると、矢印が回転します


矢印の角度は30度にした。

コード

for(int y=0;y<nVoxel;y++){
        for(int x=0;x<nVoxel;x++){
            int wi=(platez*nVoxel+y)*nVoxel+x;
            int i=(y)*nVoxel+x;
            theta=atan2(windvector[wi].y,windvector[wi].x);
            float degree = theta * 180.0 / M_PI;
            if(windvector[wi].length()!=0.0){
 
            glPushMatrix();
            glLoadIdentity();
            glTranslatef(size/2+(float)slates[i].corner[0].x,size/2+(float)slates[i].corner[0].y,0.0);
 
            glRotatef(degree,0.0,0.0,1.0);
            glLineWidth(strength[i]);
            glBegin(GL_LINES);
            glVertex3f(-size/2,0,0);
            glVertex3f(size/2,0,0);
            glVertex3f(size/2,0,0);
            glVertex3f(size/6.0,size/(3.0*1.73),0);//1.73はルート3.30度ぐらいの矢印角度にしようと思った。
            glVertex3f(size/2,0,0);
            glVertex3f(size/6.0,-size/(3.0*1.73),0);
 
            glEnd();
 
            glPopMatrix();
            }
        }
 
    }

頂点配列の場合(うまくいかなかった)

うまくいかなかった理由ー>変換行列が効かないのか、超長い矢印になってしまう。

float arrow[]={-size/2,0,0,    size/2,0,0,    size/2,0,0,    size/6.0,size/(3.0*1.73),0,    size/2,0,0,    size/6.0,-size/(3.0*1.73),0};
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3,GL_FLOAT,0,arrow);

webgl

サポートサイト Wikidot.com webgl