SceneNode CreateAnnotation(Vector3 start, Vector3 end, Vector3 offset, String text) { var line = GeometryBuilder.CreateLine(start + offset, end + offset); var mesh = FontManager.Instance().CreateMesh(text); var textNode = new PrimitiveSceneNode(mesh, null); float scale = 0.015f; textNode.SetTransform(Matrix4.makeRotationAxis(Vector3.UNIT_X, 3.14159f * 0.5f) * Matrix4.makeScale(scale, scale, 1)); textNode.ComputeBoundingBox(Matrix4.Identity); float halfW = textNode.GetWorldBBox().getHalfSize().x; var dist = end.distanceTo(start); float ratio = (dist * 0.5f - halfW) / dist; textNode.SetTransform(Matrix4.makeTranslation((start + end) * ratio + offset) * textNode.GetTransform()); var line2 = GeometryBuilder.CreateLine(start, start + offset + new Vector3(0, 0, -2)); var line3 = GeometryBuilder.CreateLine(end, end + offset + new Vector3(0, 0, -2)); GroupSceneNode group = new GroupSceneNode(); group.AddNode(new PrimitiveSceneNode(line, null)); group.AddNode(new PrimitiveSceneNode(line2, null)); group.AddNode(new PrimitiveSceneNode(line3, null)); group.AddNode(textNode); return(group); }
public override void Run(RenderControl render) { var arc = SketchBuilder.MakeArcOfCircle(new GCirc(GP.XOY(), 10), 0, Math.PI); var points = new GPntList { new GPnt(0, 0, 0), new GPnt(2, 5, 0), new GPnt(15, 15, 0) }; var line = SketchBuilder.MakeBSpline(points); var extrema = new ExtremaCurveCurve(); extrema.Initialize(arc, line); int count = extrema.GetPointCount(); for (int ii = 0; ii < count; ++ii) { var point = extrema.GetPoint1(ii); var node = new PrimitiveSceneNode(GeometryBuilder.AtomSphere(), EnumPrimitiveType.TRIANGLES, null); node.SetTransform(Matrix4.makeTranslation(Vector3.From(point))); render.ShowSceneNode(node); } render.ShowShape(arc, Vector3.Red); render.ShowShape(line, Vector3.Green); }
public bool Play(RenderControl render, float time) { if (mCurrentIdx >= mPoints.Count) { mLineNode.SetVisible(false); return(false); } mTime += time; if (mTime < 100) //距离上次更新不到100ms,就返回 { return(true); } mTime = 0; Vector3 target = mPoints[mCurrentIdx]; mLineNode.SetTransform(MakeTransform(mStart, target)); mLineNode.RequstUpdate(); mMotionTrail.SetPosition((uint)mCurrentIdx, target); mMotionTrail.RequstUpdate(); render.RequestDraw(EnumUpdateFlags.Scene); ++mCurrentIdx; return(true); }
public void Create(RenderControl render) { // 随便构造些点 float offset = 10.0f; for (int ii = 0; ii < 10; ++ii) { for (int jj = 0; jj < ii; ++jj) { mPoints.Add(new Vector3(jj * offset, 100, ii * offset)); } } mMotionTrail = new ParticleSceneNode((uint)mPoints.Count, ColorTable.Green, 3.0f); mCurrentIdx = 0; render.ShowSceneNode(mMotionTrail); var lineMaterial = BasicMaterial.Create("myline"); lineMaterial.SetColor(ColorTable.Hex(0xFF0000)); var line = GeometryBuilder.CreateLine(Vector3.Zero, new Vector3(1, 0, 0)); mLineNode = new PrimitiveSceneNode(line, lineMaterial); mLineNode.SetTransform(MakeTransform(mStart, mPoints[0])); mLineNode.RequstUpdate(); render.ShowSceneNode(mLineNode); }
public override void Run(RenderControl render) { // add a plane var mMaterial1 = MeshPhongMaterial.Create("phong.texture"); mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide); var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg")); mMaterial1.SetColorMap(texture); var plane = GeometryBuilder.CreatePlane(500, 500); var planeNode = new PrimitiveSceneNode(plane, mMaterial1); planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -2.5f))); planeNode.SetPickable(false); render.ShowSceneNode(planeNode); mDevice = new PrimitiveSceneNode(GeometryBuilder.CreateSphere(5), null); render.ShowSceneNode(mDevice); mCome = new RigidAnimation(); mCome.Add(new MoveAnimationClip(mDevice, mWorkingPosition, 0, 5)); mGo = new RigidAnimation(); mGo.Add(new MoveAnimationClip(mDevice, new Vector3(-200, -200, 0), 0, 5)); }
public override void Run(RenderControl render) { // Create material var mMaterial1 = MeshPhongMaterial.Create("phong.texture"); mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide); var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg")); mMaterial1.SetColorMap(texture); var plane = GeometryBuilder.CreatePlane(500, 500); var planeNode = new PrimitiveSceneNode(plane, mMaterial1); planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -100))); render.ShowSceneNode(planeNode); var box = GeometryBuilder.CreateBox(100, 100, 200); var boxNode = new PrimitiveSceneNode(box, mMaterial1); render.ShowSceneNode(boxNode); var sphere = GeometryBuilder.CreateSphere(50, 32, 32); var sphereNode = new PrimitiveSceneNode(sphere, mMaterial1); sphereNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, 150))); render.ShowSceneNode(sphereNode); }
public override void Run(RenderControl render) { if (!mLoaded) { mLoaded = true; FontManager.Instance().AddFont("LS", @"C:\Windows\Fonts\STLITI.TTF"); } { var fontMaterial = FontMaterial.Create("font-texture-1"); fontMaterial.SetFaceSide(EnumFaceSide.DoubleSide); fontMaterial.SetColor(new Vector3(1, 1, 0)); fontMaterial.SetBackground(new Vector3(0, 0, 1)); fontMaterial.SetBillboard(true); var dim = fontMaterial.SetText("Hello 世界!", 128, "LS"); var shape = GeometryBuilder.CreatePlane(dim.x * 0.1f, dim.y * 0.1f); var node = new PrimitiveSceneNode(shape, fontMaterial); node.SetPickable(false); render.ShowSceneNode(node); } { var fixedSizeMaterial = SpriteMaterial.Create("font-mesh-material"); fixedSizeMaterial.SetSizeAttenuation(false); fixedSizeMaterial.SetColor(ColorTable.Green); var mesh = FontManager.Instance().CreateMesh("哈哈"); var node = new PrimitiveSceneNode(mesh, fixedSizeMaterial); var scale = 1 / 2200.0f; node.SetTransform(Matrix4.makeTranslation(0, 0, 10) * Matrix4.makeScale(scale, scale, scale)); node.SetPickable(false); render.ShowSceneNode(node); } }