📄 exampleapp.cs
字号:
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 + -