private void DrawSolidColorMesh(GLFrameworkEngine.ShaderProgram shader, BfresMeshAsset mesh) { if (!mesh.IsVisible) { return; } if (mesh.SkinCount > 0) { SetModelMatrix(shader.program, ModelData.Skeleton, mesh.SkinCount > 1); } var worldTransform = ParentRender.Transform.TransformMatrix; var transform = this.ModelData.Skeleton.Bones[mesh.BoneIndex].Transform; shader.SetMatrix4x4("RigidBindTransform", ref transform); shader.SetMatrix4x4("mtxMdl", ref worldTransform); shader.SetInt("SkinCount", mesh.SkinCount); shader.SetInt("UseSkinning", 1); //Draw the mesh mesh.defaultVao.Enable(shader); mesh.defaultVao.Use(); mesh.Draw(); }
public void CreateMaterialRender(GLContext control, GenericPickableMesh mesh, RenderObject renderObject, EventHandler thumbnailUpdated, int width = 50, int height = 50) { ShaderProgram shader = this.GetShader(); if (shader == null) { return; } Framebuffer frameBuffer = new Framebuffer(FramebufferTarget.Framebuffer, width, height); frameBuffer.Bind(); //Create a simple mvp matrix to render the material data Matrix4 modelMatrix = Matrix4.CreateTranslation(0, 0, -12); Matrix4 viewMatrix = Matrix4.Identity; Matrix4 mtxProj = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(90), 1.0f, 1.0f, 1000f); Matrix4 viewProj = mtxProj * viewMatrix; GL.UseProgram(shader.program); shader.SetMatrix4x4("mtxCam", ref viewProj); shader.SetMatrix4x4("mtxMdl", ref modelMatrix); shader.SetVector3("camPosition", control.Camera.TargetPosition); shader.SetVector2("iResolution", new Vector2(control.Width, control.Height)); shader.SetInt("materialRenderDisplay", 1); GL.ClearColor(0, 0, 0, 0); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Viewport(0, 0, width, height); //Render material data onto a textured sphere Render(control, shader, mesh); GL.Enable(EnableCap.Blend); GL.BlendFuncSeparate( BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha, BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha); //Draw the model to render onto switch (renderObject) { case RenderObject.Sphere: DrawSphere(control); break; case RenderObject.Plane: DrawPlane(control); break; } //Disable the uniform data shader.SetInt("materialRenderDisplay", 0); //Disable shader and textures GL.UseProgram(0); GL.BindTexture(TextureTarget.Texture2D, 0); var thumbnail = frameBuffer.ReadImagePixels(true); //Dispose frame buffer frameBuffer.Dispoe(); frameBuffer.DisposeRenderBuffer(); this.Thumbnail = thumbnail; thumbnailUpdated?.Invoke(this, EventArgs.Empty); }