Пример #1
0
        public async static Task <Mesh> BuildAsync(WebGLContext gl, Geometry geometry, Texture texture, float[] initialPosition = null)
        {
            int vertexCount = geometry.GetVertexCount();

            return(new Mesh(
                       await VBO.BuildAsync(gl, vertexCount, geometry.GetPositions()),
                       await VBO.BuildAsync(gl, vertexCount, geometry.GetNormals()),
                       await VBO.BuildAsync(gl, vertexCount, geometry.GetUvs()),
                       texture,
                       vertexCount,
                       initialPosition ?? Mat4.Create(),
                       gl));
        }
Пример #2
0
    public void Start(GamePlatform p_)
    {
        this.p = p_;

        //Initialize translations
        lang          = new LanguageCi();
        lang.platform = p;
        lang.LoadTranslations();
        p.SetTitle(lang.GameName());

        textColorRenderer          = new TextColorRenderer();
        textColorRenderer.platform = p_;
        p_.LoadAssetsAsyc(assets, assetsLoadProgress);

        overlap  = 200;
        minspeed = 20;
        rnd      = p.RandomCreate();

        xRot   = 0;
        xInv   = false;
        xSpeed = minspeed + rnd.MaxNext(5);

        yRot   = 0;
        yInv   = false;
        ySpeed = minspeed + rnd.MaxNext(5);

        z = -5;

        filter = 0;

        mvMatrix = Mat4.Create();
        pMatrix  = Mat4.Create();

        currentlyPressedKeys = new bool[256];
        p.AddOnNewFrame(MainMenuNewFrameHandler.Create(this));
        p.AddOnKeyEvent(MainMenuKeyEventHandler.Create(this));
        p.AddOnMouseEvent(MainMenuMouseEventHandler.Create(this));
        p.AddOnTouchEvent(MainMenuTouchEventHandler.Create(this));
    }
Пример #3
0
 public Unproject()
 {
     finalMatrix = Mat4.Create();
     inp         = new float[4];
     out_        = new float[4];
 }
Пример #4
0
    /// <summary>
    /// Calculating the frustum planes.
    /// </summary>
    /// <remarks>
    /// From the current OpenGL modelview and projection matrices,
    /// calculate the frustum plane equations (Ax+By+Cz+D=0, n=(A,B,C))
    /// The equations can then be used to see on which side points are.
    /// </remarks>
    public void CalcFrustumEquations()
    {
        float t;

        // Retrieve matrices from OpenGL
        float[] matModelView  = d_GetCameraMatrix.GetModelViewMatrix();
        float[] matProjection = d_GetCameraMatrix.GetProjectionMatrix();
        float[] matFrustum    = Mat4.Create();
        //Matrix4.Mult(ref matModelView, ref matProjection, out matFrustum);
        Mat4.Multiply(matFrustum, matProjection, matModelView);

        //unsafe
        {
            //fixed (float* clip1 = &matFrustum)
            //float* clip1 = (float*)(&matFrustum);
            float[] clip1 = matFrustum;
            {
                // Extract the numbers for the RIGHT plane
                frustum00 = clip1[3] - clip1[0];
                frustum01 = clip1[7] - clip1[4];
                frustum02 = clip1[11] - clip1[8];
                frustum03 = clip1[15] - clip1[12];

                // Normalize the result
                t          = platform.MathSqrt(frustum00 * frustum00 + frustum01 * frustum01 + frustum02 * frustum02);
                frustum00 /= t;
                frustum01 /= t;
                frustum02 /= t;
                frustum03 /= t;

                // Extract the numbers for the LEFT plane
                frustum10 = clip1[3] + clip1[0];
                frustum11 = clip1[7] + clip1[4];
                frustum12 = clip1[11] + clip1[8];
                frustum13 = clip1[15] + clip1[12];

                // Normalize the result
                t          = platform.MathSqrt(frustum10 * frustum10 + frustum11 * frustum11 + frustum12 * frustum12);
                frustum10 /= t;
                frustum11 /= t;
                frustum12 /= t;
                frustum13 /= t;

                // Extract the BOTTOM plane
                frustum20 = clip1[3] + clip1[1];
                frustum21 = clip1[7] + clip1[5];
                frustum22 = clip1[11] + clip1[9];
                frustum23 = clip1[15] + clip1[13];

                // Normalize the result
                t          = platform.MathSqrt(frustum20 * frustum20 + frustum21 * frustum21 + frustum22 * frustum22);
                frustum20 /= t;
                frustum21 /= t;
                frustum22 /= t;
                frustum23 /= t;

                // Extract the TOP plane
                frustum30 = clip1[3] - clip1[1];
                frustum31 = clip1[7] - clip1[5];
                frustum32 = clip1[11] - clip1[9];
                frustum33 = clip1[15] - clip1[13];

                // Normalize the result
                t          = platform.MathSqrt(frustum30 * frustum30 + frustum31 * frustum31 + frustum32 * frustum32);
                frustum30 /= t;
                frustum31 /= t;
                frustum32 /= t;
                frustum33 /= t;

                // Extract the FAR plane
                frustum40 = clip1[3] - clip1[2];
                frustum41 = clip1[7] - clip1[6];
                frustum42 = clip1[11] - clip1[10];
                frustum43 = clip1[15] - clip1[14];

                // Normalize the result
                t          = platform.MathSqrt(frustum40 * frustum40 + frustum41 * frustum41 + frustum42 * frustum42);
                frustum40 /= t;
                frustum41 /= t;
                frustum42 /= t;
                frustum43 /= t;

                // Extract the NEAR plane
                frustum50 = clip1[3] + clip1[2];
                frustum51 = clip1[7] + clip1[6];
                frustum52 = clip1[11] + clip1[10];
                frustum53 = clip1[15] + clip1[14];

                // Normalize the result
                t          = platform.MathSqrt(frustum50 * frustum50 + frustum51 * frustum51 + frustum52 * frustum52);
                frustum50 /= t;
                frustum51 /= t;
                frustum52 /= t;
                frustum53 /= t;
            }
        }
    }