Пример #1
0
        static void Main(string[] args)
        {
            Ag.initialize();
            Aardvark.Base.Aardvark.Init();

            using (var app = new OpenGlApplication())
            {
                var win = app.CreateSimpleRenderWindow(1);

                var view        = CameraView.LookAt(new V3d(2.0, 2.0, 2.0), V3d.Zero, V3d.OOI);
                var perspective =
                    win.Sizes.Select(s => FrustumModule.perspective(60.0, 0.1, 10.0, ((float)s.X / (float)s.Y)));


                var viewTrafo = DefaultCameraController.control(win.Mouse, win.Keyboard, win.Time, view);

                var index     = new[] { 0, 1, 2, 0, 2, 3 };
                var positions = new[] { new V3f(-1, -1, 0), new V3f(1, -1, 0), new V3f(1, 1, 0), new V3f(-1, 1, 0) };

                var attributes = new SymbolDict <Array>()
                {
                    { DefaultSemantic.Positions, positions }
                };

                var quad = new IndexedGeometry(IndexedGeometryMode.TriangleList,
                                               (Array)index,
                                               attributes,
                                               new SymbolDict <Object>());

                var quadSg = quad.ToSg();

                // This is one of the hardest parts in C#. Our FShade interface is rather generic and
                // works super awesome in F#. In C# however, without proper type inference doing simple function
                // calls suddenly requires a Phd in CS. Therefore, and especially since shaders cannot be written
                // in C# anyways, write application setup and shader code in F# ;)
                // Or don't use FShade. FShade simply does not work in without functional language
                // features such as type inference and function currying.
                Func <DefaultSurfaces.Vertex, FSharpExpr <V4d> > whiteShader =
                    HighFun.ApplyArg0 <C4f, DefaultSurfaces.Vertex, FSharpExpr <V4d> >(
                        DefaultSurfaces.constantColor, C4f.White);
                Func <DefaultSurfaces.Vertex, FSharpExpr <DefaultSurfaces.Vertex> > trafo = c => DefaultSurfaces.trafo(c);

                var sg =
                    quadSg
                    .WithEffects(new[] {
                    FShadeSceneGraph.toEffect(FSharpFuncUtil.Create(trafo)),
                    FShadeSceneGraph.toEffect(FSharpFuncUtil.Create(whiteShader)),
                })
                    .ViewTrafo(viewTrafo.Select(t => t.ViewTrafo))
                    .ProjTrafo(perspective.Select(t => t.ProjTrafo()));

                var task = app.Runtime.CompileRender(win.FramebufferSignature, sg);

                win.RenderTask = DefaultOverlays.withStatistics(task);
                win.Run();
            }
        }
Пример #2
0
        public MainWindow()
        {
            Ag.initialize();               // initialize scenegraph
            Aardvark.Base.Aardvark.Init(); // initialize aardvark base modules

            var app = new Aardvark.Application.WPF.OpenGlApplication(true);

            InitializeComponent();
            app.Initialize(renderControl, 1);

            var cone                = IndexedGeometryPrimitives.Cone.solidCone(V3d.OOO, V3d.OOI, 1.0, 0.2, 12, C4b.Red).ToSg(); // build object from indexgeometry primitives
            var cube                = SgPrimitives.Sg.box(Mod.Init(C4b.Blue), Mod.Init(Box3d.Unit));                            // or directly using scene graph
            var initialViewTrafo    = CameraViewModule.lookAt(V3d.III * 3.0, V3d.OOO, V3d.OOI);
            var controlledViewTrafo = Aardvark.Application.DefaultCameraController.control(renderControl.Mouse, renderControl.Keyboard,
                                                                                           renderControl.Time, initialViewTrafo);
            var frustum = renderControl.Sizes.Map(size => FrustumModule.perspective(60.0, 0.1, 10.0, size.X / (float)size.Y));

            var whiteShader = Aardvark.Base.Rendering.Effects.SimpleLighting.Effect;
            var trafo       = Effects.Trafo.Effect;

            var currentAngle = 0.0;
            var angle        = renderControl.Time.Map(t =>
            {
                if (checkBox.IsChecked.Value)
                {
                    return(currentAngle += 0.001);
                }
                else
                {
                    return(currentAngle);
                }
            });
            var rotatingTrafo = angle.Map((whyCantShadowName) => Trafo3d.RotationZ(whyCantShadowName));

            var sg =
                new[] { cone, cube.Trafo(rotatingTrafo) }
            .ToSg()
            .WithEffects(new[] { trafo, whiteShader })
            .ViewTrafo(controlledViewTrafo.Map(c => c.ViewTrafo))
            .ProjTrafo(frustum.Map(f => f.ProjTrafo()));

            renderControl.RenderTask =
                Aardvark.Base.RenderTask.ofArray(
                    new[] {
                app.Runtime.CompileClear(renderControl.FramebufferSignature, Mod.Init(C4f.Red)),
                app.Runtime.CompileRender(renderControl.FramebufferSignature, sg)
            }
                    );
        }
Пример #3
0
 static void Main(string[] args)
 {
     Ag.initialize();
     Aardvark.Base.Aardvark.Init();
     RunUI();
 }