Aktuelle Zeit: 29.03.2024, 12:50

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: [.NET CP] Split Screen
BeitragVerfasst: 21.06.2008, 13:37 
Offline
Benutzeravatar

Registriert: 28.06.2007, 18:26
Beiträge: 54
Wohnort: München
Bild

Hinweis für Anfänger: Man sollte midestens Tutorial 1 schon durchgenommen haben.

Wieder werde ich euch ein Tutorial zeigen. Dieses mal wird es etwas schwieriger.
Auch wiederum kann man dieses Tutorial In der Offiziellen Englischen Irrlicht .NET Website finden. Hier der Link. Dieses Tutorial wurde wieder etwas wegen der Deutschen Formulierung verändert.

Ich würde mal sagen es kann los gehen !

Wir erstellen unter Visual studio oder Expres eine Konsolen Anwendung mit den Namen "Split Screen". Auf dem Screen kann man das hervorragend erkennen.

Bild

Jetzt werde ich den Anfangs Gerüst schreiben in dem Using direktiven schon angegeben sind.

Code:
using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using IrrlichtNETCP;
using IrrlichtNETCP.Inheritable;

namespace Split_Screen
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}


Jetzt erstellen wir in der Klasse folgende variablen.

Code:
        static IrrlichtDevice device;
        static int ResX = 800;
        static int ResY = 600;
        // Kameras
        static CameraSceneNode[] camera = { null, null, null, null };
        static bool fullScreen = false;
        static SceneNode nodeUnderCursor=null;
        static SceneNode nodeSelected = null;
        //SplitScreen An oder Aus ?
        static bool SplitScreen = true;


Jetzt erstellen wir ein Ereignis. Genauso wie es in Windows Forms Ereignisse gibt, gibt es auch in
Irrlicht Ereignisse. Wir nutzen den Ereignis OnEvent. OnEvent wird ausgelöst wen der Curser in den Direct 3D bereich rein fährt, und wen mit der Maus oder Tastatur eine Eingabe erfolgt. Wir erstellen eine public static bool OnEvent(Event p_event)
Gerüst, ober der Main schleife.

Code:
public static bool OnEvent(Event p_event)
{
}


In dieser wieder rum erstellen wir ein IF gerüst das Maus gesten
überprüft.

Code:
if (p_event.Type == EventType.MouseInputEvent)
{
}


Jetzt fügen wir in die neu erstellte Schleife folgenden Code ein. Aber zuvor erklär ich es lieber noch
einmal. "MMousePressedDown", das Bedeutet Maus Taste 3 das ist das Rädchen
bei der Maus denn den kann man Drücken ;) Wenn wir es in diesem Beispiel Drücken wird unsere Kamera
in die FPS Camera oder umgekehrt in die Stille Kamera umgewandelt. Anzumerken hier bei wehre das die Camera Nummer 3 also die Camera unten Rechts umgewandelt wird. Da ich empfohlen habe das Tutorial 1 noch mal gründlich zu studieren ist es diesmal nicht von großen not hier bei alles zu erklären. Jetzt fügt folgenden Code in die neu erstellte IF Schleife ein.

Code:
                    if (camera[3].SceneNodeType == SceneNodeType.Camera)
                    {
                        //camera[3].SceneNodeType = SceneNodeType.CameraFPS;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        //Hide mouse
                        device.CursorControl.Visible = false;
                        camera[3] = device.SceneManager.AddCameraSceneNodeFPS(
                            null, 100, 100, false);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;
                    }
                    else if (camera[3].SceneNodeType == SceneNodeType.CameraFPS)
                    {
                        //Show mouse
                        device.CursorControl.Visible = true;
                        //camera[3].SceneNodeType = SceneNodeType.Camera;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        camera[3] = device.SceneManager.AddCameraSceneNode(null);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;

                    }


Um etwas stil in unserem Beispiel mit einzufügen. Stellt uns Irrlicht .NET die Bounding BOX zur Verfügung.
Diese ist sehr nützlich um z.B. den Kollisionen Umfang zu erkennen. In diesem Beispiel wird die Bounding
Box ihre Farbe verändern wenn man mit der Maus drüber fährt, und wenn man drauf klickt.

Also fügen wir in die IF Schleife if (p_event.MouseInputEvent == MouseInputEvent.MMousePressedDown) folgenden Code ein. In dem das Maus Ereigniss MouseMoved ausgelöst wird dieses Ereignis wird aufgerufen wenn wir uns im Direct3D bereich mit den Cursor bewegen.

Damit Irrlicht weis wann wir mit der Maus über einem Objekt fahren müssen wir mit Kollision arbeiten.
Allerdings ist diese ziemlich ungenau beispiel weise nervt die Camera sie hindert eine genaues auswählen
von Objekten. Grund dafür ist wie ich entdeck habe das die Camera immer in der nähe des Objektes ist
(Das ist normal ansonsten kann man das Objekt ja nicht sehen :)) und das Irritiert den Cursor unheimlich.


Code:
               else if (p_event.MouseInputEvent == MouseInputEvent.MouseMoved)
                {
                    nodeUnderCursor=device.SceneManager.CollisionManager.
                        GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
                }

Auch bei den nächsten Code muss ich vorwarnen das es ziemlich ungenau auswählt.
Dieses mal wird das klick Ereignis ausgelöst. Wenn man auf das Objekt klickt wird es
ausgewählt und die Bounding BOX erscheint. Und wenn man ihn einem freien Raum klickt
verschwindet sie.

Code:
else if (p_event.MouseInputEvent == MouseInputEvent.LMousePressedDown)
{
   SceneNode tempSel = device.SceneManager.CollisionManager.
   GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
   if (nodeSelected == tempSel)
       nodeSelected = null;
  else
       nodeSelected = tempSel;
}



Wow, das war es endlich mit den Maus Gesten :D jetzt kommt mal etwas mit der Tastatur den dafür ist ja der PC da ;)

Hier bei wird es überprüft ob sie die Taste 'S' drücken. Dabei wird der Split Screen Modus in den Normalen
1x Camera Modus umgewandelt oder auch umgekehrt.

jetzt fügen wieder in unserer anfangs IF Schleife also public static bool OnEvent(Event p_event) folgenden Code ein

Code:
            if (p_event.Type == EventType.KeyInputEvent &&
                !p_event.KeyPressedDown)
            {
                switch (p_event.KeyCode)
                {
                    case KeyCode.Key_S:
                        SplitScreen = !SplitScreen;
                        return true;
                }
                if (camera[3] != null)
                {
                    camera[3].OnEvent(p_event);
                }
            }


Wir erinnern uns unsere Schleife ist vom Typ Bool deswegen müssen wir True oder False zurück geben deswegen fügen wir unter der Schleife public static bool OnEvent(Event p_event)
folgenden Code ein.
Code:

return false; // False zurück geben



Damit währe die schleife public static bool OnEvent(Event p_event) komplett.
und wer es bis hier alles verstanden hat ist auf dem guten weg :)
Ich habe aber Trozdem den ganze code bis hier hin zusammen gefasst damit es nicht zu Komplikationen kommt.

Code:
using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using IrrlichtNETCP;
using IrrlichtNETCP.Inheritable;

namespace Split_Screen
{
    class Program
    {
        static IrrlichtDevice device;
        //Resolution
        static int ResX = 800;
        static int ResY = 600;
        //cameras
        static CameraSceneNode[] camera = { null, null, null, null };
        static bool fullScreen = false;
        static SceneNode nodeUnderCursor = null;
        static SceneNode nodeSelected = null;

        //Use SplitScreen?
        static bool SplitScreen = true;

        public static bool OnEvent(Event p_event)
        {
            if (p_event.Type == EventType.MouseInputEvent)
            {
                if (p_event.MouseInputEvent == MouseInputEvent.MMousePressedDown)
                {
                    if (camera[3].SceneNodeType == SceneNodeType.Camera)
                    {
                        //camera[3].SceneNodeType = SceneNodeType.CameraFPS;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        //Hide mouse
                        device.CursorControl.Visible = false;
                        camera[3] = device.SceneManager.AddCameraSceneNodeFPS(
                            null, 100, 100, false);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;
                    }
                    else if (camera[3].SceneNodeType == SceneNodeType.CameraFPS)
                    {
                        //Show mouse
                        device.CursorControl.Visible = true;
                        //camera[3].SceneNodeType = SceneNodeType.Camera;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        camera[3] = device.SceneManager.AddCameraSceneNode(null);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;

                    }
                }
                else if (p_event.MouseInputEvent == MouseInputEvent.MouseMoved)
                {
                    nodeUnderCursor = device.SceneManager.CollisionManager.
                        GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
                }
                else if (p_event.MouseInputEvent == MouseInputEvent.LMousePressedDown)
                {
                    SceneNode tempSel = device.SceneManager.CollisionManager.
                        GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
                    if (nodeSelected == tempSel)
                        nodeSelected = null;
                    else
                        nodeSelected = tempSel;
                }

            }

            // check if user presses the key 'S'
            if (p_event.Type == EventType.KeyInputEvent &&
                !p_event.KeyPressedDown)
            {
                switch (p_event.KeyCode)
                {
                    case KeyCode.Key_S:
                        SplitScreen = !SplitScreen;
                        //break;
                        return true;
                }

                //Send all other events to camera4
                if (camera[3] != null)
                {
                    camera[3].OnEvent(p_event);
                }
            }
            return false;
        }

        static void Main(string[] args)
        {
        }
    }
}



wir fügen in die Main() schleife. folgenden Code ein. Hier bei anzumerken ist !
Das folgende Code schon ausführlich in Tutorial 1 und 2 beschrieben wurden. Diese zwei Tutorials sind ebenfalls in diesem Forum zu finden.

Code:
            // ask user for driver
            DriverType driverType = DriverType.Direct3D9;

            // Ask user to select driver:
            StringBuilder sb = new StringBuilder();
            sb.Append("Please select the driver you want for this example:\n");
            sb.Append("(a) Direct3D 9.0c\n(b) Direct3D 8.1\n(c) OpenGL 1.5\n");
            sb.Append("(d) Software Renderer\n(e) Apfelbaum Software Renderer\n");
            sb.Append("(f) Null Device\n(otherKey) exit\n\n");

            // Get the user's input:
            TextReader tIn = Console.In;
            TextWriter tOut = Console.Out;
            tOut.Write(sb.ToString());
            string input = tIn.ReadLine();

            // Select device based on user's input:
            switch (input)
            {
                case "a":
                    driverType = DriverType.Direct3D9;
                    break;
                case "b":
                    driverType = DriverType.Direct3D8;
                    break;
                case "c":
                    driverType = DriverType.OpenGL;
                    break;
                case "d":
                    driverType = DriverType.Software;
                    break;
                case "e":
                    driverType = DriverType.Software2;
                    break;
                case "f":
                    driverType = DriverType.Null;
                    break;
                default:
                    return;
            }
            // Create device and exit if creation fails:
            device = new IrrlichtDevice(driverType, new Dimension2D(ResX, ResY), 32, fullScreen, true, true, true);
            device.FileSystem.WorkingDirectory = "../../media"; //We set Irrlicht's current directory to %application directory%/media
            device.OnEvent += new OnEventDelegate(OnEvent); //We had a simple delegate that will handle every event
            SceneManager smgr = device.SceneManager;
            VideoDriver driver = device.VideoDriver;

            //Load model
            AnimatedMesh model = smgr.GetMesh("sydney.md2");
            AnimatedMeshSceneNode model_node = smgr.AddAnimatedMeshSceneNode(model);
            //Load texture
            Texture texture = driver.GetTexture("sydney.bmp");
            model_node.SetMaterialTexture(0, texture);
            //Disable lighting (we've got no light)
            model_node.SetMaterialFlag(MaterialFlag.Lighting, false);

            //Load map
            device.FileSystem.AddZipFileArchive("map-20kdm2.pk3",true,true);
            AnimatedMesh map = smgr.GetMesh("20kdm2.bsp");
            SceneNode map_node = smgr.AddOctTreeSceneNode(map.GetMesh(0),null,-1,128);
            //Set position
            map_node.Position=new Vector3D(-850, -220, -850);



Jetzt erstellen wir die Cameras 0 - 3 also 4 Ansichten. Wie Im Screen.

Bild

Dabei sind 3 Ansichten im Stillen Camera Modus das heist das der Benutzer mit diesen
nicht Interagieren kann. Und die 3 Camera bzw. die 4te Ansicht wird die Haupt Camera
In dem wird die Bounding Box gerendert. Auserdem ist diese Kamera Auch eine FPS
Kamera und damit nicht so langweilig.

Code:
            //-=Create 3 fixed and one user-controlled cameras=-
            // Voder Ansicht
            camera[0] = smgr.AddCameraSceneNode(null);
            camera[0].Position = new Vector3D(70, 0, 0);
            camera[0].Target= new Vector3D(0, 0, 0);
            // Oben
            camera[1] = smgr.AddCameraSceneNode(null);
            camera[1].Position = new Vector3D(0, 70, 0);
            camera[1].Target = new Vector3D(0, 0, 0);
            // Links
            camera[2] = smgr.AddCameraSceneNode(null);
            camera[2].Position = new Vector3D(0, 0, 70);
            camera[2].Target  = new Vector3D(0, 0, 0);
            // Haupt Kamera
            camera[3] = smgr.AddCameraSceneNodeFPS(null,100,100,false);
            camera[3].Position = new Vector3D(70, 70, 70);
            camera[3].Target = new Vector3D(0, 0, 0);


Damit uns der Cursor nicht nervt oder ablenkt werden wir sie unsichtbar machen.
Mit folgendem Code...

Code:
device.CursorControl.Visible=false; // Wenn es auf true ist wird es wieder sichtbar.


Jetzt kommen wir endlich zum Schluss. Wir wollen ja schließlich letzt endlich sehen was wir
gemacht haben. Hier werden die 3 Camera Ansichten gerendert falls es sich im Split Screen
Modus befindet.
Dadurch spart man noch mal 3 mal so viel Leistung. Die Kamera Ansicht 4 ist immer im Render Modus. Wir haben ganz oben im Code die Bounding Box Funktion erstellt die Funktioniert zwar aber
wir müssen sie zuvor zeichnen. Damit wir immer noch geschätzt wissen wie viel Bilder wir pro Sekunde kriegen definieren wir noch einen kleinen FPS funktion. Und zu guter letzt wir dan Irrlicht Device gelöscht.
Fügt folgenden code ganz unten in der Main() Schleife ein.


Code:
            //We want to count the fps
            int lastFPS = -1;

            while (device.Run())
            {
                //Set the viewpoint the the whole screen and begin scene
                driver.ViewPort = new Rect(new Position2D(0, 0), new Position2D(ResX, ResY));
                driver.BeginScene(true, true, new Color(0, 100, 100, 100));

                //If SplitScreen is used
                if (SplitScreen)
                {
                    //Activate camera1
                    smgr.ActiveCamera = camera[0];
                    //Set viewpoint to the first quarter (left top)
                    driver.ViewPort = new Rect(new Position2D(0, 0), new Position2D(ResX / 2, ResY / 2));
                    //Draw scene
                    smgr.DrawAll();

                    //Activate camera2
                    smgr.ActiveCamera = camera[1];
                    //Set viewpoint to the second quarter (right top)
                    driver.ViewPort = new Rect(new Position2D(ResX / 2, 0), new Position2D(ResX, ResY / 2));
                    //Draw scene
                    smgr.DrawAll();

                    //Activate camera3
                    smgr.ActiveCamera = camera[2];
                    //Set viewpoint to the third quarter (left bottom)
                    driver.ViewPort = new Rect(new Position2D(0, ResY / 2), new Position2D(ResX / 2, ResY));
                    //Draw scene
                    smgr.DrawAll();

                    //Set viewport the last quarter (right bottom)
                    driver.ViewPort = new Rect(new Position2D(ResX / 2, ResY / 2), new Position2D(ResX, ResY));
                }

                //Activate camera4
                smgr.ActiveCamera = camera[3];
                //Draw scene
                smgr.DrawAll();
                if (nodeUnderCursor != null)
                    device.VideoDriver.Draw3DBox(nodeUnderCursor.TransformedBoundingBox, Color.Green);
                if (nodeSelected != null)
                    device.VideoDriver.Draw3DBox(nodeSelected.TransformedBoundingBox, Color.Red);
                driver.EndScene();

                   //Get and show fps
                if (driver.FPS != lastFPS) {
                    device.WindowCaption = "Irrlicht SplitScreen-Example " +
                            " FPS:" + lastFPS.ToString();
                    lastFPS = driver.FPS;
                }
                System.Threading.Thread.Sleep(0);
            }
           
            //Delete device
            device.Dispose();



Damit es nicht zu verzweiflungen kommt :D werde ich nochmal den code zusammen gefasst schreiben.
Code:
using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using IrrlichtNETCP;
using IrrlichtNETCP.Inheritable;

namespace Split_Screen
{
    class Program
    {
        static IrrlichtDevice device;
        //Resolution
        static int ResX = 800;
        static int ResY = 600;
        //cameras
        static CameraSceneNode[] camera = { null, null, null, null };
        static bool fullScreen = false;
        static SceneNode nodeUnderCursor = null;
        static SceneNode nodeSelected = null;

        //Use SplitScreen?
        static bool SplitScreen = true;

        public static bool OnEvent(Event p_event)
        {
            if (p_event.Type == EventType.MouseInputEvent)
            {
                if (p_event.MouseInputEvent == MouseInputEvent.MMousePressedDown)
                {
                    if (camera[3].SceneNodeType == SceneNodeType.Camera)
                    {
                        //camera[3].SceneNodeType = SceneNodeType.CameraFPS;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        //Hide mouse
                        device.CursorControl.Visible = false;
                        camera[3] = device.SceneManager.AddCameraSceneNodeFPS(
                            null, 100, 100, false);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;
                    }
                    else if (camera[3].SceneNodeType == SceneNodeType.CameraFPS)
                    {
                        //Show mouse
                        device.CursorControl.Visible = true;
                        //camera[3].SceneNodeType = SceneNodeType.Camera;
                        Vector3D tempPos = camera[3].Position;
                        Vector3D tempTarget = camera[3].Target;
                        camera[3] = device.SceneManager.AddCameraSceneNode(null);
                        camera[3].Position = tempPos;
                        camera[3].Target = tempTarget;

                    }
                }
                else if (p_event.MouseInputEvent == MouseInputEvent.MouseMoved)
                {
                    nodeUnderCursor = device.SceneManager.CollisionManager.
                        GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
                }
                else if (p_event.MouseInputEvent == MouseInputEvent.LMousePressedDown)
                {
                    SceneNode tempSel = device.SceneManager.CollisionManager.
                        GetSceneNodeFromScreenCoordinates(device.CursorControl.Position);
                    if (nodeSelected == tempSel)
                        nodeSelected = null;
                    else
                        nodeSelected = tempSel;
                }

            }

            // check if user presses the key 'S'
            if (p_event.Type == EventType.KeyInputEvent &&
                !p_event.KeyPressedDown)
            {
                switch (p_event.KeyCode)
                {
                    case KeyCode.Key_S:
                        SplitScreen = !SplitScreen;
                        //break;
                        return true;
                }

                //Send all other events to camera4
                if (camera[3] != null)
                {
                    camera[3].OnEvent(p_event);
                }
            }
            return false;
        }

        static void Main(string[] args)
        {
            // ask user for driver
            DriverType driverType = DriverType.Direct3D9;

            // Ask user to select driver:
            StringBuilder sb = new StringBuilder();
            sb.Append("Please select the driver you want for this example:\n");
            sb.Append("(a) Direct3D 9.0c\n(b) Direct3D 8.1\n(c) OpenGL 1.5\n");
            sb.Append("(d) Software Renderer\n(e) Apfelbaum Software Renderer\n");
            sb.Append("(f) Null Device\n(otherKey) exit\n\n");

            // Get the user's input:
            TextReader tIn = Console.In;
            TextWriter tOut = Console.Out;
            tOut.Write(sb.ToString());
            string input = tIn.ReadLine();

            // Select device based on user's input:
            switch (input)
            {
                case "a":
                    driverType = DriverType.Direct3D9;
                    break;
                case "b":
                    driverType = DriverType.Direct3D8;
                    break;
                case "c":
                    driverType = DriverType.OpenGL;
                    break;
                case "d":
                    driverType = DriverType.Software;
                    break;
                case "e":
                    driverType = DriverType.Software2;
                    break;
                case "f":
                    driverType = DriverType.Null;
                    break;
                default:
                    return;
            }
            // Create device and exit if creation fails:
            device = new IrrlichtDevice(driverType, new Dimension2D(ResX, ResY), 32, fullScreen, true, true, true);
            device.FileSystem.WorkingDirectory = "media"; //We set Irrlicht's current directory to %application directory%/media
            device.OnEvent += new OnEventDelegate(OnEvent); //We had a simple delegate that will handle every event
            SceneManager smgr = device.SceneManager;
            VideoDriver driver = device.VideoDriver;

            //Load model
            AnimatedMesh model = smgr.GetMesh("sydney.md2");
            AnimatedMeshSceneNode model_node = smgr.AddAnimatedMeshSceneNode(model);
            //Load texture
            Texture texture = driver.GetTexture("sydney.bmp");
            model_node.SetMaterialTexture(0, texture);
            //Disable lighting (we've got no light)
            model_node.SetMaterialFlag(MaterialFlag.Lighting, false);

            //Load map
            device.FileSystem.AddZipFileArchive("map-20kdm2.pk3", true, true);
            AnimatedMesh map = smgr.GetMesh("20kdm2.bsp");
            SceneNode map_node = smgr.AddOctTreeSceneNode(map.GetMesh(0), null, -1, 128);
            //Set position
            map_node.Position = new Vector3D(-850, -220, -850);

            //-=Create 3 fixed and one user-controlled cameras=-
            //Front
            camera[0] = smgr.AddCameraSceneNode(null);
            camera[0].Position = new Vector3D(70, 0, 0);
            camera[0].Target = new Vector3D(0, 0, 0);
            //Top
            camera[1] = smgr.AddCameraSceneNode(null);
            camera[1].Position = new Vector3D(0, 70, 0);
            camera[1].Target = new Vector3D(0, 0, 0);
            //Left
            camera[2] = smgr.AddCameraSceneNode(null);
            camera[2].Position = new Vector3D(0, 0, 70);
            camera[2].Target = new Vector3D(0, 0, 0);
            //User-controlled
            camera[3] = smgr.AddCameraSceneNodeFPS(null, 100, 100, false);
            //camera[3] = smgr.AddCameraSceneNodeMaya(null, 100, 100, 100,-1);
            camera[3].Position = new Vector3D(70, 70, 70);
            camera[3].Target = new Vector3D(0, 0, 0);


            //Hide mouse
            device.CursorControl.Visible = false;

            //We want to count the fps
            int lastFPS = -1;

            while (device.Run())
            {
                //Set the viewpoint the the whole screen and begin scene
                driver.ViewPort = new Rect(new Position2D(0, 0), new Position2D(ResX, ResY));
                driver.BeginScene(true, true, new Color(0, 100, 100, 100));

                //If SplitScreen is used
                if (SplitScreen)
                {
                    //Activate camera1
                    smgr.ActiveCamera = camera[0];
                    //Set viewpoint to the first quarter (left top)
                    driver.ViewPort = new Rect(new Position2D(0, 0), new Position2D(ResX / 2, ResY / 2));
                    //Draw scene
                    smgr.DrawAll();

                    //Activate camera2
                    smgr.ActiveCamera = camera[1];
                    //Set viewpoint to the second quarter (right top)
                    driver.ViewPort = new Rect(new Position2D(ResX / 2, 0), new Position2D(ResX, ResY / 2));
                    //Draw scene
                    smgr.DrawAll();

                    //Activate camera3
                    smgr.ActiveCamera = camera[2];
                    //Set viewpoint to the third quarter (left bottom)
                    driver.ViewPort = new Rect(new Position2D(0, ResY / 2), new Position2D(ResX / 2, ResY));
                    //Draw scene
                    smgr.DrawAll();

                    //Set viewport the last quarter (right bottom)
                    driver.ViewPort = new Rect(new Position2D(ResX / 2, ResY / 2), new Position2D(ResX, ResY));
                }

                //Activate camera4
                smgr.ActiveCamera = camera[3];
                //Draw scene
                smgr.DrawAll();
                if (nodeUnderCursor != null)
                    device.VideoDriver.Draw3DBox(nodeUnderCursor.TransformedBoundingBox, Color.Green);
                if (nodeSelected != null)
                    device.VideoDriver.Draw3DBox(nodeSelected.TransformedBoundingBox, Color.Red);
                driver.EndScene();

                //Get and show fps
                if (driver.FPS != lastFPS)
                {
                    device.WindowCaption = "Irrlicht SplitScreen-Example " +
                            " FPS:" + lastFPS.ToString();
                    lastFPS = driver.FPS;
                }
                System.Threading.Thread.Sleep(0);
            }

            //Delete device
            device.Dispose();

        }
    }
}



So das wars. Mir hat es diesmal wieder sehr viel spass gemacht das Tutorial zu übersetzen.
Und über Kommentare Kritik oder auch lob würde ich mich sehr freuen. Auch würde ich mich
freuen wenn ihr mal ein blick auf unsere Seite wirft.

_________________
XtremBit.kilu.de
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de