/// <summary> /// Render a teapot in modern opengl. /// </summary> /// <returns></returns> public static MultiTargetTeapotNode Create(bool adjacent = false) { IBufferSource model; vec3 size; if (adjacent) { var m = new AdjacentTeapot(); size = m.GetModelSize(); model = m; } else { var m = new Teapot(); size = m.GetModelSize(); model = m; } string position = adjacent ? AdjacentTeapot.strPosition : Teapot.strPosition; string color = adjacent ? AdjacentTeapot.strColor : Teapot.strColor; var vs = new VertexShader(vertexCode); var fs = new FragmentShader(fragmentCode); var provider = new ShaderArray(vs, fs); var map = new AttributeMap(); map.Add(inPosition, position); map.Add(inColor, color); var builder = new RenderMethodBuilder(provider, map); var node = new MultiTargetTeapotNode(model, position, builder); node.Initialize(); node.ModelSize = size; return(node); }
private void FormMain_Load(object sender, EventArgs e) { var teapot = MultiTargetTeapotNode.Create(); this.teapot = teapot; var framebufferProvider = new MultiTargetFramebufferProvider(); this.framebufferProvider = framebufferProvider; var rtt = new RenderToTextureNode(width, height, new Camera(new vec3(0, 0, 5), new vec3(0, 0, 0), new vec3(0, 1, 0), CameraType.Perspecitive, width, height), framebufferProvider); rtt.Children.Add(teapot);// rendered to framebuffer, then to texture. //this.rtt = rtt; var rectangle = RectangleNode.Create(); //var rectangle = new LegacyRectangleRenderer();//LegacyRectangleRenderer dosen't work in rendering-to-texture. rectangle.TextureSource = rtt; rectangle.Scale = new vec3(7, 7, 7); this.rectangle = rectangle; var group = new GroupNode(); group.Children.Add(rtt); group.Children.Add(rectangle); var position = new vec3(5, 1, 4); var center = new vec3(0, 0, 0); var up = new vec3(0, 1, 0); var camera = new Camera(position, center, up, CameraType.Perspecitive, this.winGLCanvas1.Width, this.winGLCanvas1.Height); this.scene = new Scene(camera) { ClearColor = Color.SkyBlue.ToVec4(), RootNode = group, }; var list = new ActionList(); var transformAction = new TransformAction(scene); list.Add(transformAction); var renderAction = new RenderAction(scene); list.Add(renderAction); this.actionList = list; }