protected override void CreateScene()
        {
            mSceneMgr.AmbientLight = new ColourValue(1, 1, 1);
            //Entity ent = mSceneMgr.CreateEntity("Head", "ogrehead.mesh");
            //SceneNode node = mSceneMgr.RootSceneNode.CreateChildSceneNode("HeadNode");
            //node.AttachObject(ent);
            MaterialPtr      mat  = MaterialManager.Singleton.Create("BoxColor", "General", true);
            Technique        tech = mat.GetTechnique(0);
            Pass             pass = tech.GetPass(0);
            TextureUnitState tex  = pass.CreateTextureUnitState();

            tex.SetTextureName("sphax.jpg", TextureType.TEX_TYPE_2D);
            tex.NumMipmaps        = 0;
            tex.TextureAnisotropy = 0;
            tex.SetTextureFiltering(FilterOptions.FO_POINT, FilterOptions.FO_POINT, FilterOptions.FO_POINT);
            //pass.DepthWriteEnabled=false;
            //pass.SetSceneBlending(SceneBlendType.SBT_TRANSPARENT_ALPHA);
            //pass.CullingMode = CullingMode.CULL_NONE;
            //mCamMan = new Tutorials.CameraMan(mCamera,mc);
            //mCameraMan = null;
            mCamera.SetPosition((float)mc.x, (float)mc.y, (float)mc.z);
            mCamera.Pitch(new Degree(mc.pitch).ValueRadians);
            mCamera.Yaw(new Degree(mc.yaw).ValueRadians);
            oldCamPos = mCamera.Position;
        }
Exemplo n.º 2
0
        void CreateDefaultTechnique( out bool notSupported )
        {
            notSupported = false;

            string sourceFile = "Materials\\Common\\Water.cg_hlsl";

            string vertexSyntax;
            string fragmentSyntax;
            {
                if( RenderSystem.Instance.IsDirect3D() )
                {
                    if( RenderSystem.Instance.HasShaderModel3() )
                    {
                        vertexSyntax = "vs_3_0";
                        fragmentSyntax = "ps_3_0";
                    }
                    else
                    {
                        vertexSyntax = "vs_2_0";
                        fragmentSyntax = "ps_2_0";
                    }
                }
                else
                {
                    vertexSyntax = "arbvp1";
                    fragmentSyntax = "arbfp1";
                }
            }

            if( !RenderSystem.Instance.HasShaderModel2() ||
                !RenderSystem.Instance.Capabilities.UserClipPlanes )
            {
                notSupported = true;
                return;
            }

            BaseMaterial.ReceiveShadows = false;

            Technique tecnhique = BaseMaterial.CreateTechnique();
            Pass pass = tecnhique.CreatePass();

            //generate compileArguments and bind textures
            StringBuilder compileArguments = new StringBuilder( 128 );

            //transparent surface
            if( owner.DeepColor.Alpha != 1 || owner.ShallowColor.Alpha != 1 )
            {
                pass.SourceBlendFactor = SceneBlendFactor.SourceAlpha;
                pass.DestBlendFactor = SceneBlendFactor.OneMinusSourceAlpha;
                pass.DepthWrite = false;

                compileArguments.Append( " -DTRANSPARENT" );
            }

            //disable Direct3D standard fog features
            pass.SetFogOverride( FogMode.None, new ColorValue( 0, 0, 0 ), 0, 0, 0 );

            //bool direct3d = RenderSystem.Instance.Name.Contains( "Direct3D" );
            //compileArguments.Append( direct3d ? " -DDIRECT3D" : " -DOPENGL" );

            //Fog
            FogMode fogMode = SceneManager.Instance.GetFogMode();
            if( fogMode != FogMode.None )
            {
                compileArguments.Append( " -DFOG_ENABLED" );
                compileArguments.Append( " -DFOG_" + fogMode.ToString().ToUpper() );
            }

            //noiseMap
            {
                TextureUnitState state = pass.CreateTextureUnitState();
                state.SetTextureName( "Types\\Special\\WaterPlane\\WaterNoise.dds", Texture.Type.Type2D );
            }

            //reflectionMap
            if( owner.ReflectionLevel != WaterPlane.ReflectionLevels.None )
            {
                compileArguments.Append( " -DREFLECTION_MAP" );

                reflectionMapState = pass.CreateTextureUnitState();
                if( owner.ReflectionTexture != null )
                    reflectionMapState.SetTextureName( owner.ReflectionTexture.Name );
                reflectionMapState.SetTextureAddressingMode( TextureAddressingMode.Clamp );
                reflectionMapState.SetTextureFiltering( FilterOptions.Linear,
                    FilterOptions.Linear, FilterOptions.None );
            }

            //vertex program
            {
                string errorString;

                GpuProgram program = GpuProgramCacheManager.Instance.AddProgram(
                    "WaterPlane_Vertex_", GpuProgramType.VertexProgram, sourceFile,
                    "main_vp", vertexSyntax, compileArguments.ToString(), out errorString );

                if( !string.IsNullOrEmpty( errorString ) )
                    Log.Fatal( errorString );

                if( program != null )
                {
                    GpuProgramParameters parameters = program.DefaultParameters;
                    SetProgramAutoConstants( parameters );
                    pass.VertexProgramName = program.Name;
                }
            }

            //fragment program
            {
                string errorString;

                GpuProgram program = GpuProgramCacheManager.Instance.AddProgram(
                    "WaterPlane_Fragment_", GpuProgramType.FragmentProgram, sourceFile,
                    "main_fp", fragmentSyntax, compileArguments.ToString(), out errorString );

                if( !string.IsNullOrEmpty( errorString ) )
                    Log.Fatal( errorString );

                if( program != null )
                {
                    SetProgramAutoConstants( program.DefaultParameters );
                    pass.FragmentProgramName = program.Name;
                }
            }
        }
Exemplo n.º 3
0
        protected override void load()
        {
            // clarabie - nov 18, 2008
            // modified this to check for an existing material instead of always
            // creating a new one. Allows more flexibility, but also specifically allows us to
            // solve the problem of XNA not having fixed function support

            this._material = (Material)MaterialManager.Instance.GetByName("Fonts/" + _name);

            if (this._material == null)
            {
                // create a material for this font
                this._material = (Material)MaterialManager.Instance.Create("Fonts/" + _name, Group);

                TextureUnitState unitState = null;
                var blendByAlpha           = false;

                if (this._fontType == FontType.TrueType)
                {
#if !(XBOX || XBOX360)
                    // create the font bitmap on the fly
                    createTexture();

                    // a texture layer was added in CreateTexture
                    unitState = this._material.GetTechnique(0).GetPass(0).GetTextureUnitState(0);

                    blendByAlpha = true;
#endif
                }
                else
                {
                    // load this texture
                    // TODO In general, modify any methods like this that throw their own exception rather than returning null, so the caller can decide how to handle a missing resource.

                    this._texture = TextureManager.Instance.Load(Source, Group, TextureType.TwoD, 0);

                    blendByAlpha = texture.HasAlpha;
                    // pre-created font images
                    unitState = Material.GetTechnique(0).GetPass(0).CreateTextureUnitState(Source);
                }

                // Make sure material is aware of colour per vertex.
                this._material.GetTechnique(0).GetPass(0).VertexColorTracking = TrackVertexColor.Diffuse;

                if (unitState != null)
                {
                    // Clamp to avoid fuzzy edges
                    unitState.SetTextureAddressingMode(TextureAddressing.Clamp);
                    // Allow min/mag filter, but no mip
                    unitState.SetTextureFiltering(FilterOptions.Linear, FilterOptions.Linear, FilterOptions.None);
                }

                // set up blending mode
                if (blendByAlpha)
                {
                    this._material.SetSceneBlending(SceneBlendType.TransparentAlpha);
                }
                else
                {
                    // assume black background here
                    this._material.SetSceneBlending(SceneBlendType.Add);
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        protected void Initialize()
        {
            // Create geometry
            int nvertices = this.slices * 4;           // n+1 planes
            int elemsize  = 3 * 3;
            int dsize     = elemsize * nvertices;
            int x;

            var indexData  = new IndexData();
            var vertexData = new VertexData();
            var vertices   = new float[dsize];

            var coords = new float[4, 2]
            {
                {
                    0.0f, 0.0f
                }, {
                    0.0f, 1.0f
                }, {
                    1.0f, 0.0f
                }, {
                    1.0f, 1.0f
                }
            };

            for (x = 0; x < this.slices; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    float xcoord = coords[y, 0] - 0.5f;
                    float ycoord = coords[y, 1] - 0.5f;
                    float zcoord = -((float)x / (float)(this.slices - 1) - 0.5f);
                    // 1.0f .. a/(a+1)
                    // coordinate
                    vertices[x * 4 * elemsize + y * elemsize + 0] = xcoord * (this.size / 2.0f);
                    vertices[x * 4 * elemsize + y * elemsize + 1] = ycoord * (this.size / 2.0f);
                    vertices[x * 4 * elemsize + y * elemsize + 2] = zcoord * (this.size / 2.0f);
                    // normal
                    vertices[x * 4 * elemsize + y * elemsize + 3] = 0.0f;
                    vertices[x * 4 * elemsize + y * elemsize + 4] = 0.0f;
                    vertices[x * 4 * elemsize + y * elemsize + 5] = 1.0f;
                    // tex
                    vertices[x * 4 * elemsize + y * elemsize + 6] = xcoord * Utility.Sqrt(3.0f);
                    vertices[x * 4 * elemsize + y * elemsize + 7] = ycoord * Utility.Sqrt(3.0f);
                    vertices[x * 4 * elemsize + y * elemsize + 8] = zcoord * Utility.Sqrt(3.0f);
                }
            }

            var faces = new short[this.slices * 6];

            for (x = 0; x < this.slices; x++)
            {
                faces[x * 6 + 0] = (short)(x * 4 + 0);
                faces[x * 6 + 1] = (short)(x * 4 + 1);
                faces[x * 6 + 2] = (short)(x * 4 + 2);
                faces[x * 6 + 3] = (short)(x * 4 + 1);
                faces[x * 6 + 4] = (short)(x * 4 + 2);
                faces[x * 6 + 5] = (short)(x * 4 + 3);
            }

            //setup buffers
            vertexData.vertexStart = 0;
            vertexData.vertexCount = nvertices;

            VertexDeclaration   decl = vertexData.vertexDeclaration;
            VertexBufferBinding bind = vertexData.vertexBufferBinding;
            int offset = 0;

            offset += decl.AddElement(0, 0, VertexElementType.Float3, VertexElementSemantic.Position).Size;
            offset += decl.AddElement(0, offset, VertexElementType.Float3, VertexElementSemantic.Normal).Size;
            offset += decl.AddElement(0, offset, VertexElementType.Float3, VertexElementSemantic.TexCoords).Size;

            HardwareVertexBuffer vertexBuffer = HardwareBufferManager.Instance.CreateVertexBuffer(decl, nvertices,
                                                                                                  BufferUsage.StaticWriteOnly);

            bind.SetBinding(0, vertexBuffer);

            HardwareIndexBuffer indexBuffer = HardwareBufferManager.Instance.CreateIndexBuffer(IndexType.Size16, this.slices * 6,
                                                                                               BufferUsage.StaticWriteOnly);

            indexData.indexBuffer = indexBuffer;
            indexData.indexCount  = this.slices * 6;
            indexData.indexStart  = 0;

            indexBuffer.WriteData(0, indexBuffer.Size, faces, true);
            vertexBuffer.WriteData(0, vertexBuffer.Size, vertices);
            vertices = null;
            faces    = null;

            // Now make the render operation
            renderOperation.operationType = OperationType.TriangleList;
            renderOperation.indexData     = indexData;
            renderOperation.vertexData    = vertexData;
            renderOperation.useIndices    = true;

            // Create a brand new private material
            if (!ResourceGroupManager.Instance.GetResourceGroups().Contains("VolumeRendable"))
            {
                ResourceGroupManager.Instance.CreateResourceGroup("VolumeRendable");
            }

            var material = (Material)MaterialManager.Instance.Create(this.texture, "VolumeRendable");

            // Remove pre-created technique from defaults
            material.RemoveAllTechniques();

            // Create a techinique and a pass and a texture unit
            Technique        technique   = material.CreateTechnique();
            Pass             pass        = technique.CreatePass();
            TextureUnitState textureUnit = pass.CreateTextureUnitState();

            // Set pass parameters
            pass.SetSceneBlending(SceneBlendType.TransparentAlpha);
            pass.DepthWrite      = false;
            pass.CullingMode     = CullingMode.None;
            pass.LightingEnabled = false;
            textureUnit.SetTextureAddressingMode(TextureAddressing.Clamp);
            textureUnit.SetTextureName(this.texture, TextureType.ThreeD);
            textureUnit.SetTextureFiltering(TextureFiltering.Trilinear);

            this.unit     = textureUnit;
            base.material = material;
        }
Exemplo n.º 5
0
        void CreateDefaultTechnique()
        {
            string sourceFile = "Base\\Shaders\\Water.cg_hlsl";

            string vertexSyntax;
            string fragmentSyntax;
            {
                if( RenderSystem.Instance.IsDirect3D() )
                {
                    vertexSyntax = "vs_3_0";
                    fragmentSyntax = "ps_3_0";
                }
                else if( RenderSystem.Instance.IsOpenGLES() )
                {
                    vertexSyntax = "hlsl2glsl";
                    fragmentSyntax = "hlsl2glsl";
                }
                else
                {
                    vertexSyntax = "arbvp1";
                    fragmentSyntax = "arbfp1";
                }
            }

            BaseMaterial.ReceiveShadows = false;

            Technique tecnhique = BaseMaterial.CreateTechnique();
            Pass pass = tecnhique.CreatePass();

            bool transparent = owner.DeepColor.Alpha != 1 || owner.ShallowColor.Alpha != 1;

            //generate compileArguments and bind textures
            StringBuilder compileArguments = new StringBuilder( 128 );

            //general settings
            if( RenderSystem.Instance.IsDirect3D() )
                compileArguments.Append( " -DDIRECT3D" );
            if( RenderSystem.Instance.IsOpenGL() )
                compileArguments.Append( " -DOPENGL" );
            if( RenderSystem.Instance.IsOpenGLES() )
                compileArguments.Append( " -DOPENGL_ES" );
            if( !transparent )
                compileArguments.Append( " -DDEPTH_WRITE" );

            //transparent surface
            if( transparent )
            {
                pass.SourceBlendFactor = SceneBlendFactor.SourceAlpha;
                pass.DestBlendFactor = SceneBlendFactor.OneMinusSourceAlpha;
                pass.DepthWrite = false;

                compileArguments.Append( " -DTRANSPARENT" );
            }

            //disable Direct3D standard fog features
            pass.SetFogOverride( FogMode.None, new ColorValue( 0, 0, 0 ), 0, 0, 0 );

            //Fog
            if( owner.AllowFog )
            {
                FogMode fogMode = SceneManager.Instance.GetFogMode();
                if( fogMode != FogMode.None )
                {
                    compileArguments.Append( " -DFOG_ENABLED" );
                    compileArguments.Append( " -DFOG_" + fogMode.ToString().ToUpper() );
                }
            }

            //noiseMap
            {
                TextureUnitState state = pass.CreateTextureUnitState();
                state.SetTextureName( "Base\\Types\\Water Plane\\WaterNoise.dds", Texture.Type.Type2D );
            }

            //reflectionMap
            if( owner.ReflectionLevel != WaterPlane.ReflectionLevels.None &&
                RenderSystem.Instance.Capabilities.HardwareRenderToTexture )
            {
                compileArguments.Append( " -DREFLECTION_MAP" );

                reflectionMapState = pass.CreateTextureUnitState();
                reflectionMapState.SetTextureAddressingMode( TextureAddressingMode.Clamp );
                reflectionMapState.SetTextureFiltering( FilterOptions.Linear,
                    FilterOptions.Linear, FilterOptions.None );
            }

            //vertex program
            {
                string errorString;

                GpuProgram program = GpuProgramCacheManager.Instance.AddProgram(
                    "WaterPlane_Vertex_", GpuProgramType.Vertex, sourceFile,
                    "main_vp", vertexSyntax, compileArguments.ToString(), out errorString );

                if( !string.IsNullOrEmpty( errorString ) )
                    Log.Fatal( errorString );

                if( program != null )
                {
                    GpuProgramParameters parameters = program.DefaultParameters;
                    SetProgramAutoConstants( parameters );
                    pass.VertexProgramName = program.Name;
                }
            }

            //fragment program
            {
                string errorString;

                GpuProgram program = GpuProgramCacheManager.Instance.AddProgram(
                    "WaterPlane_Fragment_", GpuProgramType.Fragment, sourceFile,
                    "main_fp", fragmentSyntax, compileArguments.ToString(), out errorString );

                if( !string.IsNullOrEmpty( errorString ) )
                    Log.Fatal( errorString );

                if( program != null )
                {
                    SetProgramAutoConstants( program.DefaultParameters );
                    pass.FragmentProgramName = program.Name;
                }
            }
        }