public void OnLoad() { var dir = Directory.GetCurrentDirectory(); ResourceGroupManager.Instance.AddResourceLocation(dir, "Folder"); //MaterialManager.Instance.Initialize(); _scene = _root.CreateSceneManager("DefaultSceneManager", "SLSharpInstance"); _scene.ClearScene(); Bindings.Axiom.SLSharp.Init(); Shader.DebugMode = true; //Shader.DebugMode = true; _clipmap = new Clipmap(_scene); RecalcHeight(); _camera = _scene.CreateCamera("MainCamera"); _camera.Position = new Vector3(0, 0, 5); _camera.LookAt(Vector3.Zero); _camera.Near = 0.001f; _camera.Far = 20.0f; _camera.AutoAspectRatio = true; var vp = _window.AddViewport(_camera); vp.BackgroundColor = ColorEx.CornflowerBlue; }
protected void CreateCamera() { camera = scene.CreateCamera("PlayerCam"); float scale = 100f; camera.Position = new Vector3(64 * oneMeter, 0 * oneMeter, 64 * oneMeter); camera.LookAt(new Vector3(0, 0, 0)); camera.Near = 1 * oneMeter; camera.Far = 10000 * oneMeter; }
public void OnLoad() { //ResourceGroupManager.Instance.AddResourceLocation("media", "Folder", true); _root.SceneManager = _sceneManager = _root.CreateSceneManager(SceneType.ExteriorClose); _sceneManager.ClearScene(); _camera = _sceneManager.CreateCamera("MainCamera"); _camera.Position = new Vector3(0, 0, 500); _camera.LookAt(new Vector3(0, 0, -300)); _camera.Near = 5; _camera.AutoAspectRatio = true; _camera.FieldOfView = 0.70f; _viewport = _renderWindow.AddViewport(_camera, 0, 0, 1.0f, 1.0f, 100); _viewport.BackgroundColor = ColorEx.Black; ; _light = _sceneManager.CreateLight("light1"); _light.Type = LightType.Directional; _light.Position = new Vector3(0, 150, 300); _light.Diffuse = ColorEx.Blue; _light.Specular = ColorEx.Blue; //_light.Direction = new Vector3(0, 0, -300); _sceneManager.AmbientLight = ColorEx.White;// new ColorEx(0.2f, 0.2f, 0.2f); ResourceGroupManager.Instance.InitializeAllResourceGroups(); _inputReader = PlatformManager.Instance.CreateInputReader(); _inputReader.Initialize(_renderWindow, true, true, false, false); _inputReader.UseKeyboardEvents = true; _inputReader.UseMouseEvents = false; //_renderItems.Add(new BasicCube()); _renderItems.Add(new CubeBrowser()); foreach (var i in _renderItems) { i.Initialise(_root); } }
/// <summary> /// Helper method to render a composite map. /// </summary> /// <param name="size"> The requested composite map size</param> /// <param name="rect"> The region of the composite map to update, in image space</param> /// <param name="mat">The material to use to render the map</param> /// <param name="destCompositeMap"></param> public virtual void RenderCompositeMap(int size, Rectangle rect, Material mat, Texture destCompositeMap) { //return; if (mCompositeMapSM == null) { //dedicated SceneManager mCompositeMapSM = Root.Instance.CreateSceneManager(SceneType.ExteriorClose, "TerrainMaterialGenerator_SceneManager"); float camDist = 100; float halfCamDist = camDist * 0.5f; mCompositeMapCam = mCompositeMapSM.CreateCamera("TerrainMaterialGenerator_Camera"); mCompositeMapCam.Position = new Vector3(0, 0, camDist); //mCompositeMapCam.LookAt(Vector3.Zero); mCompositeMapCam.ProjectionType = Projection.Orthographic; mCompositeMapCam.Near = 10; mCompositeMapCam.Far = 999999* 3; //mCompositeMapCam.AspectRatio = camDist / camDist; mCompositeMapCam.SetOrthoWindow(camDist, camDist); // Just in case material relies on light auto params mCompositeMapLight = mCompositeMapSM.CreateLight("TerrainMaterialGenerator_Light"); mCompositeMapLight.Type = LightType.Directional; RenderSystem rSys = Root.Instance.RenderSystem; float hOffset = rSys.HorizontalTexelOffset / (float)size; float vOffset = rSys.VerticalTexelOffset / (float)size; //setup scene mCompositeMapPlane = mCompositeMapSM.CreateManualObject("TerrainMaterialGenerator_ManualObject"); mCompositeMapPlane.Begin(mat.Name, OperationType.TriangleList); mCompositeMapPlane.Position(-halfCamDist, halfCamDist, 0); mCompositeMapPlane.TextureCoord(0 - hOffset, 0 - vOffset); mCompositeMapPlane.Position(-halfCamDist, -halfCamDist, 0); mCompositeMapPlane.TextureCoord(0 - hOffset, 1 - vOffset); mCompositeMapPlane.Position(halfCamDist, -halfCamDist, 0); mCompositeMapPlane.TextureCoord(1 - hOffset, 1 - vOffset); mCompositeMapPlane.Position(halfCamDist, halfCamDist, 0); mCompositeMapPlane.TextureCoord(1 - hOffset, 0 - vOffset); mCompositeMapPlane.Quad(0, 1, 2, 3); mCompositeMapPlane.End(); mCompositeMapSM.RootSceneNode.AttachObject(mCompositeMapPlane); }//end if // update mCompositeMapPlane.SetMaterialName(0, mat.Name); mCompositeMapLight.Direction = TerrainGlobalOptions.LightMapDirection; mCompositeMapLight.Diffuse = TerrainGlobalOptions.CompositeMapDiffuse; mCompositeMapSM.AmbientLight =TerrainGlobalOptions.CompositeMapAmbient; //check for size change (allow smaller to be reused) if (mCompositeMapRTT != null && size != mCompositeMapRTT.Width) { TextureManager.Instance.Remove(mCompositeMapRTT); mCompositeMapRTT = null; } if (mCompositeMapRTT == null) { mCompositeMapRTT = TextureManager.Instance.CreateManual( mCompositeMapSM.Name + "/compRTT", ResourceGroupManager.DefaultResourceGroupName, TextureType.TwoD, size, size, 0, PixelFormat.BYTE_RGBA, TextureUsage.RenderTarget); RenderTarget rtt = mCompositeMapRTT.GetBuffer().GetRenderTarget(); // don't render all the time, only on demand rtt.IsAutoUpdated = false; Viewport vp = rtt.AddViewport(mCompositeMapCam); // don't render overlays vp.ShowOverlays = false; } // calculate the area we need to update float vpleft = (float)rect.Left / (float)size; float vptop = (float)rect.Top / (float)size; float vpright = (float)rect.Right / (float)size; float vpbottom = (float)rect.Bottom / (float)size; float vpwidth = (float)rect.Width / (float)size; float vpheight = (float)rect.Height / (float)size; RenderTarget rtt2 = mCompositeMapRTT.GetBuffer().GetRenderTarget(); Viewport vp2 = rtt2.GetViewport(0); mCompositeMapCam.SetWindow(vpleft, vptop, vpright, vpbottom); rtt2.Update(); vp2.Update(); // We have an RTT, we want to copy the results into a regular texture // That's because in non-update scenarios we don't want to keep an RTT // around. We use a single RTT to serve all terrain pages which is more // efficient. BasicBox box = new BasicBox((int)rect.Left, (int)rect.Top, (int)rect.Right, (int)rect.Bottom); destCompositeMap.GetBuffer().Blit(mCompositeMapRTT.GetBuffer(), box, box); }
public void OnLoad() { // Create patch with positions, normals, and 1 set of texcoords var patchDeclaration = HardwareBufferManager.Instance.CreateVertexDeclaration(); patchDeclaration.AddElement(0, 0, VertexElementType.Float3, VertexElementSemantic.Position); patchDeclaration.AddElement(0, 12, VertexElementType.Float3, VertexElementSemantic.Normal); patchDeclaration.AddElement(0, 24, VertexElementType.Float2, VertexElementSemantic.TexCoords, 0); var patchVertices = new PatchVertex[9]; patchVertices[0].X = -500; patchVertices[0].Y = 200; patchVertices[0].Z = -500; patchVertices[0].Nx = -0.5f; patchVertices[0].Ny = 0.5f; patchVertices[0].Nz = 0; patchVertices[0].U = 0; patchVertices[0].V = 0; patchVertices[1].X = 0; patchVertices[1].Y = 500; patchVertices[1].Z = -750; patchVertices[1].Nx = 0; patchVertices[1].Ny = 0.5f; patchVertices[1].Nz = 0; patchVertices[1].U = 0.5f; patchVertices[1].V = 0; patchVertices[2].X = 500; patchVertices[2].Y = 1000; patchVertices[2].Z = -500; patchVertices[2].Nx = 0.5f; patchVertices[2].Ny = 0.5f; patchVertices[2].Nz = 0; patchVertices[2].U = 1; patchVertices[2].V = 0; patchVertices[3].X = -500; patchVertices[3].Y = 0; patchVertices[3].Z = 0; patchVertices[3].Nx = -0.5f; patchVertices[3].Ny = 0.5f; patchVertices[3].Nz = 0; patchVertices[3].U = 0; patchVertices[3].V = 0.5f; patchVertices[4].X = 0; patchVertices[4].Y = 500; patchVertices[4].Z = 0; patchVertices[4].Nx = 0; patchVertices[4].Ny = 0.5f; patchVertices[4].Nz = 0; patchVertices[4].U = 0.5f; patchVertices[4].V = 0.5f; patchVertices[5].X = 500; patchVertices[5].Y = -50; patchVertices[5].Z = 0; patchVertices[5].Nx = 0.5f; patchVertices[5].Ny = 0.5f; patchVertices[5].Nz = 0; patchVertices[5].U = 1; patchVertices[5].V = 0.5f; patchVertices[6].X = -500; patchVertices[6].Y = 0; patchVertices[6].Z = 500; patchVertices[6].Nx = -0.5f; patchVertices[6].Ny = 0.5f; patchVertices[6].Nz = 0; patchVertices[6].U = 0; patchVertices[6].V = 1; patchVertices[7].X = 0; patchVertices[7].Y = 500; patchVertices[7].Z = 500; patchVertices[7].Nx = 0; patchVertices[7].Ny = 0.5f; patchVertices[7].Nz = 0; patchVertices[7].U = 0.5f; patchVertices[7].V = 1; patchVertices[8].X = 500; patchVertices[8].Y = 200; patchVertices[8].Z = 800; patchVertices[8].Nx = 0.5f; patchVertices[8].Ny = 0.5f; patchVertices[8].Nz = 0; patchVertices[8].U = 1; patchVertices[8].V = 1; _patch = MeshManager.Instance.CreateBezierPatch("Bezier1", ResourceGroupManager.DefaultResourceGroupName, patchVertices, patchDeclaration, 3, 3, 5, 5, VisibleSide.Both, BufferUsage.StaticWriteOnly, BufferUsage.DynamicWriteOnly, true, true); _patch.Subdivision = 1.0f; _scene = _root.CreateSceneManager("DefaultSceneManager", "SLSharpInstance"); _scene.ClearScene(); _patchEntity = _scene.CreateEntity("Entity1", "Bezier1"); _camera = _scene.CreateCamera("MainCamera"); var mat = (Material)MaterialManager.Instance.Create("test", ResourceGroupManager.DefaultResourceGroupName); var pass = mat.GetTechnique(0).GetPass(0); pass.LightingEnabled = false; _patchEntity.MaterialName = mat.Name; _scene.RootSceneNode.AttachObject(_patchEntity); _camera.LookAt(Vector3.Zero); _camera.Near = 5; _camera.AutoAspectRatio = true; var vp = _root.AutoWindow.AddViewport(_camera, 0, 0, 1.0f, 1.0f, 100); vp.BackgroundColor = ColorEx.CornflowerBlue; }