本文整理汇总了C++中StaticModel::SetModel方法的典型用法代码示例。如果您正苦于以下问题:C++ StaticModel::SetModel方法的具体用法?C++ StaticModel::SetModel怎么用?C++ StaticModel::SetModel使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StaticModel
的用法示例。
在下文中一共展示了StaticModel::SetModel方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateGUI
void Player::CreateGUI()
{
UI* ui = GetSubsystem<UI>();
Text* scoreText = ui->GetRoot()->CreateChild<Text>();
scoreText->SetName("Score");
scoreTextName_ = scoreText->GetName();
scoreText->SetText(String(score_));
scoreText->SetFont(masterControl_->cache_->GetResource<Font>("Resources/Fonts/skirmishergrad.ttf"), 32);
scoreText->SetColor(Color(0.5f, 0.95f, 1.0f, 0.666f));
scoreText->SetHorizontalAlignment(HA_CENTER);
scoreText->SetVerticalAlignment(VA_CENTER);
scoreText->SetPosition(0, ui->GetRoot()->GetHeight()/2.5f);
//Setup 3D GUI elements
guiNode_ = masterControl_->world.scene->CreateChild("GUI3D");
healthBarNode_ = guiNode_->CreateChild("HealthBar");
healthBarNode_->SetPosition(Vector3(0.0f, 1.0f, 21.0f));
healthBarNode_->SetScale(Vector3(health_, 1.0f, 1.0f));
healthBarModel_ = healthBarNode_->CreateComponent<StaticModel>();
healthBarModel_->SetModel(masterControl_->cache_->GetResource<Model>("Resources/Models/Bar.mdl"));
healthBarModel_->SetMaterial(masterControl_->cache_->GetTempResource<Material>("Resources/Materials/GreenGlowEnvmap.xml"));
shieldBarNode_ = guiNode_->CreateChild("HealthBar");
shieldBarNode_->SetPosition(Vector3(0.0f, 1.0f, 21.0f));
shieldBarNode_->SetScale(Vector3(health_, 0.9f, 0.9f));
shieldBarModel_ = shieldBarNode_->CreateComponent<StaticModel>();
shieldBarModel_->SetModel(masterControl_->cache_->GetResource<Model>("Resources/Models/Bar.mdl"));
shieldBarModel_->SetMaterial(masterControl_->cache_->GetResource<Material>("Resources/Materials/BlueGlowEnvmap.xml"));
Node* healthBarHolderNode = guiNode_->CreateChild("HealthBarHolder");
healthBarHolderNode->SetPosition(Vector3(0.0f, 1.0f, 21.0f));
StaticModel* healthBarHolderModel = healthBarHolderNode->CreateComponent<StaticModel>();
healthBarHolderModel->SetModel(masterControl_->cache_->GetResource<Model>("Resources/Models/BarHolder.mdl"));
healthBarHolderModel->SetMaterial(masterControl_->cache_->GetResource<Material>("Resources/Materials/Metal.xml"));
appleCounterRoot_ = guiNode_->CreateChild("AppleCounter");
for (int a = 0; a < 5; a++){
appleCounter_[a] = appleCounterRoot_->CreateChild();
appleCounter_[a]->SetEnabled(false);
appleCounter_[a]->SetPosition(Vector3(-(a + 8.0f), 1.0f, 21.0f));
appleCounter_[a]->SetScale(0.333f);
StaticModel* apple = appleCounter_[a]->CreateComponent<StaticModel>();
apple->SetModel(masterControl_->cache_->GetResource<Model>("Resources/Models/Apple.mdl"));
apple->SetMaterial(masterControl_->cache_->GetTempResource<Material>("Resources/Materials/GoldEnvmap.xml"));
}
heartCounterRoot_ = guiNode_->CreateChild("HeartCounter");
for (int h = 0; h < 5; h++){
heartCounter_[h] = heartCounterRoot_->CreateChild();
heartCounter_[h]->SetEnabled(false);
heartCounter_[h]->SetPosition(Vector3(h + 8.0f, 1.0f, 21.0f));
heartCounter_[h]->SetScale(0.333f);
StaticModel* heart = heartCounter_[h]->CreateComponent<StaticModel>();
heart->SetModel(masterControl_->cache_->GetResource<Model>("Resources/Models/Heart.mdl"));
heart->SetMaterial(masterControl_->cache_->GetTempResource<Material>("Resources/Materials/RedEnvmap.xml"));
}
}
示例2: Scene
void Urho3DQtApplication::CreateScene()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
scene_ = new Scene(context_);
// Create the Octree component to the scene. This is required before adding any drawable components, or else nothing will
// show up. The default octree volume will be from (-1000, -1000, -1000) to (1000, 1000, 1000) in world coordinates; it
// is also legal to place objects outside the volume but their visibility can then not be checked in a hierarchically
// optimizing manner
scene_->CreateComponent<Octree>();
// Create a child scene node (at world origin) and a StaticModel component into it. Set the StaticModel to show a simple
// plane mesh with a "stone" material. Note that naming the scene nodes is optional. Scale the scene node larger
// (100 x 100 world units)
Node* planeNode = scene_->CreateChild("Plane");
planeNode->SetScale(Vector3(100.0f, 1.0f, 100.0f));
StaticModel* planeObject = planeNode->CreateComponent<StaticModel>();
planeObject->SetModel(cache->GetResource<Model>("Models/Plane.mdl"));
planeObject->SetMaterial(cache->GetResource<Material>("Materials/StoneTiled.xml"));
// Create a directional light to the world so that we can see something. The light scene node's orientation controls the
// light direction; we will use the SetDirection() function which calculates the orientation from a forward direction vector.
// The light will use default settings (white light, no shadows)
Node* lightNode = scene_->CreateChild("DirectionalLight");
lightNode->SetDirection(Vector3(0.6f, -1.0f, 0.8f)); // The direction vector does not need to be normalized
Light* light = lightNode->CreateComponent<Light>();
light->SetLightType(LIGHT_DIRECTIONAL);
// Create more StaticModel objects to the scene, randomly positioned, rotated and scaled. For rotation, we construct a
// quaternion from Euler angles where the Y angle (rotation about the Y axis) is randomized. The mushroom model contains
// LOD levels, so the StaticModel component will automatically select the LOD level according to the view distance (you'll
// see the model get simpler as it moves further away). Finally, rendering a large number of the same object with the
// same material allows instancing to be used, if the GPU supports it. This reduces the amount of CPU work in rendering the
// scene.
const unsigned NUM_OBJECTS = 200;
for (unsigned i = 0; i < NUM_OBJECTS; ++i)
{
Node* mushroomNode = scene_->CreateChild("Mushroom");
mushroomNode->SetPosition(Vector3(Random(90.0f) - 45.0f, 0.0f, Random(90.0f) - 45.0f));
mushroomNode->SetRotation(Quaternion(0.0f, Random(360.0f), 0.0f));
mushroomNode->SetScale(0.5f + Random(2.0f));
StaticModel* mushroomObject = mushroomNode->CreateComponent<StaticModel>();
mushroomObject->SetModel(cache->GetResource<Model>("Models/Mushroom.mdl"));
mushroomObject->SetMaterial(cache->GetResource<Material>("Materials/Mushroom.xml"));
}
// Create a scene node for the camera, which we will move around
// The camera will use default settings (1000 far clip distance, 45 degrees FOV, set aspect ratio automatically)
cameraNode_ = scene_->CreateChild("Camera");
cameraNode_->CreateComponent<Camera>();
// Set an initial position for the camera scene node above the plane
cameraNode_->SetPosition(Vector3(0.0f, 5.0f, 0.0f));
}
示例3: SpawnObject
void Ragdolls::SpawnObject()
{
ResourceCache* cache = GetContext()->m_ResourceCache.get();
Node* boxNode = scene_->CreateChild("Sphere");
boxNode->SetPosition(cameraNode_->GetPosition());
boxNode->SetRotation(cameraNode_->GetRotation());
boxNode->SetScale(0.25f);
StaticModel* boxObject = boxNode->CreateComponent<StaticModel>();
boxObject->SetModel(cache->GetResource<Model>("Models/Sphere.mdl"));
boxObject->SetMaterial(cache->GetResource<Material>("Materials/StoneSmall.xml"));
boxObject->SetCastShadows(true);
RigidBody* body = boxNode->CreateComponent<RigidBody>();
body->SetMass(1.0f);
body->SetRollingFriction(0.15f);
CollisionShape* shape = boxNode->CreateComponent<CollisionShape>();
shape->SetSphere(1.0f);
const float OBJECT_VELOCITY = 10.0f;
// Set initial velocity for the RigidBody based on camera forward vector. Add also a slight up component
// to overcome gravity better
body->SetLinearVelocity(cameraNode_->GetRotation() * Vector3(0.0f, 0.25f, 1.0f) * OBJECT_VELOCITY);
}
示例4: CreateScene
void SceneReplication::CreateScene()
{
scene_ = new Scene(context_);
// Create scene content on the server only
ResourceCache* cache = GetSubsystem<ResourceCache>();
// Create octree and physics world with default settings. Create them as local so that they are not needlessly replicated
// when a client connects
scene_->CreateComponent<Octree>(LOCAL);
scene_->CreateComponent<PhysicsWorld>(LOCAL);
// All static scene content and the camera are also created as local, so that they are unaffected by scene replication and are
// not removed from the client upon connection. Create a Zone component first for ambient lighting & fog control.
Node* zoneNode = scene_->CreateChild("Zone", LOCAL);
Zone* zone = zoneNode->CreateComponent<Zone>();
zone->SetBoundingBox(BoundingBox(-1000.0f, 1000.0f));
zone->SetAmbientColor(Color(0.1f, 0.1f, 0.1f));
zone->SetFogStart(100.0f);
zone->SetFogEnd(300.0f);
// Create a directional light without shadows
Node* lightNode = scene_->CreateChild("DirectionalLight", LOCAL);
lightNode->SetDirection(Vector3(0.5f, -1.0f, 0.5f));
Light* light = lightNode->CreateComponent<Light>();
light->SetLightType(LIGHT_DIRECTIONAL);
light->SetColor(Color(0.2f, 0.2f, 0.2f));
light->SetSpecularIntensity(1.0f);
// Create a "floor" consisting of several tiles. Make the tiles physical but leave small cracks between them
for (int y = -20; y <= 20; ++y)
{
for (int x = -20; x <= 20; ++x)
{
Node* floorNode = scene_->CreateChild("FloorTile", LOCAL);
floorNode->SetPosition(Vector3(x * 20.2f, -0.5f, y * 20.2f));
floorNode->SetScale(Vector3(20.0f, 1.0f, 20.0f));
StaticModel* floorObject = floorNode->CreateComponent<StaticModel>();
floorObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
floorObject->SetMaterial(cache->GetResource<Material>("Materials/Stone.xml"));
RigidBody* body = floorNode->CreateComponent<RigidBody>();
body->SetFriction(1.0f);
CollisionShape* shape = floorNode->CreateComponent<CollisionShape>();
shape->SetBox(Vector3::ONE);
}
}
// Create the camera. Limit far clip distance to match the fog
// The camera needs to be created into a local node so that each client can retain its own camera, that is unaffected by
// network messages. Furthermore, because the client removes all replicated scene nodes when connecting to a server scene,
// the screen would become blank if the camera node was replicated (as only the locally created camera is assigned to a
// viewport in SetupViewports() below)
cameraNode_ = scene_->CreateChild("Camera", LOCAL);
Camera* camera = cameraNode_->CreateComponent<Camera>();
camera->SetFarClip(300.0f);
// Set an initial position for the camera scene node above the plane
cameraNode_->SetPosition(Vector3(0.0f, 5.0f, 0.0f));
}
示例5: add_object
Node* GameApplication::add_object(Node* pParentNode, const String& nodeName,enObjectType type,float x,float y,float z,const char* modelUrl,const char* material)
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
Node* pNode = pParentNode->CreateChild(nodeName);
pNode->SetPosition(Vector3(x, y, z));
if(type == enObjectType_StaticModel)
{
StaticModel* pModel = pNode->CreateComponent<StaticModel>();
pModel->SetModel(cache->GetResource<Model>(modelUrl));
if(material != NULL)
pModel->SetMaterial(0,cache->GetResource<Material>(material));
pModel->SetCastShadows(true);
}
else
{
AnimatedModel* pAniModel = pNode->CreateComponent<AnimatedModel>();
pAniModel->SetModel(cache->GetResource<Model>(modelUrl));
if(material != NULL)
pAniModel->SetMaterial(0,cache->GetResource<Material>(material));
pAniModel->SetCastShadows(true);
}
return pNode;
}
示例6: CreateControllableObject
Node* SceneReplication::CreateControllableObject()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
// Create the scene node & visual representation. This will be a replicated object
Node* ballNode = scene_->CreateChild("Ball");
ballNode->SetPosition(Vector3(Random(40.0f) - 20.0f, 5.0f, Random(40.0f) - 20.0f));
ballNode->SetScale(0.5f);
StaticModel* ballObject = ballNode->CreateComponent<StaticModel>();
ballObject->SetModel(cache->GetResource<Model>("Models/Sphere.mdl"));
ballObject->SetMaterial(cache->GetResource<Material>("Materials/StoneSmall.xml"));
// Create the physics components
RigidBody* body = ballNode->CreateComponent<RigidBody>();
body->SetMass(1.0f);
body->SetFriction(1.0f);
// In addition to friction, use motion damping so that the ball can not accelerate limitlessly
body->SetLinearDamping(0.5f);
body->SetAngularDamping(0.5f);
CollisionShape* shape = ballNode->CreateComponent<CollisionShape>();
shape->SetSphere(1.0f);
// Create a random colored point light at the ball so that can see better where is going
Light* light = ballNode->CreateComponent<Light>();
light->SetRange(3.0f);
light->SetColor(Color(0.5f + (Rand() & 1) * 0.5f, 0.5f + (Rand() & 1) * 0.5f, 0.5f + (Rand() & 1) * 0.5f));
return ballNode;
}
示例7: FillPortalsWorldWithVisibleObstaclesFrom
void World::FillPortalsWorldWithVisibleObstaclesFrom(World& w)
{
ResourceCache* cache = context->GetSubsystem<ResourceCache>();
Material* black = cache->GetResource<Material>("Materials/Black.xml"); // notexture unlit black mat (for override white portals on screen)
if (black)
if (w.scene)
{
PODVector<Node*> nodes;
w.scene->GetChildrenWithComponent<StaticModel>(nodes, true);
for (int i = 0; i < nodes.Size(); i++)
{
Node* n = nodes[i];
if (n)
{
StaticModel* model = n->GetComponent<StaticModel>();
if (model)
{
Node* newNode = scene->CreateChild(n->GetName(), LOCAL);
StaticModel* newModel = newNode->CreateComponent<StaticModel>();
newModel->SetModel(model->GetModel());
newModel->SetMaterial(black);
newNode->SetWorldPosition(n->GetWorldPosition());
newNode->SetWorldRotation(n->GetWorldRotation());
newNode->SetWorldScale(n->GetWorldScale());
}
}
}
}
}
示例8: SpawnObject
void PhysicsStressTest::SpawnObject()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
// Create a smaller box at camera position
Node* boxNode = scene_->CreateChild("SmallBox");
boxNode->SetPosition(cameraNode_->GetPosition());
boxNode->SetRotation(cameraNode_->GetRotation());
boxNode->SetScale(0.25f);
StaticModel* boxObject = boxNode->CreateComponent<StaticModel>();
boxObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
boxObject->SetMaterial(cache->GetResource<Material>("Materials/StoneSmall.xml"));
boxObject->SetCastShadows(true);
// Create physics components, use a smaller mass also
RigidBody* body = boxNode->CreateComponent<RigidBody>();
body->SetMass(0.25f);
body->SetFriction(0.75f);
CollisionShape* shape = boxNode->CreateComponent<CollisionShape>();
shape->SetBox(Vector3::ONE);
const float OBJECT_VELOCITY = 10.0f;
// Set initial velocity for the RigidBody based on camera forward vector. Add also a slight up component
// to overcome gravity better
body->SetLinearVelocity(cameraNode_->GetRotation() * Vector3(0.0f, 0.25f, 1.0f) * OBJECT_VELOCITY);
}
示例9: Init
void Vehicle::Init()
{
// This function is called only from the main program when initially creating the vehicle, not on scene load
ResourceCache* cache = GetSubsystem<ResourceCache>();
StaticModel* hullObject = node_->CreateComponent<StaticModel>();
hullBody_ = node_->CreateComponent<RigidBody>();
CollisionShape* hullShape = node_->CreateComponent<CollisionShape>();
node_->SetScale(Vector3(1.5f, 1.0f, 3.0f));
hullObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
hullObject->SetMaterial(cache->GetResource<Material>("Materials/Stone.xml"));
hullObject->SetCastShadows(true);
hullShape->SetBox(Vector3::ONE);
hullBody_->SetMass(4.0f);
hullBody_->SetLinearDamping(0.2f); // Some air resistance
hullBody_->SetAngularDamping(0.5f);
hullBody_->SetCollisionLayer(1);
InitWheel("FrontLeft", Vector3(-0.6f, -0.4f, 0.3f), frontLeft_, frontLeftID_);
InitWheel("FrontRight", Vector3(0.6f, -0.4f, 0.3f), frontRight_, frontRightID_);
InitWheel("RearLeft", Vector3(-0.6f, -0.4f, -0.3f), rearLeft_, rearLeftID_);
InitWheel("RearRight", Vector3(0.6f, -0.4f, -0.3f), rearRight_, rearRightID_);
GetWheelComponents();
}
示例10: CreateScene
void LuaIntegration::CreateScene()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
scene_ = new Scene(context_);
// Create the Octree component to the scene so that drawable objects can be rendered. Use default volume
// (-1000, -1000, -1000) to (1000, 1000, 1000)
scene_->CreateComponent<Octree>();
// Create a Zone component into a child scene node. The Zone controls ambient lighting and fog settings. Like the Octree,
// it also defines its volume with a bounding box, but can be rotated (so it does not need to be aligned to the world X, Y
// and Z axes.) Drawable objects "pick up" the zone they belong to and use it when rendering; several zones can exist
Node* zoneNode = scene_->CreateChild("Zone");
Zone* zone = zoneNode->CreateComponent<Zone>();
// Set same volume as the Octree, set a close bluish fog and some ambient light
zone->SetBoundingBox(BoundingBox(-1000.0f, 1000.0f));
zone->SetAmbientColor(Color(0.05f, 0.1f, 0.15f));
zone->SetFogColor(Color(0.1f, 0.2f, 0.3f));
zone->SetFogStart(10.0f);
zone->SetFogEnd(100.0f);
// Create randomly positioned and oriented box StaticModels in the scene
const unsigned NUM_OBJECTS = 2000;
for (unsigned i = 0; i < NUM_OBJECTS; ++i)
{
Node* boxNode = scene_->CreateChild("Box");
boxNode->SetPosition(Vector3(Random(200.0f) - 100.0f, Random(200.0f) - 100.0f, Random(200.0f) - 100.0f));
// Orient using random pitch, yaw and roll Euler angles
boxNode->SetRotation(Quaternion(Random(360.0f), Random(360.0f), Random(360.0f)));
StaticModel* boxObject = boxNode->CreateComponent<StaticModel>();
boxObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
boxObject->SetMaterial(cache->GetResource<Material>("Materials/Stone.xml"));
// Add our custom Rotator script object (using the LuaScriptInstance C++ component to instantiate / store it) which will
// rotate the scene node each frame, when the scene sends its update event
LuaScriptInstance* instance = boxNode->CreateComponent<LuaScriptInstance>();
instance->CreateObject("LuaScripts/Rotator.lua", "Rotator");
// Call the script object's "SetRotationSpeed" function.
WeakPtr<LuaFunction> function = instance->GetScriptObjectFunction("SetRotationSpeed");
if (function && function->BeginCall(instance))
{
function->PushUserType(Vector3(10.0f, 20.0f, 30.0f), "Vector3");
function->EndCall();
}
}
// Create the camera. Let the starting position be at the world origin. As the fog limits maximum visible distance, we can
// bring the far clip plane closer for more effective culling of distant objects
cameraNode_ = scene_->CreateChild("Camera");
Camera* camera = cameraNode_->CreateComponent<Camera>();
camera->SetFarClip(100.0f);
// Create a point light to the camera scene node
Light* light = cameraNode_->CreateComponent<Light>();
light->SetLightType(LIGHT_POINT);
light->SetRange(30.0f);
}
示例11: Scene
void Scene1::CreateScene() {
ResourceCache* cache = GetSubsystem<ResourceCache>();
scene_ = new Scene(context_);
scene_->CreateComponent<Octree>();
Node* planeNode = scene_->CreateChild("Plane");
planeNode->SetScale(Vector3(1000.0f, 1.0f, 1000.0f));
StaticModel* planeObject = planeNode->CreateComponent<StaticModel>();
planeObject->SetModel(cache->GetResource<Model>("Models/Plane.mdl"));
planeObject->SetMaterial(cache->GetResource<Material>("Materials/StoneTiled.xml"));
// Create a directional light to the world so that we can see something. The light scene node's orientation controls the
// light direction; we will use the SetDirection() function which calculates the orientation from a forward direction vector.
// The light will use default settings (white light, no shadows)
Node* lightNode = scene_->CreateChild("DirectionalLight");
lightNode->SetDirection(Vector3(0.6f, -1.0f, 0.8f)); // The direction vector does not need to be normalized
Light* light = lightNode->CreateComponent<Light>();
light->SetLightType(LIGHT_DIRECTIONAL);
player_spaceship = scene_->CreateChild("Player");
StaticModel *player_spaceship_model = player_spaceship->CreateComponent<StaticModel>();
player_spaceship_model->SetModel(cache->GetResource<Model>("Models/Spaceship.mdl"));
player_spaceship->SetPosition(Vector3(0.0f, 2.0f, 0.0f));
//player_spaceship->SetRotation(Quaternion(0.0f, 0.0f, 0.0f));
// Set an initial position for the camera scene node above the plane
cameraNode_ = scene_->CreateChild("Camera");
cameraNode_->CreateComponent<Camera>();
cameraNode_->SetPosition(Vector3(0.0f, 3.7f, -6.5f));
camera_sign = 1;
// Node* lightNode = cameraNode_->CreateChild("SpotLight");
// lightNode->SetDirection(Vector3(0.6f, -1.0f, 0.8f)); // The direction vector does not need to be normalized
// Light* light = lightNode->CreateComponent<Light>();
// light->SetLightType(LIGHT_DIRECTIONAL);
UI* ui = GetSubsystem<UI>();
// Creating an aim
Texture2D* aimTex = cache->GetResource<Texture2D>("Textures/Aim.png");
Sprite *aim = ui->GetRoot()->CreateChild<Sprite>();
aim->SetTexture(aimTex);
float textureWidth = aimTex->GetWidth();
float textureHeight = aimTex->GetHeight();
// Set logo sprite size
aim->SetSize(64, 64);
// Set logo sprite hot spot
aim->SetHotSpot(32, 32);
// Set logo sprite alignment
aim->SetAlignment(HA_CENTER, VA_CENTER);
// Add as a child of the root UI element
ui->GetRoot()->AddChild(aim);
aim->SetVisible(1);
return;
}
示例12: CreateScene
void AnimatingScene::CreateScene()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
scene_ = new Scene(context_);
// Create the Octree component to the scene so that drawable objects can be rendered. Use default volume
// (-1000, -1000, -1000) to (1000, 1000, 1000)
scene_->CreateComponent<Octree>();
// Create a Zone component into a child scene node. The Zone controls ambient lighting and fog settings. Like the Octree,
// it also defines its volume with a bounding box, but can be rotated (so it does not need to be aligned to the world X, Y
// and Z axes.) Drawable objects "pick up" the zone they belong to and use it when rendering; several zones can exist
Node* zoneNode = scene_->CreateChild("Zone");
Zone* zone = zoneNode->CreateComponent<Zone>();
// Set same volume as the Octree, set a close bluish fog and some ambient light
zone->SetBoundingBox(BoundingBox(-1000.0f, 1000.0f));
zone->SetAmbientColor(Color(0.05f, 0.1f, 0.15f));
zone->SetFogColor(Color(0.1f, 0.2f, 0.3f));
zone->SetFogStart(10.0f);
zone->SetFogEnd(100.0f);
// Create randomly positioned and oriented box StaticModels in the scene
const unsigned NUM_OBJECTS = 2000;
for (unsigned i = 0; i < NUM_OBJECTS; ++i)
{
Node* boxNode = scene_->CreateChild("Box");
boxNode->SetPosition(Vector3(Random(200.0f) - 100.0f, Random(200.0f) - 100.0f, Random(200.0f) - 100.0f));
// Orient using random pitch, yaw and roll Euler angles
boxNode->SetRotation(Quaternion(Random(360.0f), Random(360.0f), Random(360.0f)));
StaticModel* boxObject = boxNode->CreateComponent<StaticModel>();
boxObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
boxObject->SetMaterial(cache->GetResource<Material>("Materials/Stone.xml"));
// Add our custom Rotator component which will rotate the scene node each frame, when the scene sends its update event.
// The Rotator component derives from the base class LogicComponent, which has convenience functionality to subscribe
// to the various update events, and forward them to virtual functions that can be implemented by subclasses. This way
// writing logic/update components in C++ becomes similar to scripting.
// Now we simply set same rotation speed for all objects
Rotator* rotator = boxNode->CreateComponent<Rotator>();
rotator->SetRotationSpeed(Vector3(10.0f, 20.0f, 30.0f));
}
// Create the camera. Let the starting position be at the world origin. As the fog limits maximum visible distance, we can
// bring the far clip plane closer for more effective culling of distant objects
cameraNode_ = scene_->CreateChild("Camera");
Camera* camera = cameraNode_->CreateComponent<Camera>();
camera->SetFarClip(100.0f);
// Create a point light to the camera scene node
Light* light = cameraNode_->CreateComponent<Light>();
light->SetLightType(LIGHT_POINT);
light->SetRange(30.0f);
}
示例13: InitSelection
void Board::InitSelection()
{
selectedBall_ = nullptr;
selectionNode_ = node_->CreateChild("Selection");
selectionNode_->SetRotation(Quaternion(-90.f, 0.0f, 0.0f));
selectionNode_->SetEnabled(false);
StaticModel* staticModel = selectionNode_->CreateComponent<StaticModel>();
staticModel->SetModel(SelectionModel);
staticModel->SetMaterial(0, SelectionMaterial0);
staticModel->SetMaterial(1, SelectionMaterial1);
staticModel->SetCastShadows(true);
}
示例14: copyStaticModel
Urho3D::StaticModel *convertedModelToLutefisk(Urho3D::Context *ctx, Urho3D::Node *tgtnode, SEGS::SceneNode *node, int opt)
{
SEGS::Model *mdl = node->model;
Urho3D::StaticModel * converted=nullptr;
auto loc = s_coh_model_to_static_model.find(mdl);
if (loc != s_coh_model_to_static_model.end())
converted = loc->second.Get();
if (mdl && converted)
{
float per_node_draw_distance = node->lod_far + node->lod_far_fade;
StaticModel* boxObject = tgtnode->CreateComponent<StaticModel>();
copyStaticModel(converted, boxObject);
boxObject->SetDrawDistance(per_node_draw_distance);
return boxObject;
}
ModelModifiers *model_trick = mdl->trck_node;
if (model_trick)
{
if (opt != CONVERT_EDITOR_MARKERS && model_trick->isFlag(NoDraw))
{
//qDebug() << mdl->name << "Set as no draw";
return nullptr;
}
if (opt != CONVERT_EDITOR_MARKERS && model_trick->isFlag(EditorVisible))
{
//qDebug() << mdl->name << "Set as editor model";
return nullptr;
}
if (model_trick && model_trick->isFlag(CastShadow))
{
//qDebug() << "Not converting shadow models"<<mdl->name;
return nullptr;
}
if (model_trick && model_trick->isFlag(ParticleSys))
{
qDebug() << "Not converting particle sys:" << mdl->name;
return nullptr;
}
}
Urho3D::Model *modelptr = buildModel(ctx, mdl);
if(!modelptr)
return nullptr;
StaticModel* boxObject = tgtnode->CreateComponent<StaticModel>();
boxObject->SetDrawDistance(node->lod_far+node->lod_far_fade);
boxObject->SetModel(modelptr);
convertMaterial(ctx,mdl,boxObject);
s_coh_model_to_static_model[mdl] = boxObject;
return boxObject;
}
示例15: CreateScene
void Sample::CreateScene()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
scene_ = new Scene(context_);
sceneHierarchyWindow_->SetScene(scene_);
// Create octree, use default volume (-1000, -1000, -1000) to (1000, 1000, 1000)
// Also create a DebugRenderer component so that we can draw debug geometry
scene_->CreateComponent<Octree>();
scene_->CreateComponent<DebugRenderer>();
// Create a Zone component for ambient lighting & fog control
Node* zoneNode = scene_->CreateChild("Zone");
Zone* zone = zoneNode->CreateComponent<Zone>();
zone->SetBoundingBox(BoundingBox(-1000.0f, 1000.0f));
zone->SetAmbientColor(Color(0.5f, 0.5f, 0.5f));
zone->SetFogStart(100.0f);
zone->SetFogEnd(300.0f);
// Create a directional light without shadows
Node* lightNode = scene_->CreateChild("DirectionalLight");
lightNode->SetDirection(Vector3(0.5f, -1.0f, 0.5f));
Light* light = lightNode->CreateComponent<Light>();
light->SetLightType(LIGHT_DIRECTIONAL);
light->SetColor(Color(0.2f, 0.2f, 0.2f));
light->SetSpecularIntensity(1.0f);
// Create a "floor" consisting of several tiles
for (int y = -5; y <= 5; ++y)
{
for (int x = -5; x <= 5; ++x)
{
Node* floorNode = scene_->CreateChild("FloorTile");
floorNode->SetPosition(Vector3(x * 20.5f, -0.5f, y * 20.5f));
floorNode->SetScale(Vector3(20.0f, 1.0f, 20.f));
StaticModel* floorObject = floorNode->CreateComponent<StaticModel>();
floorObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
floorObject->SetMaterial(cache->GetResource<Material>("Materials/Stone.xml"));
}
}
// Create the camera. Limit far clip distance to match the fog
camNode_ = scene_->CreateChild("Camera");
Camera* camera = camNode_->CreateComponent<Camera>();
camera->SetFarClip(1300.0f);
// Set an initial position for the camera scene node above the plane
camNode_->SetPosition(Vector3(0.0f, 5.0f, 0.0f));
}