//---------------------------------------------------------------------------- Polypoint* FoucaultPendulum::CreatePath () { // Points used to display path of pendulum. VertexFormat* vformat = VertexFormat::Create(2, VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0, VertexFormat::AU_COLOR, VertexFormat::AT_FLOAT3, 0); int vstride = vformat->GetStride(); const int numPoints = 8192; VertexBuffer* vbuffer = new0 VertexBuffer(numPoints, vstride); VertexBufferAccessor vba(vformat, vbuffer); Float3 zero(0.0f, 0.0f, 0.0f); Float3 white(1.0f, 1.0f, 1.0f); for (int i = 0; i < numPoints; ++i) { vba.Position<Float3>(i) = zero; vba.Color<Float3>(0, i) = white; } mPath = new0 Polypoint(vformat, vbuffer); mPath->SetNumPoints(1); mNextPoint = 0; mColorDiff = 1.0f/(float)numPoints; mPath->SetEffectInstance(VertexColor3Effect::CreateUniqueInstance()); return mPath; }
//---------------------------------------------------------------------------- void PointSystems::CreateScene () { mScene = new0 Node(); VertexFormat* vformat = VertexFormat::Create(2, VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0, VertexFormat::AU_COLOR, VertexFormat::AT_FLOAT3, 0); int vstride = vformat->GetStride(); VertexBuffer* vbuffer = new0 VertexBuffer(1024, vstride); VertexBufferAccessor vba(vformat, vbuffer); for (int i = 0; i < vba.GetNumVertices(); ++i) { vba.Position<Float3>(i) = Float3(Mathf::SymmetricRandom(), Mathf::SymmetricRandom(), Mathf::SymmetricRandom()); vba.Color<Float3>(0, i) = Float3(Mathf::UnitRandom(), Mathf::UnitRandom(), Mathf::UnitRandom()); } Polypoint* points = new0 Polypoint(vformat, vbuffer); points->AttachController(new0 RandomController()); points->SetEffectInstance(VertexColor3Effect::CreateUniqueInstance()); mScene->AttachChild(points); }
//---------------------------------------------------------------------------- void PointInPolyhedron::CreateScene () { mScene = new0 Node(); mWireState = new0 WireState(); mRenderer->SetOverrideWireState(mWireState); // Create a semitransparent sphere mesh. VertexFormat* vformatMesh = VertexFormat::Create(1, VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0); TriMesh* mesh = StandardMesh(vformatMesh).Sphere(16, 16, 1.0f); Material* material = new0 Material(); material->Diffuse = Float4(1.0f, 0.0f, 0.0f, 0.25f); VisualEffectInstance* instance = MaterialEffect::CreateUniqueInstance( material); instance->GetEffect()->GetAlphaState(0, 0)->BlendEnabled = true; mesh->SetEffectInstance(instance); // Create the data structures for the polyhedron that represents the // sphere mesh. CreateQuery(mesh); // Create a set of random points. Points inside the polyhedron are // colored white. Points outside the polyhedron are colored blue. VertexFormat* vformat = VertexFormat::Create(2, VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0, VertexFormat::AU_COLOR, VertexFormat::AT_FLOAT3, 0); int vstride = vformat->GetStride(); VertexBuffer* vbuffer = new0 VertexBuffer(1024, vstride); VertexBufferAccessor vba(vformat, vbuffer); Float3 white(1.0f, 1.0f, 1.0f); Float3 blue(0.0f, 0.0f, 1.0f); for (int i = 0; i < vba.GetNumVertices(); ++i) { Vector3f random(Mathf::SymmetricRandom(), Mathf::SymmetricRandom(), Mathf::SymmetricRandom()); vba.Position<Vector3f>(i) = random; if (mQuery->Contains(random)) { vba.Color<Float3>(0, i) = white; } else { vba.Color<Float3>(0, i) = blue; } } DeleteQuery(); mPoints = new0 Polypoint(vformat, vbuffer); mPoints->SetEffectInstance(VertexColor3Effect::CreateUniqueInstance()); mScene->AttachChild(mPoints); mScene->AttachChild(mesh); }