⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exampleapp.cs

📁 game engine, which is useful for everyone who is interested in it. I hope you can enjoy it.
💻 CS
📖 第 1 页 / 共 2 页
字号:

		ICameraSceneNode cam = 
			device.SceneManager.AddCameraSceneNodeFPS(null, 100, 300, -1);
		cam.Position = new Vector3D(20,300,-50);

		// make cursor invisible
		device.CursorControl.Visible = false;

		// create collision animator and add it to the camera

		ISceneNodeAnimator collAnim = device.SceneManager.CreateCollisionResponseAnimator(
			selector, cam, 
			new Vector3D(30,50,30),  // size of ellipsoid around camera
			new Vector3D(0, -3, 0),  // gravity
			new Vector3D(0, 50, 0),  // translation
			0.0005f);                // sliding value

		cam.AddAnimator(collAnim);

		// load some font and set it into the skin

		IGUIFont font = device.GUIEnvironment.GetFont("../../media/fonthaettenschweiler.bmp");
		device.GUIEnvironment.Skin.Font = font;

		// add some gui stuff
		
		device.GUIEnvironment.AddMessageBox("Hello World", 
			"I'm a Irrlicht.NET MessageBox. Please press SPACE to close me.", true, 
			MessageBoxFlag.OK | MessageBoxFlag.CANCEL, null, -1);
		
		// start drawing loop

		int fps = 0;

		while(device.Run())
			if (device.WindowActive)
			{
				device.VideoDriver.BeginScene(true, true, new Color(255,0,0,50));

				// draw scene

				device.SceneManager.DrawAll();
				device.GUIEnvironment.DrawAll();

				// do some collision testing

				Line3D line = new Line3D();
				line.start = cam.Position;
				line.end = ((cam.Target - line.start).Normalize() * 1000.0f ) + line.start;

				Vector3D intersection = new Vector3D();
				Triangle3D tri = new Triangle3D();

				if (device.SceneManager.SceneCollisionManager.GetCollisionPoint(
					line, selector, out intersection, out tri))
				{
					bill.Position = intersection;
				
					Material mat = new Material();
					mat.Lighting = false;

					device.VideoDriver.SetTransform(TransformationState.WORLD, new Matrix4());
					device.VideoDriver.SetMaterial(mat);
					device.VideoDriver.Draw3DTriangle(tri, new Color(0,255,0,0));
				}

				// draw 2d logo
					
				device.VideoDriver.Draw2DImage(
					texLogo, new Position2D(10,10),
					new Rect(0,0,88,31), 
					new Rect(new Position2D(0,0),device.VideoDriver.ScreenSize),
					new Color(0xffffff), false);

				// draw some text 
				font.Draw("Press 'S' to toggle the visibility of the realtime shadow.",
					new Position2D(120,20), new Color(100,150,200,200));

				device.VideoDriver.EndScene();

				if (fps != device.VideoDriver.FPS)
				{
					fps = device.VideoDriver.FPS;
					device.WindowCaption = "Irrlicht.NET test (primitives:" + 
						device.VideoDriver.PrimitiveCountDrawn + ") fps:" + fps;
				}
			}
	}


	void runIrrlichtInWindowsFormTest()
	{
		// testing irrlicht running embedded in a windows form
		
		System.Windows.Forms.Form f = new System.Windows.Forms.Form();
		f.Text = "Irrlicht running embedded in Windows.Form";

		device = new IrrlichtDevice(SelectedDriverType,
			new Dimension2D(800,600), 16, false, false, false, true, f.Handle);

		f.Show();

		// set up a simple scene

		ICameraSceneNode cam = 
			device.SceneManager.AddCameraSceneNode( null, new Vector3D(), new Vector3D(), -1);

		ISceneNodeAnimator anim = device.SceneManager.CreateFlyCircleAnimator(
			new Vector3D(0,10,0), 30.0f, 0.003f);
		cam.AddAnimator(anim);

		ISceneNode cube = device.SceneManager.AddCubeSceneNode(25, null, -1, new Vector3D());
		cube.SetMaterialTexture(0, device.VideoDriver.GetTexture("../../media/rockwall.bmp"));
		cube.SetMaterialFlag(Irrlicht.Video.MaterialFlag.LIGHTING, false);

		// draw everything

		while(device.Run() && f.Visible)
			if (device.WindowActive)
			{
				device.VideoDriver.BeginScene(true, true, new Color(255,0,0,50));

				device.SceneManager.DrawAll();
				device.GUIEnvironment.DrawAll();

				device.VideoDriver.EndScene();
			}
	}

	public void runShaderTest()
	{
		// testing irrlicht with shaders

		device = new IrrlichtDevice(SelectedDriverType,
			new Dimension2D(800,600), 16, false, true, false);

		device.EventReceiver = this;
		device.ResizeAble = true;
		device.WindowCaption = "Irrlicht.NET shader test";

		String vsFileName = "";
		String psFileName = "";
		UseHighLevelShaders = false;

		switch(SelectedDriverType)
		{
			case DriverType.DIRECT3D8: 
				psFileName = "../../media/d3d8.psh";
				vsFileName = "../../media/d3d8.vsh";
				break;
			case DriverType.DIRECT3D9:
				if (UseHighLevelShaders)
				{
					psFileName = "../../media/d3d9.hlsl";
					vsFileName = psFileName; // both shaders are in the same file
				}
				else
				{
					psFileName = "../../media/d3d9.psh";
					vsFileName = "../../media/d3d9.vsh";
				}
				break;
			case DriverType.OPENGL:
				if (UseHighLevelShaders)
				{
					psFileName = "../../media/opengl.frag";
					vsFileName = "../../media/opengl.vert";
				}
				else
				{
					psFileName = "../../media/opengl.psh";
					vsFileName = "../../media/opengl.vsh";
				}
				break;
		}

		// create materials
		int newMaterialType1 = 0;
		int newMaterialType2 = 0;

		if ( device.VideoDriver.GPUProgrammingServices != null )
		{
			IShaderConstantSetCallBack callBack = this;

			if (UseHighLevelShaders)
			{
				newMaterialType1 = device.VideoDriver.GPUProgrammingServices.AddHighLevelShaderMaterialFromFiles(
					vsFileName, "vertexMain", VertexShaderType.VST_VS_1_1,
					psFileName, "pixelMain", PixelShaderType.PST_PS_1_1,
					callBack, MaterialType.SOLID);

				newMaterialType2 = device.VideoDriver.GPUProgrammingServices.AddHighLevelShaderMaterialFromFiles(
					vsFileName, "vertexMain", VertexShaderType.VST_VS_1_1,
					psFileName, "pixelMain", PixelShaderType.PST_PS_1_1,
					callBack, MaterialType.TRANSPARENT_ADD_COLOR);
			}
			else
			{
				newMaterialType1 = device.VideoDriver.GPUProgrammingServices.AddShaderMaterialFromFiles(
					vsFileName, psFileName, callBack, MaterialType.SOLID );

				newMaterialType2 = device.VideoDriver.GPUProgrammingServices.AddShaderMaterialFromFiles(
					vsFileName, psFileName, callBack, MaterialType.TRANSPARENT_ADD_COLOR );
			}
		}

		// create test scene node 1, with the new created material type 1

		ISceneNode node = device.SceneManager.AddCubeSceneNode(50, null, -1, new Vector3D(0,0,0));
		node.SetMaterialTexture(0, device.VideoDriver.GetTexture("../../media/wall.bmp"));
		node.SetMaterialType((MaterialType)newMaterialType1);
		node.SetMaterialFlag(Irrlicht.Video.MaterialFlag.LIGHTING, false);

		//device.SceneManager.AddTextSceneNode( device.GUIEnvironment.BuiltInFont, 
		//	"PS & VS & EMT_SOLID", new Color(255,255,255,255), node, new Vector3D(0,0,0), -1);

		ISceneNodeAnimator anim = device.SceneManager.CreateRotationAnimator(
			new Vector3D(0,0.3f,0) );
		node.AddAnimator(anim);

		// create test scene node 1, with the new created material type 1

		node = device.SceneManager.AddCubeSceneNode(50, null, -1, new Vector3D(0,-10,50));
		node.SetMaterialTexture(0, device.VideoDriver.GetTexture("../../media/wall.bmp"));
		node.SetMaterialType((MaterialType)newMaterialType2);
		node.SetMaterialFlag(Irrlicht.Video.MaterialFlag.LIGHTING, false);

		//device.SceneManager.AddTextSceneNode( device.GUIEnvironment.BuiltInFont, 
		//	"PS & VS & EMT_TRANSPARENT", new Color(255,255,255,255), node, new Vector3D(0,0,0), -1);

		anim = device.SceneManager.CreateRotationAnimator(
			new Vector3D(0,0.3f,0) );
		node.AddAnimator(anim);

		//Then we add a third cube without a shader on it, to be able to compare the
		//cubes.

		node = device.SceneManager.AddCubeSceneNode(50, null, -1, new Vector3D(0,50,25));
		node.SetMaterialTexture(0, device.VideoDriver.GetTexture("../../media/wall.bmp"));
		node.SetMaterialFlag(Irrlicht.Video.MaterialFlag.LIGHTING, false);

		//device.SceneManager.AddTextSceneNode( device.GUIEnvironment.BuiltInFont, 
		//	"NO SHADER", new Color(255,255,255,255), node, new Vector3D(0,0,0), -1);

		// And last, we add a skybox and a user controlled camera to the scene.
	
		device.SceneManager.AddSkyBoxSceneNode(
			device.VideoDriver.GetTexture("../../media/irrlicht2_up.jpg"), 
			device.VideoDriver.GetTexture("../../media/irrlicht2_dn.jpg"),
			device.VideoDriver.GetTexture("../../media/irrlicht2_lf.jpg"),
			device.VideoDriver.GetTexture("../../media/irrlicht2_rt.jpg"),
			device.VideoDriver.GetTexture("../../media/irrlicht2_ft.jpg"),
			device.VideoDriver.GetTexture("../../media/irrlicht2_bk.jpg"), null, -1 );

		ICameraSceneNode cam = device.SceneManager.AddCameraSceneNodeFPS();
		cam.Target = new Vector3D(0,0,0);
		cam.Position = new Vector3D(-100,50,100);

		device.CursorControl.Visible = false;


		while(device.Run())
			if (device.WindowActive)
			{
				device.VideoDriver.BeginScene(true, true, new Color(255,0,0,50));

				device.SceneManager.DrawAll();
				device.GUIEnvironment.DrawAll();

				device.VideoDriver.EndScene();
			}
	}

	public void OnSetConstants( IMaterialRendererServices services )
	{
		Matrix4 invWorld = services.VideoDriver.GetTransform(TransformationState.WORLD);
		invWorld.MakeInverse();

		if (UseHighLevelShaders)
			services.SetVertexShaderConstant("mInvWorld", invWorld.GetFloats(), 16);
		else
			services.SetVertexShaderConstant(invWorld.GetFloats(), 0, 4);

		// set clip matrix

		Matrix4 worldViewProj;
		worldViewProj = services.VideoDriver.GetTransform(TransformationState.PROJECTION);			
		worldViewProj *= services.VideoDriver.GetTransform(TransformationState.VIEW);
		worldViewProj *= services.VideoDriver.GetTransform(TransformationState.WORLD);

		if (UseHighLevelShaders)
			services.SetVertexShaderConstant("mWorldViewProj", worldViewProj.GetFloats(), 16);
		else
			services.SetVertexShaderConstant(worldViewProj.GetFloats(), 4, 4);
		
		// set camera position

		Vector3D campos = device.SceneManager.ActiveCamera.Position;

		float[] pos = new float[4]; 
		pos[0] = campos.X;
		pos[1] = campos.Y;
		pos[2] = campos.Z;
		pos[3] = 0;

		if (UseHighLevelShaders)
			services.SetVertexShaderConstant("mLightPos", pos, 3);
		else
			services.SetVertexShaderConstant(pos, 8, 1);

		// set light color

		pos[0] = 0;
		pos[1] = 1;
		pos[2] = 1;
		pos[3] = 0;

		if (UseHighLevelShaders)
			services.SetVertexShaderConstant("mLightColor", pos, 4);
		else
			services.SetVertexShaderConstant(pos, 9, 1);

		// set transposed world matrix

		Matrix4 world = services.VideoDriver.GetTransform(TransformationState.WORLD);
		world = world.GetTransposed();

		if (UseHighLevelShaders)
			services.SetVertexShaderConstant("mTransWorld", world.GetFloats(), 16);
		else
			services.SetVertexShaderConstant(world.GetFloats(), 10, 4);

	}


	private DriverType SelectedDriverType = DriverType.DIRECT3D8;
	private TestScenarios ClickedButton = TestScenarios.NONE;
	private ISceneNode Shadow;
	private bool UseHighLevelShaders = false;
	private IrrlichtDevice device;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -