OpenGLで巻線ルールを実装する

私はOpenGLでマウスポインタを使ってポリゴンを描画するこのコードを持っています。今度はこれを描画した後、ポリゴンを塗りつぶしてからポリゴンがポリゴンの内側か外側かで塗りつぶされているかどうかを調べるための巻き取りルールを実装するようにしたいと思います。どのように私はこれを達成することができます誰も教えてくれますか?

#include 
#include 
#include
GLsizei winWidth=400,winHeight=300;
GLint endPtCtr=0;
using namespace std;

class scrPt
{
public:
    GLint x,y;
};
void init(void)
{
    glClearColor(0.0,0.0,1.0,1.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
}
void displayFcn(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
}
void winReshapeFcn(GLint newWidth,GLint newHeight)
{
    glViewport(0,0,newWidth,newHeight);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));
    winWidth=newWidth;
    winHeight=newHeight;
}
void drawLineSegment(scrPt endPt1,scrPt endPt2)
{
    glBegin(GL_LINES);
    glVertex2i(endPt1.x,endPt1.y);
    glVertex2i(endPt2.x,endPt2.y);
    glEnd();
}
void polyLine(GLint button,GLint action,GLint xMouse,GLint yMouse)
{
    static scrPt endPt1,endPt2;
    if(endPtCtr==0)
    {
        if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN)
        {
            endPt1.x=xMouse;
            endPt1.y=winHeight-yMouse;
            endPtCtr=1;
        }
        else
            if(button==GLUT_RIGHT_BUTTON)
                exit(0);
    }
    else
        if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN)
        {
            endPt2.x=xMouse;
            endPt2.y=winHeight-yMouse;
            drawLineSegment(endPt1,endPt2);
            endPt1=endPt2;
        }
        else
            if(button==GLUT_RIGHT_BUTTON)
                exit(0);
    glFlush();
}
int main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(winWidth,winHeight);
    glutCreateWindow("Draw Interactive Polylines");
    init();
    glutDisplayFunc(displayFcn);
    glutReshapeFunc(winReshapeFcn);
    glutMouseFunc(polyLine);
    glutMainLoop();
}
2
この質問は直接OpenGLに関連したものではありません。あなたは、その目的のために(おそらくベクトル代数を使って)グラフィックスアルゴリズムを実装する必要があります。次に、別の問題は、OpenGLがそれを表示できるように、あなたのルールに従ってポリゴンを三角形分割することです。
追加された 著者 Kos,

1 答え

おそらく、OpenGL Utility Library(「GLU」)が提供するテッセレーターを使用することをお勧めします。 gluTessPropertyを使用して、奇数、零、負、正、または2以上の任意の値で巻線規則を指定できます。テッセレーションには、ユーザが記述したポリゴンなどの任意のポリゴンを、OpenGLがレンダリングできる凸ポリゴンのセットに変換する効果があります。

GLUは、システムライブラリとして提供されています。 Windows上では、通常、Linuxの派生OSで利用できますが、MESA実装を比較的簡単にプロジェクトに直接組み込むことができます。私はそれを例えばiPadアプリケーションに配備しました。

追加:Dev Cを使用している場合は、すでにlibglu32.aライブラリが必要です。おそらく-lglu32経由でリンクしてください。その後、ここのコードとガイダンスを使用することができます(特に、巻き線の規則について)、またはこちらをご覧ください。

4
追加された
どのように私はdevのC +ウィンドウでOpenGLを使用してこれを実装することができますか?より具体的に私をガイドしてください..または私はあなたができる場合は私に例のコードを提供してください...ありがとう
追加された 著者 james,
悲しいことに私はもうWindowsユーザーではないので、特に具体的なことはできませんが、GLUがどのように動作するかをスピードアップするためのリンクをいくつか追加しました。Dev CはDev Cが本来正しい関連するDLLにリンクするライブラリ。
追加された 著者 Tommy,