• 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;
                }
            }
            
        }
    }
    我驰骋天下,守你盛世繁华
  • 相关阅读:
    Java基础知识回顾
    设计模式简单回顾
    数据结构基础知识
    《More Effective C#》读书笔记
    《Effective C#》读书笔记
    《编程匠艺》读书笔记
    《Scrum实战》读书会作业01
    开始一段新的敏捷学习之旅 —— IT帮读书会第4期《Scrum实战》
    【译】别学框架,学架构
    AngularJS学习笔记(1)
  • 原文地址:https://www.cnblogs.com/lotuses/p/11357920.html
Copyright © 2020-2023  润新知