美文网首页
GamePlay3D使用-Scene、Nodes

GamePlay3D使用-Scene、Nodes

作者: Lucky胡 | 来源:发表于2020-03-19 15:16 被阅读0次

Scene

Scene是一个3D场景,用来放置模型、声音、动画和物理特性的物体。
Node是用来附着各种模型,用来做移动转换等。

简单场景,scene可以放两个Node。一个node可以放Camera,一个node放Model。
将相机作为Scene的active camera。通过transfer两个node来转换视角。

有下面几个组件可以依附到node上:
1、Model:放置模型
2、Camera:观察视角
3、Light:光照,影响model的渲染
4、PhysicsCollisionObject : 有物理特性的
5、ParticleEmitter:粒子
6、Terrain :地形图
7、AudioSource:放置音频
8、Form:用户交互界面

加载FBX文件

首先将fbx文件转换为Gameplay识别的文件:

gameplay-encoder duck.fbx

然后用Bundle加载二进制包:

void MeshGame::initialize()
{
    // Load the scene from our gameplay binary file
    Bundle* bundle = Bundle::create("res/duck.gpb");
    Scene* scene = bundle->loadScene();
    SAFE_RELEASE(bundle);
 
    // Get handles to the nodes of interest in the scene
    _modelNode = scene->findNode("duck");
    Node* _lightNode = scene->findNode("directionalLight1");
    Node* _cameraNode = scene->findNode("camera1");
 
    // More initialization ...
}

更新场景

为了优化性能,最好只更新那些确实发生了变化的组件:

void MyGame::update(float elapsedTime)
{
    // Rotate the model
    if (!_touched)
        _modelNode->rotateY(elapsedTime * MATH_DEG_TO_RAD(0.05f));
    }
}

常见的变化包括:
1、对物体施加了力或刺激
2、物体发生位移、旋转等
3、开始或结束动画
4、显示或隐藏

刷新场景

需要绘制所有的node,利用Scene::visit()方法来获取scene里的所有node

void MyGame::render(float elapsedTime)
{
    // Clear the buffers to black
    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
 
    // Visit all the nodes in the scene, drawing the models/mesh.
    _scene->visit(this, &MyGame::drawScene);
}
 
bool MyGame::drawScene(Node* node, void* cookie)
{
    // This method is called for each node in the scene.
    Model* model = node->getModel(); 
    if (model)
        model->draw();
    return true;
}

不绘制不可见model

有的model不可见,在视野外了,就不用绘制来节约性能。
可以用相机的视野来计算某model是否可见:

bool MeshGame::drawScene(Node* node, void* cookie)
{
    // Only draw visible nodes
    if (node->getBoundingSphere()->intersect(_camera->getFrustum())
    {
        Model* model = node->getModel();
        if (model)
            model->draw();
    }
    return true;
}

相关文章

网友评论

      本文标题:GamePlay3D使用-Scene、Nodes

      本文链接:https://www.haomeiwen.com/subject/tjklyhtx.html