예제 #1
0
        private void Render(object sender, GlControlEventArgs e)
        {
            if (_shader == null)
            {
                return;
            }

            var v = _cameraHelper.CameraMatrix;

            _shader.M = v;

            _shader.ShadingLevel = 0;
            FiguresHelper.Draw3DCross(4, 1);
            _shader.ShadingLevel = 1;

            _shader.LightPos = new Vector3(1f, 1f, 1f);

            var r1     = Matrix4x4.CreateRotationY(Mathf.ToRadian(_phi));
            var t      = Matrix4x4.CreateTranslation(new Vector3(_radius, 2f, 0f));
            var r2     = Matrix4x4.CreateRotationX(Mathf.ToRadian(90)) * Matrix4x4.CreateRotationY(Mathf.ToRadian(90)) * Matrix4x4.CreateRotationZ(Mathf.ToRadian(45));
            var scaleM = Matrix4x4.CreateScale(0.2f);
            var r3     = Matrix4x4.CreateRotationY(Mathf.ToRadian(-_phi * 10));
            var r4     = Matrix4x4.CreateRotationZ(Mathf.ToRadian(25));
            var m      = r3 * r2 * t * r1 * scaleM * r4;

            _shader.M = m * v;

            Figure3DHelper.DrawMesh(_boomerang, Colors.Chocolate);

            _phi += _step;
        }
예제 #2
0
파일: View.cs 프로젝트: Jypeli-JYU/Jypeli
 /// <summary>
 /// Palauttaa käänteisen transformaatiomatriisin jolla voi ottaa huomioon ruudun kokoon,
 /// kiertoon ja paikkaan tehdyt muutokset.
 /// Ennen transformaatiota: paikkavektori RenderTargetin koordinaateissa
 /// Transformaation jälkeen: paikkavektori ikkunan koordinaateissa
 /// </summary>
 /// <returns></returns>
 internal Matrix GetScreenInverse()
 {
     return(Matrix.CreateScale(scaleInv)
            * Matrix.CreateRotationZ(-angle)
            * Matrix.CreateTranslation(center.X, center.Y, 0));
 }
예제 #3
0
파일: View.cs 프로젝트: Jypeli-JYU/Jypeli
 /// <summary>
 /// Palauttaa transformaatiomatriisin jolla voi ottaa huomioon ruudun kokoon,
 /// kiertoon ja paikkaan tehdyt muutokset.
 /// Ennen transformaatiota: paikkavektori ikkunan koordinaateissa
 /// Transformaation jälkeen: paikkavektori RenderTargetin koordinaateissa
 /// </summary>
 /// <returns></returns>
 internal Matrix GetScreenTransform()
 {
     return(Matrix.CreateScale(scale)
            * Matrix.CreateRotationZ(angle)
            * Matrix.CreateTranslation(-center.X, -center.Y, 0));
 }