示例#1
0
        protected override void OnBeginRenderLightmap(
            StaticLightingCalculationWorld.MeshObject meshObject, LightmapImage renderingImage)
        {
            lightmapMeshObject     = meshObject;
            lightmapRenderingImage = renderingImage;
            lightmapBucketIndex    = Vec2I.Zero;

            Vec2I textureSize = lightmapRenderingImage.Size;

            //generate lightmapTriangleMap
            {
                lightmapTriangleMap = new int[textureSize.Y][];
                for (int y = 0; y < textureSize.Y; y++)
                {
                    lightmapTriangleMap[y] = new int[textureSize.X];
                    for (int x = 0; x < textureSize.X; x++)
                    {
                        lightmapTriangleMap[y][x] = -1;
                    }
                }

                Mesh mesh = meshObject.Mesh;

                int triangleCount = mesh.Indices.Length / 3;
                for (int triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++)
                {
                    int index0 = mesh.Indices[triangleIndex * 3 + 0];
                    int index1 = mesh.Indices[triangleIndex * 3 + 1];
                    int index2 = mesh.Indices[triangleIndex * 3 + 2];

                    Vec3 position0 = mesh.Positions[index0];
                    Vec3 position1 = mesh.Positions[index1];
                    Vec3 position2 = mesh.Positions[index2];
                    if (MathUtils.IsDegenerateTriangle(position0, position1, position2))
                    {
                        continue;
                    }

                    Vec2 texCoord0 = mesh.LightmapTexCoords[index0];
                    Vec2 texCoord1 = mesh.LightmapTexCoords[index1];
                    Vec2 texCoord2 = mesh.LightmapTexCoords[index2];

                    Vec2I pixelIndex0 = GetPixelIndexByTexCoord(texCoord0);
                    Vec2I pixelIndex1 = GetPixelIndexByTexCoord(texCoord1);
                    Vec2I pixelIndex2 = GetPixelIndexByTexCoord(texCoord2);

                    Geometry2D.FillTriangle(pixelIndex0, pixelIndex1, pixelIndex2,
                                            new RectI(Vec2I.Zero, textureSize), delegate(Vec2I point)
                    {
                        lightmapTriangleMap[point.Y][point.X] = triangleIndex;
                    });
                }
            }
        }
        protected override void OnBeginRenderLightmap(
			StaticLightingCalculationWorld.MeshObject meshObject, LightmapImage renderingImage )
        {
            lightmapMeshObject = meshObject;
            lightmapRenderingImage = renderingImage;
            lightmapBucketIndex = Vec2I.Zero;

            Vec2I textureSize = lightmapRenderingImage.Size;

            //generate lightmapTriangleMap
            {
                lightmapTriangleMap = new int[ textureSize.Y ][];
                for( int y = 0; y < textureSize.Y; y++ )
                {
                    lightmapTriangleMap[ y ] = new int[ textureSize.X ];
                    for( int x = 0; x < textureSize.X; x++ )
                        lightmapTriangleMap[ y ][ x ] = -1;
                }

                Mesh mesh = meshObject.Mesh;

                int triangleCount = mesh.Indices.Length / 3;
                for( int triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++ )
                {
                    int index0 = mesh.Indices[ triangleIndex * 3 + 0 ];
                    int index1 = mesh.Indices[ triangleIndex * 3 + 1 ];
                    int index2 = mesh.Indices[ triangleIndex * 3 + 2 ];

                    Vec3 position0 = mesh.Positions[ index0 ];
                    Vec3 position1 = mesh.Positions[ index1 ];
                    Vec3 position2 = mesh.Positions[ index2 ];
                    if( MathUtils.IsDegenerateTriangle( position0, position1, position2 ) )
                        continue;

                    Vec2 texCoord0 = mesh.LightmapTexCoords[ index0 ];
                    Vec2 texCoord1 = mesh.LightmapTexCoords[ index1 ];
                    Vec2 texCoord2 = mesh.LightmapTexCoords[ index2 ];

                    Vec2I pixelIndex0 = GetPixelIndexByTexCoord( texCoord0 );
                    Vec2I pixelIndex1 = GetPixelIndexByTexCoord( texCoord1 );
                    Vec2I pixelIndex2 = GetPixelIndexByTexCoord( texCoord2 );

                    Geometry2D.FillTriangle( pixelIndex0, pixelIndex1, pixelIndex2,
                        new RectI( Vec2I.Zero, textureSize ), delegate( Vec2I point )
                        {
                            lightmapTriangleMap[ point.Y ][ point.X ] = triangleIndex;
                        } );
                }
            }
        }
示例#3
0
 protected override void OnEndRenderLightmap()
 {
     lightmapRenderingImage = null;
     lightmapMeshObject     = null;
     lightmapBucketIndex    = Vec2I.Zero;
 }
 protected override void OnEndRenderLightmap()
 {
     lightmapRenderingImage = null;
     lightmapMeshObject = null;
     lightmapBucketIndex = Vec2I.Zero;
 }