zoukankan      html  css  js  c++  java
  • 2、事例二: 三角形的几何变换平移(Translate)、旋转(Scale)、缩放(Rotate)

    namespace sharpGLTest02
    {
        public partial class Form1 : Form
        {
            private int mtype = 3;
            public Form1()
            {
                InitializeComponent();
            }
    
            //初始化
            private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
            {
    
            }
            //调整
            private void openGLControl1_Resize(object sender, EventArgs e)
            {
    
            }
            //画图
            private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
            {
                SharpGL.OpenGL gl = this.openGLControl1.OpenGL;
    
                gl.ClearColor(0, 0, 0, 1);
                //清除深度缓存 
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
    
                switch (mtype)
                {
                    case 0:
                        translateSample(gl);
                        break;
                    case 1:
                        rotateSample(gl);
                        break;
                    case 2:
                        scaleSample(gl);
                        break;
                    case 3:
                        originSample(gl);
                        break;
                }
                gl.Finish();
                gl.Flush(); //强制刷新
            }
            private void originSample(SharpGL.OpenGL gl)
            {
                gl.LoadIdentity();
                gl.Translate(0f, 0f, -1f);
                drawPT(gl);
    
                //gl.LoadIdentity();
                //gl.Translate(0f, 1f, -1f);
                //drawPT(gl);
            }
    
            private void scaleSample(SharpGL.OpenGL gl)
            {
                gl.LoadIdentity();
                //缩放
                //gl.Scale(1f, 1f, 1f);
                gl.Scale(1f, 2f, 1f);
                gl.Translate(0, 0, -9f);
                drawPT(gl);
    
                gl.LoadIdentity();
                gl.Scale(5f, 1f, 1f);
                //gl.Translate(0, 1, -9f);
                gl.Translate(0, 2, -9f);
                drawPT(gl);
            }
    
            private void rotateSample(SharpGL.OpenGL gl)
            {
                gl.LoadIdentity();
                //旋转
                gl.Rotate(0,0, 45);
                gl.Translate(0, 0, -3f);
                drawPT(gl);
    
                //gl.Rotate(0, 0, 45);
                //gl.Translate(-1, 1,0f);
                //drawPT(gl);
            }
    
            private void translateSample(SharpGL.OpenGL gl)
            {
                //重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
                gl.LoadIdentity();
                //因为gl.LoadIdentity();将变换点移到原点,坐标轴变换位置到(0, 0, -3),注意此时是相对上面(0,0,0)点定位 
                gl.Translate(0f, 0f, -3f);
                drawPT(gl);
    
                gl.LoadIdentity();
                //gl.Translate(0f, 0.5f, -3f);
                gl.Translate(0f, 1f, -3f);
                //gl.Translate(0f, 1.5f, -3f);
                drawPT(gl);
            }
    
            private void drawPT(SharpGL.OpenGL gl)
            {
                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();
            }
    
            //按钮点击事件
            private void btnTranslate_Click(object sender, EventArgs e)
            {
                switch(((Button)sender).Name)
                {
                    case "btnTranslate":
                        mtype = 0;
                        break;
                    case "btnRotate":
                        mtype = 1;
                        break;
                    case "btnScale":
                        mtype = 2;
                        break;
                    case "btnOrigin":
                        mtype = 3;
                        break;
                }
            }
            
        }
    }
    我驰骋天下,守你盛世繁华
  • 相关阅读:
    插入排序
    阅读书单 2012 8月至12月
    sed学习1
    sed入门(一直在改变系列2)
    linux find资料(一直在改变系列4)
    awk入门(一直在改变系列1)
    分治算法
    shell脚本知识点1(一直在改变系列3)
    选择排序(selection sort)
    英语单词循环记忆第一期(自学使用)
  • 原文地址:https://www.cnblogs.com/lotuses/p/11357920.html
Copyright © 2011-2022 走看看