zoukankan      html  css  js  c++  java
  • 5、事例五:视口变换(Viewport)

    namespace sharpGLTest05
    {
        public partial class SharpGLForm : Form
        {
            public SharpGLForm()
            {
                InitializeComponent();
            }
    
            private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e)
            {
                OpenGL gl = openGLControl.OpenGL;
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
                gl.LoadIdentity();
                display(gl);
            }
    
            void display(OpenGL gl)
            {
                gl.Color(1.0, 0.0, 0.0);
                /*
                 * Viewport()函数,可以将透视投影、正射投影等类似的视景体显示到屏幕指定的区域内
                 * 默认情况下,视口就是你用来绘制3D图像的整个矩形区域 
                 * 1)Viewport定义了视口在窗口中的区域,同时也规定看二维像素平面到视口区域的映射关系
                 * 2)可以利用Viewport()生成多窗口效果
                 *  Viewport(0,0,w/2,h/2);      左下角
                 *  Viewport(w/2,0,w/2,h/2);    右下角
                 *  Viewport(0,h/2,w/2,h/2);    左上角
                 *  Viewport(w/2,h/2,w/2,h/2);  右上角
                 * */
                //画分割线,分成四个视见区
                gl.Viewport(0, 0, 600, 600);
                gl.Begin(OpenGL.GL_LINES);
                {
                    gl.Vertex(-1.0, 0);
                    gl.Vertex(1.0, 0);
                    gl.Vertex(0.0, -1.0);
                    gl.Vertex(0.0, 1.0);
                }
                gl.End();
    
                //定义在左下角的区域
                gl.Color(0.0, 1.0, 0.0);
                gl.Viewport(0, 0, 200, 200);
                gl.Begin(OpenGL.GL_POLYGON);
                {
                    gl.Vertex(-0.5, -0.5);
                    gl.Vertex(-0.5, 0.5);
                    gl.Vertex(0.5, 0.5);
                    gl.Vertex(0.5, -0.5);
                }
                gl.End();
    
                //定义在右上角的区域
                gl.Color(0.0, 0.0, 1.0);
                gl.Viewport(300, 300, 300, 300);
                gl.Begin(OpenGL.GL_POLYGON);
                {
                    gl.Vertex(-0.5, -0.5);
                    gl.Vertex(-0.5, 0.5);
                    gl.Vertex(0.5, 0.5);
                    gl.Vertex(0.5, -0.5);
                }
                gl.End();
    
                //定义在左上角的区域
                gl.Color(1.0, 0.0, 0.0);
                gl.Viewport(0, 300, 300, 200);
                gl.Begin(OpenGL.GL_POLYGON);
                {
                    gl.Vertex(-0.5, -0.5);
                    gl.Vertex(-0.5, 0.5);
                    gl.Vertex(0.5, 0.5);
                    gl.Vertex(0.5, -0.5);
                }
                gl.End();
    
                //定义在右下角
                gl.Color(1.0, 1.0, 1.0);
                gl.Viewport(200, 0, 200, 200);
                gl.Begin(OpenGL.GL_POLYGON);
                {
                    gl.Vertex(-0.5, -0.5);
                    gl.Vertex(-0.5, 0.5);
                    gl.Vertex(0.5, 0.5);
                    gl.Vertex(0.5, -0.5);
                }
                gl.End();
    
                gl.Flush();
            }
    
            private void openGLControl_OpenGLInitialized(object sender, EventArgs e)
            {
                OpenGL gl = openGLControl.OpenGL;
                gl.ClearColor(0, 0, 0, 0);
            }
    
            private void openGLControl_Resized(object sender, EventArgs e)
            {
    
                OpenGL gl = openGLControl.OpenGL;
                gl.MatrixMode(OpenGL.GL_PROJECTION);
                gl.LoadIdentity();
                gl.Ortho2D(-1.0, 1.0, -1.0, 1.0);
                gl.MatrixMode(OpenGL.GL_MODELVIEW);
            }
    
        }
    }
  • 相关阅读:
    Eclipse配置Struts2
    Servlet读取头信息
    JAVA基础
    Start Tomcat v8.0 Server at localhost错误
    Eclipse 配置Server Location时灰色,不可用
    Windows 7安装apache-tomcat-8.0.24
    Sql developer——缺点
    Oracle Database,SQL Server,MySQL的比较
    poj1580---欧几里得算法(辗转相除法)
    poj1565---(数论)skew binary
  • 原文地址:https://www.cnblogs.com/lotuses/p/11357948.html
Copyright © 2011-2022 走看看