public override void Run(RenderControl render) { var geometry = FontManager.Instance().CreateMesh("AnyCAD!"); var node = new PrimitiveSceneNode(geometry, null); render.ShowSceneNode(node); }
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); }
private void NewForm3D_Load(object sender, EventArgs e) { var box = GeometryBuilder.CreateBox(100, 200, 300); var material = MeshPhongMaterial.Create("simple"); material.SetColor(ColorTable.Red); var node = new PrimitiveSceneNode(box, material); mRenderView.ShowSceneNode(node); mRenderView.SetStandardView(EnumStandardView.DefaultView); mRenderView.ZoomAll(); // 转发给事件处理 mRenderView.SetAfterRenderingCallback(() => { if (UpdateTagEvent != null) { UpdateTagEvent(); } }); // 创建两个自定义标注 var mTagCtl = new MyTagControl(mRenderView, new Vector3(200, 300, 400), Vector3.Zero); UpdateTagEvent += mTagCtl.UpdateLayout; var mTagCtl2 = new MyTagControl(mRenderView, new Vector3(-100, -200, 100), Vector3.Zero); UpdateTagEvent += mTagCtl2.UpdateLayout; }
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 (!ReadData()) { return; } var material = MeshPhongMaterial.Create("cae-material"); material.GetTemplate().SetVertexColors(true); material.SetFaceSide(EnumFaceSide.DoubleSide); var position = BufferAttribute.Create(EnumAttributeSemantic.Position, EnumAttributeComponents.Three, mPositions); var color = BufferAttribute.Create(EnumAttributeSemantic.Color, EnumAttributeComponents.Three, mColors); BufferGeometry geometry = new BufferGeometry(); geometry.AddAttribute(position); geometry.AddAttribute(color); NormalCalculator.ComputeVertexNormals(geometry); var node = new PrimitiveSceneNode(geometry, EnumPrimitiveType.TRIANGLES, material); node.SetPickable(false); PaletteWidget pw = new PaletteWidget(); pw.Update(mColorTable); render.ShowSceneNode(pw); render.ShowSceneNode(node); }
public override void Run(RenderControl render) { CreateShader(); mMaterial = MaterialManager.Instance().FindInstance("blackHole_instance"); if (mMaterial == null) { var template = MaterialManager.Instance().CreateTemplateByName("blackHole_shader_template", shaderName); mMaterial = MaterialManager.Instance().Create("blackHole_instance", template); } var plane = GeometryBuilder.CreatePlane(2, 2); var node = new PrimitiveSceneNode(plane, mMaterial); node.SetPickable(false); render.ShowSceneNode(node); }
public override void Run(RenderControl render) { if (!ReadData()) { return; } var material = PointsMaterial.Create("point-material"); material.GetTemplate().SetVertexColors(true); var geometry = GeometryBuilder.CreatePoints(new Float32Array(mPositions), new Float32Array(mColors)); var node = new PrimitiveSceneNode(geometry, material); //node.SetPickable(false); render.ShowSceneNode(node); }
public override void Run(RenderControl render) { // prepare points data const int COUNT = 300; var buffer = new Float32Buffer(0); buffer.Reserve(COUNT * 3); var colors = new Float32Buffer(0); Random random = new Random(); for (int i = 0; i < COUNT; i++) { float x = 2000 * (float)random.NextDouble() - 1000; float y = 2000 * (float)random.NextDouble() - 1000; float z = 2000 * (float)random.NextDouble() - 1000; buffer.Append(x, y, z); colors.Append((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()); } var primitive = GeometryBuilder.CreatePoints(new Float32Array(buffer), new Float32Array(colors)); // prepare point material var material = PointsMaterial.Create("points-material"); material.SetSizeAttenuation(false); material.SetPointSize(15.0f); material.SetColorMap(ImageTexture2D.Create(GetResourcePath("textures/snowflake7_alpha.png"))); material.SetTransparent(true); // enable vertex color material.GetTemplate().SetVertexColors(true); // add to scene var node = new PrimitiveSceneNode(primitive, material); node.SetPickable(false); render.ShowSceneNode(node); }
public override void Run(RenderControl render) { mGeometry = GeometryBuilder.CreatePlane(20000, 20000, worldWidth - 1, worldDepth - 1); var position = mGeometry.GetGeometry().GetAttribute(0); position.SetDataUsage(EnumBufferDataUsage.DYNAMIC_DRAW); var mPosition = new Float32Array(position.GetData()); for (uint i = 0; i < position.GetCount() / 3; i++) { float z = (float)(35 * Math.Sin(i / 2)); mPosition.SetValue(i * 3 + 2, z); } var material = BasicMaterial.Create("basic-water"); var img = FileImage.Create(GetResourcePath("textures/water.png")); var texture = new ImageTexture2D(); texture.SetSource(img); var desc = texture.GetDesc(); desc.SetWrapS(EnumTextureWrappingType.REPEAT); desc.SetWrapT(EnumTextureWrappingType.REPEAT); texture.SetRepeat(new Vector2(5, 5)); material.AddTexture("map", texture); var color = Vector3.ColorFromHex(0x0044ff); material.SetUniform("diffuse", Uniform.Create(color)); var node = new PrimitiveSceneNode(mGeometry, material); node.SetPickable(false); node.SetCulling(false); render.ShowSceneNode(node); }
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); } }
public override void Run(RenderControl render) { // prepare lines data const int COUNT = 300; var buffer = new Float32Buffer(0); buffer.Reserve(COUNT * 3); var colors = new Float32Buffer(0); Random random = new Random(); for (int i = 0; i < COUNT; i++) { float x = 20 * (float)random.NextDouble() - 10; float y = 20 * (float)random.NextDouble() - 10; float z = 20 * (float)random.NextDouble() - 10; buffer.Append(x, y, z); colors.Append((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()); } var primitive = GeometryBuilder.CreateLines(new Float32Array(buffer), null, new Float32Array(colors)); GeometryBuilder.ComputeLineDistances(primitive); // prepare dashed line material var material = LineDashedMaterial.Create("dashed-line"); // enable vertex color material.SetVertexColors(true); material.SetDashSize(1.0f); // add to scene var node = new PrimitiveSceneNode(primitive, material); render.ShowSceneNode(node); }