1

SharpGl で線を引きたいのですが、このコードは機能しません。

void Line_DDA(OpenGL gl,int X0, int Y0, int Xend, int Yend)
    {

        gl.LineWidth(2.5f);
        gl.Color(1.0, 0.0, 0.0);
        gl.Begin(OpenGL.GL_LINES);


        int dx = Xend - X0;
        int dy = Yend - Y0;
        int steps, k;
        float Xinc, Yinc;
        float x = X0;
        float y = Y0;

        if (Math.Abs(dx) > Math.Abs(dy))
            steps = Math.Abs(dx);
        else
            steps = Math.Abs(dy);

        float fdx = (float)dx;
        float fdy = (float)dy;
        float fsteps = (float)steps;
        Xinc = fdx / fsteps;
        Yinc = fdy / fsteps;

        gl.Vertex((int)x, (int)y);

        for (k = 0; k < steps; k++)
        {
            x += Xinc;
            y += Yinc;
            gl.Vertex((int)x, (int)y);
        }

        gl.End();

    }

そして私が使うとき

             gl.Vertex(10, 100);
             gl.Vertex(110, 110);

仕事だ!

編集:

これは私のコードの呼び出しブロックです:

private void openGLControl_OpenGLDraw(object sender, PaintEventArgs e)
    {
        //  Get the OpenGL object.
        OpenGL gl = openGLControl.OpenGL;

        //  Clear the color and depth buffer.
        gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

        //  Load the identity matrix.
        gl.LoadIdentity();

        Line_DDA(gl, int.Parse(txtLineX1.Text), int.Parse(txtLineY1.Text), int.Parse(txtLineX2.Text), int.Parse(txtLineY2.Text));
        //drawLine(gl, 110, 120, 100, 100);
    }

なぜこれが起こるのですか?

4

1 に答える 1

0

を使用して線を描画する場合GL_LINES、線分ごとに 2 つの頂点を指定する必要があります。代わりに、コードは、線が前の頂点に接続されているかのように、線分ごとに 1 つの頂点を提供します。

実際、解決策は、描画モードを に設定するGL_LINE_STRIPか、各線分に 2 つの頂点を指定することです。

ただし、必要な点が 2 つだけの場合に、複数の頂点を持つ直線を描画する理由がわかりません。

于 2013-01-27T09:35:56.860 に答える