首页 > 代码库 > OpenGL小试牛刀第一季

OpenGL小试牛刀第一季

效果截图:图片
代码展示:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SharpGL;
namespace Example1
{
    public partial class FormExample : Form
    {
        public FormExample()
        {
            InitializeComponent();
            rbfull.Checked = true;
        }
        /// <summary>
        /// 默认绘画模式为线条
        /// </summary>
        private uint _model = OpenGL.LINE_LOOP;
        /// <summary>
        /// X轴坐标
        /// </summary>
        private float _x = 0;
        /// <summary>
        /// Y轴坐标
        /// </summary>
        private float _y = 0;
        /// <summary>
        /// Z轴坐标
        /// </summary>
        private float _z = 0;
        private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
        {
            // 创建一个GL对象
            SharpGL.OpenGL gl = this.openGLControl1.OpenGL;
            gl.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT); // 清空屏幕
            gl.LoadIdentity();     // 重置
            gl.Translate(0.0f, 0.0f, -6.0f); // 设置坐标,距离屏幕距离为6
            gl.Rotate(_x, 1.0f, 0.0f, 0.0f); // 绕X轴旋转
            gl.Rotate(_y, 0.0f, 1.0f, 0.0f); // 绕Y轴旋转
            gl.Rotate(_z, 0.0f, 0.0f, 1.0f); // 绕Z轴旋转
            gl.Begin(_model);        // 绘制立方体
            gl.Color(0.0f, 1.0f, 0.0f);   // 设置颜色
            //绘制其中一个面
            gl.Vertex(1.0f, 1.0f, -1.0f);  
            gl.Vertex(-1.0f, 1.0f, -1.0f);  
            gl.Vertex(-1.0f, 1.0f, 1.0f);   
            gl.Vertex(1.0f, 1.0f, 1.0f);  
            //如下类同
            gl.Color(1.0f, 0.5f, 0.0f);  
            gl.Vertex(1.0f, -1.0f, 1.0f); 
            gl.Vertex(-1.0f, -1.0f, 1.0f); 
            gl.Vertex(-1.0f, -1.0f, -1.0f); 
            gl.Vertex(1.0f, -1.0f, -1.0f); 
            gl.Color(1.0f, 0.0f, 0.0f);  
            gl.Vertex(1.0f, 1.0f, 1.0f); 
            gl.Vertex(-1.0f, 1.0f, 1.0f); 
            gl.Vertex(-1.0f, -1.0f, 1.0f); 
            gl.Vertex(1.0f, -1.0f, 1.0f); 
            gl.Color(1.0f, 1.0f, 0.0f);  
            gl.Vertex(1.0f, -1.0f, -1.0f); 
            gl.Vertex(-1.0f, -1.0f, -1.0f); 
            gl.Vertex(-1.0f, 1.0f, -1.0f); 
            gl.Vertex(1.0f, 1.0f, -1.0f); 
            gl.Color(0.0f, 0.0f, 1.0f);  
            gl.Vertex(-1.0f, 1.0f, 1.0f); 
            gl.Vertex(-1.0f, 1.0f, -1.0f); 
            gl.Vertex(-1.0f, -1.0f, -1.0f); 
            gl.Vertex(-1.0f, -1.0f, 1.0f); 
            gl.Color(1.0f, 0.0f, 1.0f);  
            gl.Vertex(1.0f, 1.0f, -1.0f); 
            gl.Vertex(1.0f, 1.0f, 1.0f); 
            gl.Vertex(1.0f, -1.0f, 1.0f); 
            gl.Vertex(1.0f, -1.0f, -1.0f); 
            gl.End();      // 结束绘制
        }
        private void rbfull_CheckedChanged(object sender, EventArgs e)
        {
            _model = OpenGL.QUADS;
        }
        private void rbline_CheckedChanged(object sender, EventArgs e)
        {
            _model = OpenGL.LINE_LOOP;
        }
        private void tbX_Scroll(object sender, EventArgs e)
        {
            int x = tbX.Value;
            _x = x;
            labX.Text = "X:" + x;
        }
        private void tbY_Scroll(object sender, EventArgs e)
        {
            int y = tbY.Value;
            _y = y;
            labY.Text = "Y:" + y;
        }
        private void tbZ_Scroll(object sender, EventArgs e)
        {
            int z = tbZ.Value;
            _z = z;
            labZ.Text = "Z:" + z;
        }
        private void btnReset_Click(object sender, EventArgs e)
        {
            _x = _y = _z = 0;
        }
    }