5.3D空间---SharpGL【5】

来源:互联网 发布:淘宝快递拒收会退款吗 编辑:程序博客网 时间:2024/05/16 17:45

在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象。我们给三角形增加一个左侧面,一个右侧面,一个后侧面来生成一个金字塔(四棱锥)。给正方形增加左、右、上、下及背面生成一个立方体。

我们混合金字塔上的颜色,创建一个平滑着色的对象。给立方体的每一面则来个不同的颜色。

】from Nehe

 
OpenGLDraw事件响应的源代码如下,这一章节和Nehe的OpenGL教程叙述基本一致,细节可以读Nehe的教程:http://www.imyaker.com/nehe/的第五课
            privatevoid openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
                {
                        // Get the OpenGL object, just to clean up the code.
                        SharpGL.OpenGL gl =this.openGLControl1.OpenGL;

                        gl.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);// Clear The Screen And The Depth Buffer
                        gl.LoadIdentity();            // Reset The View
                        gl.Translate(-1.5f, 0.0f, -6.0f);        // Move Left And Into The Screen

                        gl.Rotate(rtri, 0.0f, 1.0f, 0.0f);        // Rotate The Pyramid On It's Y Axis

                        gl.Begin(OpenGL.TRIANGLES);            // Start Drawing The Pyramid

                        gl.Color(1.0f, 0.0f, 0.0f);        // Red
                        gl.Vertex(0.0f, 1.0f, 0.0f);        // Top Of Triangle (Front)
                        gl.Color(0.0f, 1.0f, 0.0f);        // Green
                        gl.Vertex(-1.0f, -1.0f, 1.0f);        // Left Of Triangle (Front)
                        gl.Color(0.0f, 0.0f, 1.0f);        // Blue
                        gl.Vertex(1.0f, -1.0f, 1.0f);        // Right Of Triangle (Front)

                        gl.Color(1.0f, 0.0f, 0.0f);        // Red
                        gl.Vertex(0.0f, 1.0f, 0.0f);        // Top Of Triangle (Right)
                        gl.Color(0.0f, 0.0f, 1.0f);        // Blue
                        gl.Vertex(1.0f, -1.0f, 1.0f);        // Left Of Triangle (Right)
                        gl.Color(0.0f, 1.0f, 0.0f);        // Green
                        gl.Vertex(1.0f, -1.0f, -1.0f);        // Right Of Triangle (Right)

                        gl.Color(1.0f, 0.0f, 0.0f);        // Red
                        gl.Vertex(0.0f, 1.0f, 0.0f);        // Top Of Triangle (Back)
                        gl.Color(0.0f, 1.0f, 0.0f);        // Green
                        gl.Vertex(1.0f, -1.0f, -1.0f);        // Left Of Triangle (Back)
                        gl.Color(0.0f, 0.0f, 1.0f);        // Blue
                        gl.Vertex(-1.0f, -1.0f, -1.0f);        // Right Of Triangle (Back)

                        gl.Color(1.0f, 0.0f, 0.0f);        // Red
                        gl.Vertex(0.0f, 1.0f, 0.0f);        // Top Of Triangle (Left)
                        gl.Color(0.0f, 0.0f, 1.0f);        // Blue
                        gl.Vertex(-1.0f, -1.0f, -1.0f);        // Left Of Triangle (Left)
                        gl.Color(0.0f, 1.0f, 0.0f);        // Green
                        gl.Vertex(-1.0f, -1.0f, 1.0f);        // Right Of Triangle (Left)
                        gl.End();            // Done Drawing The Pyramid

                        gl.LoadIdentity();
                        gl.Translate(1.5f, 0.0f, -7.0f);        // Move Right And Into The Screen

                        gl.Rotate(rquad, 1.0f, 1.0f, 1.0f);        // Rotate The Cube On X, Y & Z

                        gl.Begin(OpenGL.QUADS);            // Start Drawing The Cube

                        gl.Color(0.0f, 1.0f, 0.0f);        // Set The Color To Green
                        gl.Vertex(1.0f, 1.0f, -1.0f);        // Top Right Of The Quad (Top)
                        gl.Vertex(-1.0f, 1.0f, -1.0f);        // Top Left Of The Quad (Top)
                        gl.Vertex(-1.0f, 1.0f, 1.0f);        // Bottom Left Of The Quad (Top)
                        gl.Vertex(1.0f, 1.0f, 1.0f);        // Bottom Right Of The Quad (Top)


                        gl.Color(1.0f, 0.5f, 0.0f);        // Set The Color To Orange
                        gl.Vertex(1.0f, -1.0f, 1.0f);        // Top Right Of The Quad (Bottom)
                        gl.Vertex(-1.0f, -1.0f, 1.0f);        // Top Left Of The Quad (Bottom)
                        gl.Vertex(-1.0f, -1.0f, -1.0f);        // Bottom Left Of The Quad (Bottom)
                        gl.Vertex(1.0f, -1.0f, -1.0f);        // Bottom Right Of The Quad (Bottom)

                        gl.Color(1.0f, 0.0f, 0.0f);        // Set The Color To Red
                        gl.Vertex(1.0f, 1.0f, 1.0f);        // Top Right Of The Quad (Front)
                        gl.Vertex(-1.0f, 1.0f, 1.0f);        // Top Left Of The Quad (Front)
                        gl.Vertex(-1.0f, -1.0f, 1.0f);        // Bottom Left Of The Quad (Front)
                        gl.Vertex(1.0f, -1.0f, 1.0f);        // Bottom Right Of The Quad (Front)

                        gl.Color(1.0f, 1.0f, 0.0f);        // Set The Color To Yellow
                        gl.Vertex(1.0f, -1.0f, -1.0f);        // Bottom Left Of The Quad (Back)
                        gl.Vertex(-1.0f, -1.0f, -1.0f);        // Bottom Right Of The Quad (Back)
                        gl.Vertex(-1.0f, 1.0f, -1.0f);        // Top Right Of The Quad (Back)
                        gl.Vertex(1.0f, 1.0f, -1.0f);        // Top Left Of The Quad (Back)

                        gl.Color(0.0f, 0.0f, 1.0f);        // Set The Color To Blue
                        gl.Vertex(-1.0f, 1.0f, 1.0f);        // Top Right Of The Quad (Left)
                        gl.Vertex(-1.0f, 1.0f, -1.0f);        // Top Left Of The Quad (Left)
                        gl.Vertex(-1.0f, -1.0f, -1.0f);        // Bottom Left Of The Quad (Left)
                        gl.Vertex(-1.0f, -1.0f, 1.0f);        // Bottom Right Of The Quad (Left)

                        gl.Color(1.0f, 0.0f, 1.0f);        // Set The Color To Violet
                        gl.Vertex(1.0f, 1.0f, -1.0f);        // Top Right Of The Quad (Right)
                        gl.Vertex(1.0f, 1.0f, 1.0f);        // Top Left Of The Quad (Right)
                        gl.Vertex(1.0f, -1.0f, 1.0f);        // Bottom Left Of The Quad (Right)
                        gl.Vertex(1.0f, -1.0f, -1.0f);        // Bottom Right Of The Quad (Right)
                        gl.End();            // Done Drawing The Q

                        gl.Flush();

                        rtri += 3.0f;// 0.2f;             // Increase The Rotation Variable For The Triangle    
                        rquad -= 3.0f;// 0.15f;             // Decrease The Rotation Variable For The Quad    
                }
 

运行效果:
 
 
源代码见最后附件

本文出自 “璇星” 博客,请务必保留此出处http://crazylove.blog.51cto.com/855385/173047

原创粉丝点击