図2に示すように、二つの例:(回転)をスケーリングする三角形の幾何学的変換変換(翻訳)、回転(スケール)

名前空間sharpGLTest02 
{ 
    パブリック 部分 クラスをForm1:フォーム
    { 
        プライベート int型の MTYPE = 3 ;
        公共のForm1()
        { 
            のInitializeComponent(); 
        } 

        // 初始化
        プライベート ボイド openGLControl1_OpenGLInitialized(オブジェクト送信者、のEventArgs電子)
        { 

        } 
        // 调整
        プライベート ボイド openGLControl1_Resize(オブジェクト送信者、E EventArgs)を
        { 

        } 
        // 画图
        プライベート ボイド openGLControl1_OpenGLDraw(オブジェクト送信者、PaintEventArgsのE)
        { 
            SharpGL.OpenGL GL = この.openGLControl1.OpenGL。

            gl.ClearColor(0001 )。
            // 清除深度缓存 
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT)。

            スイッチ(MTYPE)
            { 
                ケース 0 
                    translateSample(GL)。
                    破ります;
                ケース 1
                    rotateSample(GL)。
                    破ります;
                ケース 2 
                    scaleSample(GL)。
                    破ります;
                ケース 3 
                    originSample(GL)。
                    破ります; 
            } 
            gl.Finish()。
            gl.Flush(); // 强制刷新
        }
         プライベート ボイドoriginSample(SharpGL.OpenGLのGL)
        { 
            gl.LoadIdentity()。
            gl.Translate(0F、0F、 - 1F)。
            drawPT(GL)。

            //gl.LoadIdentity();
            // gl.Translate(0F、1F、-1F)。
            // drawPT(GL); 
        } 

        プライベート ボイドscaleSample(SharpGL.OpenGLのGL)
        { 
            gl.LoadIdentity()。
            // 缩放
             // gl.Scale(1F、1F、1F)。
            gl.Scale(1F、2F、1F)。
            gl.Translate(00、 - 9F)。
            drawPT(GL)。

            gl.LoadIdentity(); 
            gl.Scale(5F、1F、1F)。
            // gl.Translate(0、1、-9f)。
            gl.Translate(02、 -9F); 
            drawPT(GL)。
        } 

        プライベート ボイドrotateSample(SharpGL.OpenGLのGL)
        { 
            gl.LoadIdentity()。
            // 旋转 
            gl.Rotate(0045 ); 
            gl.Translate(00、 - 3F)。
            drawPT(GL)。

            // gl.Rotate(0、0、45);
            // gl.Translate(-1、1,0f)。
            // drawPT(GL); 
        } 

        プライベート ボイドtranslateSample(SharpGL.OpenGLのGL)
        { 
            //現在指定されたマトリックスをリセットして、画面の中央に移動させ、単位行列、現在のユーザ座標系の原点である
            gl.LoadIdentity();
             // gl.LoadIdentity()があるので、原点にポイントを変換し、(位置まで軸座標変換0、0、-3)、そしてこれが(0,0,0)点位置に対して上述した 
            gl.Translate(0F、0F、 - 3F); 
            drawPT(GL); 

            gl.LoadIdentity(); 
            // GL。翻訳(0F、0.5F、-3f); 
            gl.Translate(0F、1F、 - 3F);
             // gl.Translate(0F、1.5F、-3f); 
            drawPT(GL); 
        } 

        プライベート ボイドdrawPT(SharpGL。 GLのOpenGL)
        { 
            gl.PointSize(5F); 
            gl.Begin(OpenGL.GL_TRIANGLES); 
            { 
                gl.Vertex(0.0f、0F、は0.0f ); 
                gl.Vertex( - 1.0F、-1F、は0.0f ); 
                gl.Vertex(1.0F、-1F、は0.0f ); 
            } 
            gl.End(); 
        } 

        // ボタンのクリックイベント
        専用 のボイド btnTranslate_Click(オブジェクト送信者、EventArgsのE)
        { 
            スイッチ(((ボタン)SENDER).nameの)
            { 
                ケース " btnTranslate " 
                    MTYPE = 0 ;
                     BREAK;
                場合 " btnRotate " 
                    MTYPE = 1 破ります;
                場合 " btnScale " 
                    MTYPE = 2 破ります;
                ケース " btnOrigin " 
                    MTYPE = 3 ;
                    破ります; 
            } 
        } 
        
    } 
}

 

おすすめ

転載: www.cnblogs.com/lotuses/p/11357920.html