Example #1
0
        public void Add(MyTriangle_Vertex_Normals triangle, Vector3 normal, ref MyPlane rightPlane, ref MyPlane upPlane, float decalScale, float decalSize, int remainingTrianglesOfThisDecal, Vector4 color, bool alphaBlendByAngle, float lightSize, Vector3 position, float emissivity)
        {
            //  We can't add triangles while fading out
            //if (m_status == MyDecalsBufferState.FADING_OUT) return;

            MyDecalTriangle decalTriangle = m_freeTriangles.Pop();

            decalTriangle.Start(lightSize);
            decalTriangle.Emissivity = emissivity;
            //decalTriangle.RandomOffset = MyMwcUtils.GetRandomFloat(0.0f, MathHelper.Pi);
            decalTriangle.RandomOffset = MyMinerGame.TotalGamePlayTimeInMilliseconds;
            decalTriangle.Position     = position;

            // We must repack vertex positions before copying to new triange, to avoid Z-fight.
            decalTriangle.Position0 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex0);
            decalTriangle.Position1 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex1);
            decalTriangle.Position2 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex2);

            //  Texture coords
            decalTriangle.TexCoord0 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position0, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position0, ref upPlane));
            decalTriangle.TexCoord1 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position1, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position1, ref upPlane));
            decalTriangle.TexCoord2 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position2, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position2, ref upPlane));

            //  Alpha
            decalTriangle.Color0 = color;
            decalTriangle.Color1 = color;
            decalTriangle.Color2 = color;
            if (alphaBlendByAngle)
            {
                decalTriangle.Color0.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal0);
                decalTriangle.Color1.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal1);
                decalTriangle.Color2.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal2);
            }

            AdjustAlphaByDistance(normal, decalSize, position, decalTriangle);

            //  Bump mapping
            decalTriangle.Normal0 = triangle.Normals.Normal0;
            decalTriangle.Normal1 = triangle.Normals.Normal1;
            decalTriangle.Normal2 = triangle.Normals.Normal2;

            decalTriangle.Binormal0 = triangle.Binormals.Normal0;
            decalTriangle.Binormal1 = triangle.Binormals.Normal1;
            decalTriangle.Binormal2 = triangle.Binormals.Normal2;

            decalTriangle.Tangent0 = triangle.Tangents.Normal0;
            decalTriangle.Tangent1 = triangle.Tangents.Normal1;
            decalTriangle.Tangent2 = triangle.Tangents.Normal2;

            decalTriangle.RemainingTrianglesOfThisDecal = remainingTrianglesOfThisDecal;

            m_trianglesQueue.Enqueue(decalTriangle);
        }
        public void Add(MyTriangle_Vertex_Normals triangle, Vector3 normal, ref MyPlane rightPlane, ref MyPlane upPlane, float decalScale, float decalSize, int remainingTrianglesOfThisDecal, Vector4 color, bool alphaBlendByAngle, float lightSize, Vector3 position, float emissivity)
        {
            //  We can't add triangles while fading out
            //if (m_status == MyDecalsBufferState.FADING_OUT) return;            

            MyDecalTriangle decalTriangle = m_freeTriangles.Pop();
            decalTriangle.Start(lightSize);
            decalTriangle.Emissivity = emissivity;
            //decalTriangle.RandomOffset = MyMwcUtils.GetRandomFloat(0.0f, MathHelper.Pi);
            decalTriangle.RandomOffset = MyMinerGame.TotalGamePlayTimeInMilliseconds;
            decalTriangle.Position = position;

            // We must repack vertex positions before copying to new triange, to avoid Z-fight.
            decalTriangle.Position0 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex0);
            decalTriangle.Position1 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex1);
            decalTriangle.Position2 = VF_Packer.RepackModelPosition(ref triangle.Vertexes.Vertex2);

            //  Texture coords
            decalTriangle.TexCoord0 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position0, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position0, ref upPlane));
            decalTriangle.TexCoord1 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position1, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position1, ref upPlane));
            decalTriangle.TexCoord2 = new Vector2(
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position2, ref rightPlane),
                0.5f + decalScale * MyUtils.GetDistanceFromPointToPlane(ref decalTriangle.Position2, ref upPlane));

            //  Alpha
            decalTriangle.Color0 = color;
            decalTriangle.Color1 = color;
            decalTriangle.Color2 = color;
            if (alphaBlendByAngle)
            {
                decalTriangle.Color0.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal0);
                decalTriangle.Color1.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal1);
                decalTriangle.Color2.W = GetAlphaByAngleDiff(ref normal, ref triangle.Normals.Normal2);
            }

            AdjustAlphaByDistance(normal, decalSize, position, decalTriangle);

            //  Bump mapping
            decalTriangle.Normal0 = triangle.Normals.Normal0;
            decalTriangle.Normal1 = triangle.Normals.Normal1;
            decalTriangle.Normal2 = triangle.Normals.Normal2;

            decalTriangle.Binormal0 = triangle.Binormals.Normal0;
            decalTriangle.Binormal1 = triangle.Binormals.Normal1;
            decalTriangle.Binormal2 = triangle.Binormals.Normal2;

            decalTriangle.Tangent0 = triangle.Tangents.Normal0;
            decalTriangle.Tangent1 = triangle.Tangents.Normal1;
            decalTriangle.Tangent2 = triangle.Tangents.Normal2;

            decalTriangle.RemainingTrianglesOfThisDecal = remainingTrianglesOfThisDecal;

            m_trianglesQueue.Enqueue(decalTriangle);
        }