コード例 #1
0
ファイル: SceneTest.cpp プロジェクト: ACPLMaverick/MAVNET
unsigned int SceneTest::Initialize()
{
    ////////////////////////
    //////////// Ground Level

    m_groundLevel = 0.0f;

    ////////////////////////
    /////////// Objects

    glm::vec3 tPos, tRot, tScl, tPosMin, tPosMax;
    glm::vec4 tCol;


    SimObject* ground = new SimObject();
    ground->Initialize("Ground");

    tPos = (glm::vec3(0.0f, m_groundLevel - 0.1f, 0.0f));
    tRot = (glm::vec3(-3.14f / 2.0f, 0.0f, 0.0f));
    tScl = (glm::vec3(100.0f, 100.0f, 100.0f));
    tCol = (glm::vec4(0.8f, 0.8f, 0.9f, 1.0f));

    Transform* groundTransform = new Transform(ground);
    groundTransform->Initialize();
    groundTransform->SetPosition(&tPos);
    groundTransform->SetRotation(&tRot);
    groundTransform->SetScale(&tScl);
    ground->SetTransform(groundTransform);
    MeshGLRect* triangle = new MeshGLRect(ground, &tCol);
    triangle->Initialize();
    triangle->SetGloss(100.0f);
    triangle->SetSpecular(0.8f);
    triangle->SetTextureID(ResourceManager::GetInstance()->GetTextureWhite());
    ground->AddMesh(triangle);

    tPosMin = glm::vec3(-0.5f, -100000.0f, -0.5f);
    tPosMax = glm::vec3(0.5f, 0.001f, 0.5f);
    BoxAACollider* gCollider = PhysicsManager::GetInstance()->CreateBoxAACollider(ground, &tPosMin, &tPosMax);
    ground->AddCollider(gCollider);

    AddObject(ground);


    SimObject* testObj = new SimObject();
    testObj->Initialize("testObj");

    tPos = (glm::vec3(0.0f, 2.5f, 0.0f));
    tScl = (glm::vec3(1.0f, 1.0f, 1.0f));
    tCol = (glm::vec4(0.4f, 0.7f, 0.9f, 1.0f));

    Transform* testObjTransform = new Transform(testObj);
    testObjTransform->Initialize();
    testObjTransform->SetPosition(&tPos);
    testObjTransform->SetScale(&tScl);
    testObj->SetTransform(testObjTransform);

    MeshGLSphere* sph = new MeshGLSphere(testObj, 2.0f, 16, 16, &tCol);
    sph->Initialize();
    sph->SetGloss(20.0f);
    sph->SetSpecular(0.6f);
    sph->SetTextureID(ResourceManager::GetInstance()->GetTextureWhite());
    testObj->AddMesh(sph);


    tPosMin = (glm::vec3(0.0f, 0.0f, 0.0f));
    SphereCollider* tObjCollider = PhysicsManager::GetInstance()->CreateSphereCollider(testObj, &tPosMin, 2.0f);
    testObj->AddCollider(tObjCollider);



    AddObject(testObj);

    // and here goes box
    SimObject* testObjBox = new SimObject();
    testObjBox->Initialize("testObjBox");

    tPos = (glm::vec3(0.0f, 999.0f, 0.0f));
    tScl = (glm::vec3(1.0f, 1.0f, 1.0f));
    tCol = (glm::vec4(0.4f, 0.7f, 0.9f, 1.0f));

    Transform* testObjBoxTransform = new Transform(testObjBox);
    testObjBoxTransform->Initialize();
    testObjBoxTransform->SetPosition(&tPos);
    testObjBoxTransform->SetScale(&tScl);
    testObjBox->SetTransform(testObjBoxTransform);

    tCol = glm::vec4(0.2f, 0.2f, 0.8f, 1.0f);
    MeshGLBox* box = new MeshGLBox(testObjBox, 4.0f, 3.0f, 3.0f, &tCol);
    box->Initialize();
    box->SetGloss(100.0f);
    box->SetSpecular(0.5f);
    box->SetTextureID(ResourceManager::GetInstance()->GetTextureWhite());
    testObjBox->AddMesh(box);

    tPosMin = glm::vec3(-2.0f, -1.5f, -1.5f);
    tPosMax = glm::vec3(2.0f, 1.5f, 1.5f);
    BoxAACollider* tObjBoxCollider = PhysicsManager::GetInstance()->CreateBoxAACollider(testObjBox, &tPosMin, &tPosMax);
    testObjBox->AddCollider(tObjBoxCollider);

    AddObject(testObjBox);
    testObjBoxTransform->SetPosition(&tPos);
    testObjBox->SetVisible(false);
    testObjBox->SetEnabled(false);

    m_currentObjectID = 1;

    /*
    SimObject* colObj = new SimObject();
    colObj->Initialize("colObj");

    tPos = (glm::vec3(3.0f, 2.5f, -8.0f));
    tScl = (glm::vec3(1.0f, 1.0f, 1.0f));
    tCol = (glm::vec4(0.8f, 0.2f, 0.2f, 1.0f));
    tPosMin = (glm::vec3(-0.5f, -0.5f, -0.5f));
    tPosMax = (glm::vec3(0.5f, 0.5f, 0.5f));

    Transform* colObjTransform = new Transform(colObj);
    colObjTransform->Initialize();
    colObjTransform->SetPosition(&tPos);
    colObjTransform->SetScale(&tScl);
    colObj->SetTransform(colObjTransform);
    MeshGLBox* colBox = new MeshGLBox(colObj, 1.0f, 1.0f, 1.0f, &tCol);
    colBox->Initialize();
    colBox->SetGloss(60.0f);
    colBox->SetSpecular(1.0f);
    colBox->SetTextureID(ResourceManager::GetInstance()->GetTextureWhite());
    colObj->AddMesh(colBox);
    BoxAACollider* cObjCollider = PhysicsManager::GetInstance()->CreateBoxAACollider(colObj, &tPosMin, &tPosMax);
    colObj->AddCollider(cObjCollider);

    RotateMe* rm = new RotateMe(colObj);
    rm->Initialize();
    tRot = glm::vec3(0.0f, 0.003f, 0.0f);
    rm->SetRotation(&tRot);
    colObj->AddComponent(rm);

    AddObject(colObj);
    */

    SimObject* testCloth = new SimObject();
    testCloth->Initialize("testCloth");

    tPos = (glm::vec3(0.0f, 10.0f, 0.0f));
    tScl = (glm::vec3(1.0f, 1.0f, 1.0f));
    tCol = glm::vec4(1.0f, 0.5f, 0.7f, 1.0f);

    Transform* testClothTransform = new Transform(testCloth);
    testClothTransform->Initialize();
    testClothTransform->SetPosition(&tPos);
    testClothTransform->SetScale(&tScl);
    testClothTransform->Update();
    testCloth->SetTransform(testClothTransform);

    ClothSimulator* cSim = new ClothSimulator(testCloth);
    testCloth->AddComponent(cSim);
    cSim->Initialize(); // !!!!!!!!!!!!!!

    AddObject(testCloth);

    ////////////////////////
    /////////// Camera

    Camera* testCam = new Camera(nullptr, CSSET_WINDOW_FOV, CSSET_WINDOW_NEAR, CSSET_WINDOW_FAR);
    testCam->Initialize();

    tPos = glm::vec3(-8.0f, 15.0f, 15.0f) * 2.0f;
    testCam->SetPosition(&tPos);

    AddCamera(testCam);


    m_currentCameraID = 0;


    ////////////////////////
    /////////// Lights

    glm::vec3 aCol = (glm::vec3(0.1f, 0.05f, 0.1f));
    glm::vec3 ldCol = (glm::vec3(1.0f, 0.9f, 0.6f));
    glm::vec3 ldSpec = (glm::vec3(1.0f, 0.9f, 0.9f));
    glm::vec3 ldDir = (glm::vec3(-0.8f, -0.8f, -1.0f));
    LightAmbient* la = new LightAmbient(&aCol);
    SetAmbientLight(la);
    LightDirectional* dir1 = new LightDirectional(&ldCol, &ldSpec, &ldDir);
    AddDirectionalLight(dir1);

    ////////////////////////
    /////////// GUI

    string gr1 = "GroupText";
    string gr2 = "GroupBtns";
    string gr3 = "GroupBtnsSteer";
    string gr4 = "GroupSettings";

    string t1n = "FPStitle";
    string t1v = "FPS: ";
    string t2n = "DeltaTimetitle";
    string t2v = "Delta time [ms]: ";
    string t3n = "SimTimetitle";
    string t3v = "Simulation time [ms]: ";
    string t4n = "SimModeTitle";
    string t4v = "Simulation mode: ";
    string t5n = "DTitle";
    string t5v = "Vibrations: ";
    string tb1 = "BtnExit";
    string tb2 = "BtnPreferences";
    string tb3 = "BtnWireframe";
    string tb4 = "BtnArrowFw";
    string tb5 = "BtnArrowBw";
    string tb6 = "BtnArrowLeft";
    string tb7 = "BtnArrowRight";
    string tb8 = "BtnArrowUp";
    string tb9 = "BtnArrowDown";
    string tb10 = "BtnMovementModeArrows";
    string tb11 = "BtnMovementModeFinger";
    string tval01 = "FPSvalue";
    string tval02 = "DTvalue";
    string tval03 = "STvalue";
    string tval04 = "SKvalue";
    string tval05 = "Dvalue";
    string slid0 = "Sld";
    string sllab0 = "Test";
    string dummy = "Dummy";
    string tex = "textures/ExportedFont.tga";
    string tBtnEx = "textures/btn_exit.png";
    string tBtnExA = "textures/btn_exit_a.png";
    string tBtnWf = "textures/btn_wireframe.png";
    string tBtnWfA = "textures/btn_wireframe_a.png";
    string tBtnSt = "textures/btn_settings.png";
    string tBtnStA = "textures/btn_settings_a.png";
    string tBtnMva = "textures/btn_movButtons.png";
    string tBtnMvaA = "textures/btn_movButtons_a.png";
    string tBtnMvf = "textures/btn_movTouch.png";
    string tBtnMvfA = "textures/btn_movTouch_a.png";
    string tBtnArr = "textures/btn_arrow_up.png";
    string tBtnArrA = "textures/btn_arrow_up_a.png";
    string tBtnFArr = "textures/btn_arrow_forward.png";
    string tBtnFArrA = "textures/btn_arrow_forward_a.png";
    string tSlHead = "textures/slider_head.png";
    string tSlBar = "textures/slider_bar.png";
    string tBgSettings = "textures/bg_settings.png";
    glm::vec2 scl = glm::vec2(0.025f, 0.025f);

    GUIElement* geGroupText = new GUIElement(&gr1);
    geGroupText->Initialize();
    geGroupText->SetScaled(false);
    GUIElement* geGroupBtns = new GUIElement(&gr2);
    geGroupBtns->Initialize();
    geGroupBtns->SetScaled(false);
    GUIElement* geGroupBtnsMove = new GUIElement(&gr3);
    geGroupBtnsMove->Initialize();
    geGroupBtnsMove->SetScaled(false);
    GUISettingsScreen* geGroupSettings = new GUISettingsScreen(&gr4);
    geGroupSettings->Initialize();
    geGroupSettings->SetPosition(glm::vec2(0.0f, 0.0f));
    geGroupSettings->SetScale(glm::vec2(1.0f, 1.0f));
    geGroupSettings->SetScaled(false);
    geGroupSettings->SetBlockable(true);
    geGroupSettings->SetVisible(true);
    geGroupSettings->SetEnabled(true);

    geGroupBtns->SetVisible(false);
    geGroupBtns->SetEnabled(false);

    geGroupText->SetVisible(false);
    geGroupText->SetEnabled(false);

    GUIText* gt = new GUIText(&t1n, &t1v, ResourceManager::GetInstance()->GetTexture(&tex));
    gt->Initialize();
    gt->SetPosition(glm::vec2(0.2f, 0.85f));
    gt->SetScale(scl);
    //0.71
    GUIText* gt2 = new GUIText(&t2n, &t2v, ResourceManager::GetInstance()->GetTexture(&tex));
    gt2->Initialize();
    gt2->SetPosition(glm::vec2(-0.95f, 0.85f));
    gt2->SetScale(scl);

    GUIText* gt3 = new GUIText(&t3n, &t3v, ResourceManager::GetInstance()->GetTexture(&tex));
    gt3->Initialize();
    gt3->SetPosition(glm::vec2(-0.95f, 0.78f));
    gt3->SetScale(scl);

    GUIText* gt4 = new GUIText(&tval01, &dummy, ResourceManager::GetInstance()->GetTexture(&tex));
    gt4->Initialize();
    gt4->SetPosition(glm::vec2(0.38f, 0.85f));
    gt4->SetScale(scl);

    GUIText* gt5 = new GUIText(&tval02, &dummy, ResourceManager::GetInstance()->GetTexture(&tex));
    gt5->Initialize();
    gt5->SetPosition(glm::vec2(-0.16f, 0.85f));
    gt5->SetScale(scl);

    GUIText* gt6 = new GUIText(&tval03, &dummy, ResourceManager::GetInstance()->GetTexture(&tex));
    gt6->Initialize();
    gt6->SetPosition(glm::vec2(-0.02f, 0.78f));
    gt6->SetScale(scl);

    GUIText* gt7 = new GUIText(&t4n, &t4v, ResourceManager::GetInstance()->GetTexture(&tex));
    gt7->Initialize();
    gt7->SetPosition(glm::vec2(-0.95f, 0.71f));
    gt7->SetScale(scl);

    GUIText* gt8 = new GUIText(&tval04, &dummy, ResourceManager::GetInstance()->GetTexture(&tex));
    gt8->Initialize();
    gt8->SetPosition(glm::vec2(-0.22f, 0.71f));
    gt8->SetScale(scl);

    GUIText* gt9 = new GUIText(&t5n, &t5v, ResourceManager::GetInstance()->GetTexture(&tex));
    gt9->Initialize();
    gt9->SetPosition(glm::vec2(-0.95f, 0.64f));
    gt9->SetScale(scl);

    GUIText* gt10 = new GUIText(&tval05, &dummy, ResourceManager::GetInstance()->GetTexture(&tex));
    gt10->Initialize();
    gt10->SetPosition(glm::vec2(-0.22f, 0.64f));
    gt10->SetScale(scl);

    geGroupText->AddChild(gt);
    geGroupText->AddChild(gt2);
    geGroupText->AddChild(gt3);
    geGroupText->AddChild(gt4);
    geGroupText->AddChild(gt5);
    geGroupText->AddChild(gt6);
    geGroupText->AddChild(gt7);
    geGroupText->AddChild(gt8);
    geGroupText->AddChild(gt9);
    geGroupText->AddChild(gt10);

    GUIButton* gb1 = new GUIButton(&tb1);
    gb1->Initialize();
    gb1->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnEx), ResourceManager::GetInstance()->LoadTexture(&tBtnExA));
    gb1->SetPosition(glm::vec2(0.7f, 0.8f));
    gb1->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb2 = new GUIButton(&tb2);
    gb2->Initialize();
    gb2->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnSt), ResourceManager::GetInstance()->LoadTexture(&tBtnStA));
    gb2->SetPosition(glm::vec2(0.7f, -0.3f));
    gb2->SetScale(glm::vec2(0.2f, 0.2f));

    GUIButton* gb3 = new GUIButton(&tb3);
    gb3->Initialize();
    gb3->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnWf), ResourceManager::GetInstance()->LoadTexture(&tBtnWfA));
    gb3->SetPosition(glm::vec2(0.7f, -0.75f));
    gb3->SetScale(glm::vec2(0.2f, 0.2f));

    GUIButton* gb4 = new GUIButton(&tb4);
    gb4->Initialize();
    gb4->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnFArr), ResourceManager::GetInstance()->LoadTexture(&tBtnFArrA));
    gb4->SetPosition(glm::vec2(-0.4f, -0.3f));
    gb4->SetRotation(0.0f);
    gb4->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb5 = new GUIButton(&tb5);
    gb5->Initialize();
    gb5->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnFArr), ResourceManager::GetInstance()->LoadTexture(&tBtnFArrA));
    gb5->SetPosition(glm::vec2(-0.4f, -0.8f));
    gb5->SetRotation(M_PI * 0.5f);
    gb5->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb6 = new GUIButton(&tb6);
    gb6->Initialize();
    gb6->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnFArr), ResourceManager::GetInstance()->LoadTexture(&tBtnFArrA));
    gb6->SetPosition(glm::vec2(-0.6f, -0.55f));
    gb6->SetRotation(M_PI * 0.75f);
    gb6->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb7 = new GUIButton(&tb7);
    gb7->Initialize();
    gb7->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnFArr), ResourceManager::GetInstance()->LoadTexture(&tBtnFArrA));
    gb7->SetPosition(glm::vec2(-0.2f, -0.55f));
    gb7->SetRotation(M_PI * 0.25f);
    gb7->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb8 = new GUIButton(&tb8);
    gb8->Initialize();
    gb8->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnArr), ResourceManager::GetInstance()->LoadTexture(&tBtnArrA));
    gb8->SetPosition(glm::vec2(-0.8f, -0.3f));
    gb8->SetRotation(0.0f);
    gb8->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb9 = new GUIButton(&tb9);
    gb9->Initialize();
    gb9->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnArr), ResourceManager::GetInstance()->LoadTexture(&tBtnArrA));
    gb9->SetPosition(glm::vec2(-0.8f, -0.8f));
    gb9->SetRotation(M_PI * 0.5f);
    gb9->SetScale(glm::vec2(0.15f, 0.15f));

    GUIButton* gb10 = new GUIButton(&tb10);
    gb10->Initialize();
    gb10->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnMva), ResourceManager::GetInstance()->LoadTexture(&tBtnMvaA));
    gb10->SetPosition(glm::vec2(0.7f, 0.15f));
    gb10->SetScale(glm::vec2(0.2f, 0.2f));

    GUIButton* gb11 = new GUIButton(&tb11);
    gb11->Initialize();
    gb11->SetTextures(ResourceManager::GetInstance()->LoadTexture(&tBtnMvf), ResourceManager::GetInstance()->LoadTexture(&tBtnMvfA));
    gb11->SetPosition(glm::vec2(0.7f, 0.15f));
    gb11->SetScale(glm::vec2(0.2f, 0.2f));

    geGroupBtnsMove->AddChild(gb4);
    geGroupBtnsMove->AddChild(gb5);
    geGroupBtnsMove->AddChild(gb6);
    geGroupBtnsMove->AddChild(gb7);
    geGroupBtnsMove->AddChild(gb8);
    geGroupBtnsMove->AddChild(gb9);

    geGroupBtns->AddChild(gb1);
    geGroupBtns->AddChild(gb2);
    geGroupBtns->AddChild(gb3);
    geGroupBtns->AddChild(geGroupBtnsMove);
    geGroupBtns->AddChild(gb10);
    geGroupBtns->AddChild(gb11);

    AddGUIElement(geGroupText);
    AddGUIElement(geGroupBtns);
    AddGUIElement(geGroupSettings);

    ////////////////////////
    /////////// Controllers

    SimObject* controller = new SimObject();
    controller->Initialize("SimController");

    GUIController* sc = new GUIController(controller);
    sc->Initialize();
    controller->AddComponent(sc);

    AddObject(controller);

#ifdef _DEBUG
    printf("\SceneTest.Initialize has completed successfully.\n");
#endif

    return CS_ERR_NONE;
}
コード例 #2
0
ファイル: test_scene.cpp プロジェクト: Twiebs/venom
void VenomModuleRender(GameMemory* memory) {
  RenderState* rs = &memory->renderState;
  GameData* data = (GameData*)memory->userdata;
  EditorData* editorData = &memory->editor;
  EditorData* editor = editorData;

  const V3 sunDirection = Normalize(V3(1.0, 0.5, 0.0f));
  AddDirectionalLight(sunDirection, V3(1.0, 1.0, 1.0), &rs->drawList);

  auto sunModelID = GetModelID("Sun", GetAssetManifest());
  auto sunModel = GetModelAsset(sunModelID);
  AddStaticModelToDrawList(&rs->drawList, sunModel, sunDirection * 10);

  
  
  const F32 deltaTime = memory->deltaTime;
  EntityContainer* entityContainer = &data->entityContainer;
  
  auto engine = GetEngine();



  EntityBlock* block = entityContainer->firstAvaibleBlock;
  for (U64 i = 0; i < entityContainer->capacityPerBlock; i++) {
    if (block->flags[i] & EntityFlag_PRESENT) {
      Entity* entity = &block->entities[i];

      if(block->types[i] == EntityType_PointLight) {
        AddShadowCastingPointLight(entity->position, entity->pointLight.color, 
          entity->pointLight.radius, &rs->drawList);
      }

      ModelAsset *model = GetModelAsset(entity->modelID, &memory->assetManifest);
      if (model == nullptr) continue;
      bool is_entity_animated = model->jointCount > 0;

      if (block->flags[i] & EntityFlag_VISIBLE) {        
        if (editor->selectedEntities.ContainsValue(i)) {
          V3 rotation = QuaternionToEuler(entity->rotation);
          AddOutlinedModelToDrawList(&rs->drawList, model, entity->position, rotation); 
        } else if (is_entity_animated) {
          V3 rotation = QuaternionToEuler(entity->rotation);
          V3 position = entity->position;
          position.y += model->size.y * 0.5f;
          AddAnimatedModelToDrawList(&rs->drawList, model, &entity->animation_state, position, rotation);
        } else {
          V3 rotation = QuaternionToEuler(entity->rotation);
          V3 position = entity->position;
          position.y += model->size.y * 0.5f;
          AddStaticModelToDrawList(&rs->drawList, model, position, rotation); 
        }
      }
    }
  }

  Camera *camera = nullptr;
  camera = &data->camera;
#if 0
  if (editor->isEditorVisible) {
    //camera = &editor->editorCamera;
    ..draw_debug_camera(&data->camera);
  } else {