示例#1
0
        private void RenderControl_Render_GLSL(object sender, GlControlEventArgs e)
        {
            Control control = (Control)sender;

            PerspectiveProjectionMatrix projectionMatrix = new PerspectiveProjectionMatrix(45.0f, (float)control.Width / (float)control.Height, 0.1f, 100.0f);
            ModelMatrix viewMatrix  = new ModelMatrix();
            ModelMatrix modelMatrix = new ModelMatrix();

            modelMatrix.Translate(new Vertex3f(modelPosition.X, modelPosition.Y, modelPosition.Z));
            modelMatrix.Scale(new Vertex3f(0.2f, 0.2f, 0.2f));

            Gl.Viewport(0, 0, control.Width, control.Height);
            Gl.ClearColor(0.05f, 0.05f, 0.05f, 1.0f);
            Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            modelShader.Use();
            modelMatrix.RotateX(modelAngle.X);
            modelMatrix.RotateY(modelAngle.Y);
            modelMatrix.RotateZ(modelAngle.Z);
            //viewMatrix.Translate(new Vertex3f(-2.0f * (float)Math.Sin(modelAngle.Y * PI_OVER_180), 0.0f, -2.0f*(float)Math.Cos(modelAngle.Y*PI_OVER_180)));
            Gl.UniformMatrix4(modelShader.uLocation_Projection, 1, false, projectionMatrix.ToArray());
            Gl.UniformMatrix4(modelShader.uLocation_View, 1, false, viewMatrix.ToArray());
            Gl.UniformMatrix4(modelShader.uLocation_Model, 1, false, modelMatrix.ToArray());

            modelNanosuit.Draw(modelShader);
        }
示例#2
0
        private void RenderControl_Render_ES(object sender, GlControlEventArgs e)
        {
            Control control = (Control)sender;
            PerspectiveProjectionMatrix projectionMatrix = new PerspectiveProjectionMatrix(45.0f, (float)control.Width / (float)control.Height, 0.1f, 100.0f);
            ModelMatrix viewMatrix  = new ModelMatrix();
            ModelMatrix modelMatrix = new ModelMatrix();

            // Move camera
            viewMatrix.Translate(new Vertex3f(0.0f, 0.0f, -2.0f));
            // Animate triangle

            /*modelMatrix.LookAtDirection(
             *  new Vertex3f(0.0f, 0.0f, 0.0f),
             *  new Vertex3f(
             *      (float)Math.Sin(angle_rad),
             *      0.0f,
             *      (float)Math.Cos(angle_rad)
             *  ),
             *  new Vertex3f(0.0f, 1.0f, 0.0f)
             * );*/
            //Quaternion Q = new Quaternion(new Vertex3f(0.0f, 1.0f, 0.0f), angle);
            modelMatrix.RotateZ(angle);
            modelMatrix.RotateY(angle);
            //modelMatrix.Translate(Math.Cos(theta), Math.Sin(theta));
            //modelMatrix.RotateY(theta);

            Gl.UseProgram(Program_Shader);

            Gl.Viewport(0, 0, control.Width, control.Height);
            Gl.Enable(EnableCap.DepthTest);
            Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            using (MemoryLock arrayPosition = new MemoryLock(_ArrayPosition))
                using (MemoryLock arrayColor = new MemoryLock(_ArrayColor))
                {
                    Gl.VertexAttribPointer((uint)Program_Location_aPosition, 3, Gl.FLOAT, false, 0, arrayPosition.Address);
                    Gl.EnableVertexAttribArray((uint)Program_Location_aPosition);

                    Gl.VertexAttribPointer((uint)Program_Location_aColor, 3, Gl.FLOAT, false, 0, arrayColor.Address);
                    Gl.EnableVertexAttribArray((uint)Program_Location_aColor);

                    Gl.UniformMatrix4(Program_Location_uProjection, 1, false, projectionMatrix.ToArray());
                    Gl.UniformMatrix4(Program_Location_uView, 1, false, viewMatrix.ToArray());
                    Gl.UniformMatrix4(Program_Location_uModel, 1, false, modelMatrix.ToArray());

                    Gl.DrawArrays(PrimitiveType.Triangles, 0, 36);
                }
        }