public JellySimulation(SceneManager sceneManager, ShaderProvider shaderProvider) { _sceneManager = sceneManager; _shaderProvider = shaderProvider; ControlFrame = new Node(new Transform(Vector3.Zero, Quaternion.Identity /* Quaternion.FromEulerAngles(1.0f, 1.0f, 0.0f)*/, Vector3.One), "controlFrame"); ControlFrameRenderer = new LineRenderer(shaderProvider.DefaultShader); var jellyControlFrame = new JellyControlFrame(ControlFrameRenderer, 1.0); ControlFrame.AttachComponents(ControlFrameRenderer, jellyControlFrame); Jelly = new Node(new Transform(Vector3.Zero, Quaternion.Identity, Vector3.One), "jelly"); var boundingBoxRenderer = new LineRenderer(shaderProvider.DefaultShader); var jellyBoundingBox = new JellyBoundingBox(boundingBoxRenderer, 5.0); var jellyData = new JellyData(); JellyRenderer = new DynamicPatchRenderer(shaderProvider.SurfaceShaderBezier, new Mesh(VertexLayout.Type.Position), jellyData); JellyController = new JellyController(jellyControlFrame); WireframeRenderer = new LineRenderer(shaderProvider.DefaultShader); var jellyCPVisualizer = new JellyControlPointVisualizer(WireframeRenderer); Jelly.AttachComponents(jellyData, JellyRenderer, JellyController, boundingBoxRenderer, jellyBoundingBox, WireframeRenderer, jellyCPVisualizer); _sceneManager.CurrentScene.AttachChild(Jelly); _sceneManager.CurrentScene.AttachChild(ControlFrame); var meshData = MeshLoader.LoadObj("monkey2.obj"); var monkey = new Node(new Transform(Vector3.Zero, Quaternion.Identity, Vector3.One), "monkey"); var jellyMesh = new JellyMesh(jellyData, meshData.positions, meshData.normals); JellyMeshRenderer = new DynamicMeshRenderer(shaderProvider.PhongShader, meshData.mesh); monkey.AttachComponents(JellyMeshRenderer, jellyMesh); _sceneManager.CurrentScene.AttachChild(monkey); }
public override void Render(double time, Framebuffer fbuf, StaticMeshRenderer staticMesh, DynamicMeshRenderer dynamicMesh, Matrix4 p, Matrix4 v, VRHand eye) { try { if (mesh[eye] == null || mesh[eye].Length == 0) { Engine.HMDClient.GetControllerMesh(poses[eye].ActiveOrigin, meshGroup, out mesh[eye], out tex[eye]); texHandles[eye] = new TextureHandle[tex[eye].Length]; for (int i = 0; i < tex[eye].Length; i++) { texHandles[eye][i] = tex[eye][i].GetHandle(TextureSampler.Default); texHandles[eye][i].SetResidency(Residency.Resident); } } var transforms = Engine.HMDClient.GetComponentTransforms(poses[eye].ActiveOrigin); for (int i = 0; i < transforms.Length; i++) { staticMesh.DrawC(mesh[eye][i], transforms[i] * poses[eye].PoseMatrix, texHandles[eye][i]); } } catch (Exception) { } }