void CubeObject::CreateBuffers() { float HelfSize = 0.5f; vector<VertexPositionColor> vertices = { { VertexPositionColor(Vec3(-HelfSize, HelfSize, -HelfSize), Col4(1.0f, 0.0f, 0.0f, 1.0f)) }, { VertexPositionColor(Vec3(HelfSize, HelfSize, -HelfSize), Col4(0.0f, 1.0f, 0.0f, 1.0f)) }, { VertexPositionColor(Vec3(-HelfSize, -HelfSize, -HelfSize), Col4(0.0f, 0.0f, 1.0f, 1.0f)) }, { VertexPositionColor(Vec3(HelfSize, -HelfSize, -HelfSize), Col4(1.0f, 0.0f, 1.0f, 1.0f)) }, { VertexPositionColor(Vec3(HelfSize, HelfSize, HelfSize), Col4(1.0f, 0.0f, 0.0f, 1.0f)) }, { VertexPositionColor(Vec3(-HelfSize, HelfSize, HelfSize), Col4(0.0f, 1.0f, 0.0f, 1.0f)) }, { VertexPositionColor(Vec3(HelfSize, -HelfSize, HelfSize), Col4(0.0f, 0.0f, 1.0f, 1.0f)) }, { VertexPositionColor(Vec3(-HelfSize, -HelfSize, HelfSize), Col4(1.0f, 0.0f, 1.0f, 1.0f)) } }; vector<uint16_t> indices = { 0, 1, 2, 1, 3, 2, 1, 4, 3, 4, 6, 3, 4, 5, 6, 5, 7, 6, 5, 0, 7, 0, 2, 7, 5, 4, 0, 4, 1, 0, 6, 7, 3, 7, 2, 3 }; //メッシュの作成(変更できない) m_CubeMesh = MeshResource::CreateMeshResource(vertices, indices, false); }
bool Grid::isConsistent() { bool result = true; if(Col1().isConsistent()){result=false;} if(Col2().isConsistent()){result=false;} if(Col3().isConsistent()){result=false;} if(Col4().isConsistent()){result=false;} if(Col5().isConsistent()){result=false;} if(Col6().isConsistent()){result=false;} if(Col7().isConsistent()){result=false;} if(Col8().isConsistent()){result=false;} if(Col9().isConsistent()){result=false;} if(Row1().isConsistent()){result=false;} if(Row2().isConsistent()){result=false;} if(Row3().isConsistent()){result=false;} if(Row4().isConsistent()){result=false;} if(Row5().isConsistent()){result=false;} if(Row6().isConsistent()){result=false;} if(Row7().isConsistent()){result=false;} if(Row8().isConsistent()){result=false;} if(Row9().isConsistent()){result=false;} if(GetNO().isConsistent()){result=false;} if(GetN().isConsistent()){result=false;} if(GetNE().isConsistent()){result=false;} if(GetO().isConsistent()){result=false;} if(GetC().isConsistent()){result=false;} if(GetE().isConsistent()){result=false;} if(GetSO().isConsistent()){result=false;} if(GetS().isConsistent()){result=false;} if(GetSE().isConsistent()){result=false;} return result; }
//プレートの作成 void GameStage::CreatePlate() { //メッシュ作成 CreatePlateMesh(); //ステージへのゲームオブジェクトの追加 auto Ptr = AddGameObject<GameObject>(); auto PtrTrans = Ptr->GetComponent<Transform>(); Quat Qt; Qt.rotationRollPitchYawFromVector(Vec3(XM_PIDIV2, 0, 0)); PtrTrans->SetScale(50.0f, 50.0f, 1.0f); PtrTrans->SetQuaternion(Qt); PtrTrans->SetPosition(0.0f, 0.0f, 0.0f); auto ColPtr = Ptr->AddComponent<CollisionRect>(); //描画コンポーネント auto DrawComp = Ptr->AddComponent<BcPNTnTStaticDraw>(); DrawComp->SetMeshResource(L"MY_PNTnT_SQUARE"); DrawComp->SetTextureResource(L"GRAY_TX"); DrawComp->SetNormalMapTextureResource(L"NORMAL3_TX"); //ラップモード DrawComp->SetSamplerState(SamplerState::LinearWrap); //スペキュラーなし DrawComp->DisableSpecular(); //フォグはきつめに DrawComp->SetFogEnabled(true); DrawComp->SetFogColor(Col4(0.3f, 0.3f,0.3f, 1.0f)); DrawComp->SetFogStart(-10.0f); DrawComp->SetFogEnd(-30.0f); //自分に影が映りこむようにする DrawComp->SetOwnShadowActive(true); }
void CubeObject::UpdateConstantBuffer() { //行列の定義 Mat4x4 World, View, Proj; //ワールド行列の決定 World.affineTransformation( m_Scale, //スケーリング Vec3(0, 0, 0), //回転の中心(重心) m_Qt, //回転角度 m_Pos //位置 ); //転置する World.transpose(); //ビュー行列の決定 View = XMMatrixLookAtLH(Vec3(0, 2.0, -5.0f), Vec3(0, 0, 0), Vec3(0, 1.0f, 0)); //転置する View.transpose(); //射影行列の決定 float w = static_cast<float>(App::GetApp()->GetGameWidth()); float h = static_cast<float>(App::GetApp()->GetGameHeight()); Proj = XMMatrixPerspectiveFovLH(XM_PIDIV4, w / h, 1.0f, 100.0f); //転置する Proj.transpose(); m_StaticConstantBuffer.World = World; m_StaticConstantBuffer.View = View; m_StaticConstantBuffer.Projection = Proj; m_StaticConstantBuffer.Emissive = Col4(0, 0, 0, 0); //更新 memcpy(m_pConstantBuffer, reinterpret_cast<void**>(&m_StaticConstantBuffer), sizeof(m_StaticConstantBuffer)); }
void SquareObject::OnCreate() { CreateBuffers(m_Scale.x, m_Scale.y); //行列の定義 Mat4x4 World; World.affineTransformation( m_Scale, Vec3(0, 0, 0), m_Qt, m_Pos ); auto TexPtr = App::GetApp()->GetResource<TextureResource>(m_TextureResName); auto NormTexPtr = App::GetApp()->GetResource<TextureResource>(m_NormalTextureResName); m_PtrObj = make_shared<BcDrawObject>(); m_PtrObj->m_MeshRes = m_SquareMesh; m_PtrObj->m_TextureRes = TexPtr; m_PtrObj->m_NormalTextureRes = NormTexPtr; m_PtrObj->m_WorldMatrix = World; m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera(); m_PtrObj->m_OwnShadowmapActive = true; m_PtrObj->m_SamplerState = SamplerState::LinearWrap; m_PtrObj->m_ShadowmapUse = false; m_PtrObj->m_FogEnabled = true; //フォグはきつめに m_PtrObj->m_FogColor = Col4(0.3f, 0.3f, 0.3f, 1.0f); m_PtrObj->m_FogStart = -10.0f; m_PtrObj->m_FogEnd = -30.0f; }
void SpriteBase::OnCreate() { float HelfSize = 0.5f; //頂点配列(縦横指定数ずつ表示) m_BackupVertices = { { VertexPositionColorTexture(Vec3(-HelfSize, HelfSize, 0),Col4(1.0f,1.0f,1.0f,1.0f), Vec2(0.0f, 0.0f)) }, { VertexPositionColorTexture(Vec3(HelfSize, HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2((float)m_XWrap, 0.0f)) }, { VertexPositionColorTexture(Vec3(-HelfSize, -HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2(0.0f, (float)m_YWrap)) }, { VertexPositionColorTexture(Vec3(HelfSize, -HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2((float)m_XWrap, (float)m_YWrap)) }, }; //頂点の初期修正(仮想関数呼びだし) AdjustVertex(); //インデックス配列 vector<uint16_t> indices = { 0, 1, 2, 1, 3, 2 }; //メッシュの作成(変更できる) m_SquareMesh = MeshResource::CreateMeshResource(m_BackupVertices, indices, true); }
void MultiSpark::InsertSpark(const Vec3& Pos) { auto ParticlePtr = InsertParticle(64); ParticlePtr->m_EmitterPos = Pos; ParticlePtr->SetTextureResource(L"SPARK_TX"); ParticlePtr->m_MaxTime = 0.5f; vector<ParticleSprite>& pSpriteVec = ParticlePtr->GetParticleSpriteVec(); for (auto& rParticleSprite : ParticlePtr->GetParticleSpriteVec()) { rParticleSprite.m_LocalPos.x = Util::RandZeroToOne() * 0.1f - 0.05f; rParticleSprite.m_LocalPos.y = Util::RandZeroToOne() * 0.1f; rParticleSprite.m_LocalPos.z = Util::RandZeroToOne() * 0.1f - 0.05f; rParticleSprite.m_LocalScale = Vec2(0.2, 0.2); //各パーティクルの移動速度を指定 rParticleSprite.m_Velocity = Vec3( rParticleSprite.m_LocalPos.x * 30.0f, rParticleSprite.m_LocalPos.y * 30.0f, rParticleSprite.m_LocalPos.z * 30.0f ); //色の指定 int r = (int)((Util::RandZeroToOne() * 0.5f + 0.3f) * 256.0f); int g = (int)((Util::RandZeroToOne() * 0.5f + 0.3f) * 256.0f); int b = (int)((Util::RandZeroToOne() * 0.5f + 0.3f) * 256.0f); r = r >> 7; g = g >> 7; b = b >> 7; rParticleSprite.m_Color = Col4((float)r, (float)g, (float)b, 1.0f); } }
void ntTriCell::calcNorm(){ ntVec3* t1 = new ntVec3(); t1->set(v2); t1->sub(v1); ntVec3* t2 = new ntVec3(); t2->set(v0); t2->sub(v1); t1->unitize(); t2->unitize(); norm = t1->cross(t2); normal = ntNormal(*cent,norm,.05); normal.colS = Col4(1, 0, 0, 1); normal.colE = Col4(1, 0, 0, .5); }
//-------------------------------------------------------------------------------------- /// シンプルな3D上の平面 //-------------------------------------------------------------------------------------- void SimpleSquare::CreateBuffers(float WrapX, float WrapY) { float HelfSize = 0.5f; m_BackupVertices = { { VertexPositionColorTexture(Vec3(-HelfSize, HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2(0.0f, 0.0f)) }, { VertexPositionColorTexture(Vec3(HelfSize, HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2(WrapX, 0.0f)) }, { VertexPositionColorTexture(Vec3(-HelfSize, -HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2(0.0f, WrapY)) }, { VertexPositionColorTexture(Vec3(HelfSize, -HelfSize, 0), Col4(1.0f,1.0f,1.0f,1.0f), Vec2(WrapX, WrapY)) }, }; vector<uint16_t> indices = { 0, 1, 2, 1, 3, 2, }; //メッシュの作成(変更できる) m_SquareMesh = MeshResource::CreateMeshResource(m_BackupVertices, indices, true); }
//初期化 void BcStaticChara::OnCreate() { //Rigidbodyの初期化 auto PtrGameStage = GetStage<GameStage>(); Rigidbody body; body.m_Owner = GetThis<GameObject>(); body.m_Mass = 1.0f; body.m_Scale = m_Scale; body.m_Quat = m_Qt; body.m_Pos = m_Pos; body.m_CollType = CollType::typeCAPSULE; body.m_IsFixed = true; // body.m_IsDrawActive = true; body.SetToBefore(); PtrGameStage->AddRigidbody(body); //メッシュとトランスフォームの差分の設定 m_MeshToTransformMatrix.affineTransformation( Vec3(1.0f, 1.0f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -1.0f, 0.0f) ); //行列の定義 Mat4x4 World; World.affineTransformation( m_Scale, Vec3(0, 0, 0), m_Qt, m_Pos ); //差分を計算 World = m_MeshToTransformMatrix * World; auto MeshPtr = App::GetApp()->GetResource<MeshResource>(L"MODEL_MESH"); //描画データの構築 m_PtrObj = make_shared<BcDrawObject>(); m_PtrObj->m_OwnShadowmapActive = m_OwnShadowActive; m_PtrObj->m_UsedModelColor = false; m_PtrObj->m_UsedModelTextre = true; m_PtrObj->m_ShadowmapUse = true; m_PtrObj->m_FogEnabled = true; //フォグは黄色っぽく m_PtrObj->m_FogColor = Col4(0.5f, 0.5f, 0.1f, 1.0f); m_PtrObj->m_FogStart = -10.0f; m_PtrObj->m_FogEnd = -30.0f; m_PtrObj->m_MeshRes = MeshPtr; m_PtrObj->m_WorldMatrix = World; m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera(); //シャドウマップ描画データの構築 m_PtrShadowmapObj = make_shared<ShadowmapObject>(); m_PtrShadowmapObj->m_MeshRes = MeshPtr; //描画データの行列をコピー m_PtrShadowmapObj->m_WorldMatrix = World; m_PtrShadowmapObj->m_Camera = GetStage<Stage>()->GetCamera(); }
void Scene::OnDraw() { //描画デバイスの取得 auto Dev = App::GetApp()->GetDeviceResources(); Dev->ClearDefaultViews(Col4(0, 0, 0, 1.0f)); //デフォルト描画の開始 Dev->StartDefaultDraw(); m_CubeObjectGroup->OnDraw(); //デフォルト描画の終了 Dev->EndDefaultDraw(); }
void RotateSprite::AdjustVertex() { //頂点色を変更する for (size_t i = 0; i < m_BackupVertices.size();i++) { switch (i) { case 0: m_BackupVertices[i].color = Col4(1.0f, 0.0f, 0.0f, 1.0f); break; case 1: m_BackupVertices[i].color = Col4(0.0f, 1.0f, 0.0f, 1.0f); break; case 2: m_BackupVertices[i].color = Col4(0.0f, 0.0f, 1.0f, 1.0f); break; case 3: m_BackupVertices[i].color = Col4(1.0f, 1.0f, 0, 1.0); break; } } }
//初期化 void BcBoxObject::OnCreate() { //Rigidbodyの初期化 auto PtrGameStage = GetStage<GameStage>(); Rigidbody body; body.m_Owner = GetThis<GameObject>(); body.m_Mass = 1.0f; body.m_Scale = m_Scale; body.m_Quat = m_Qt; body.m_Pos = m_Pos; body.m_CollType = CollType::typeOBB; body.m_IsFixed = true; // body.m_IsDrawActive = true; body.SetToBefore(); PtrGameStage->AddRigidbody(body); //行列の定義 Mat4x4 World; World.affineTransformation( body.m_Scale, Vec3(0, 0, 0), body.m_Quat, body.m_Pos ); auto TexPtr = App::GetApp()->GetResource<TextureResource>(m_TextureResName); auto NormTexPtr = App::GetApp()->GetResource<TextureResource>(m_NormalTextureResName); //メッシュの取得 auto MeshPtr = App::GetApp()->GetResource<MeshResource>(L"NORMAL_BOX"); //描画データの構築 m_PtrObj = make_shared<BcDrawObject>(); m_PtrObj->m_MeshRes = MeshPtr; m_PtrObj->m_TextureRes = TexPtr; m_PtrObj->m_NormalTextureRes = NormTexPtr; m_PtrObj->m_WorldMatrix = World; m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera(); m_PtrObj->m_OwnShadowmapActive = true; m_PtrObj->m_ShadowmapUse = true; m_PtrObj->m_FogEnabled = true; //フォグは黄色っぽく m_PtrObj->m_FogColor = Col4(0.5f, 0.5f, 0.1f, 1.0f); m_PtrObj->m_FogStart = -10.0f; m_PtrObj->m_FogEnd = -30.0f; //シャドウマップ描画データの構築 m_PtrShadowmapObj = make_shared<ShadowmapObject>(); m_PtrShadowmapObj->m_MeshRes = MeshPtr; //描画データの行列をコピー m_PtrShadowmapObj->m_WorldMatrix = World; m_PtrShadowmapObj->m_Camera = GetStage<Stage>()->GetCamera(); }
void BcSphereObject::OnCreate() { CreateBuffers(); //Rigidbodyの初期化 auto PtrGameStage = GetStage<GameStage>(); Rigidbody body; body.m_Owner = GetThis<GameObject>(); body.m_Mass = 1.0f; body.m_Scale = m_Scale; body.m_Quat = m_Qt; body.m_Pos = m_Pos; body.m_CollType = CollType::typeSPHERE; body.m_IsFixed = true; // body.m_IsDrawActive = true; body.SetToBefore(); PtrGameStage->AddRigidbody(body); //行列の定義 Mat4x4 World; World.affineTransformation( m_Scale, Vec3(0, 0, 0), m_Qt, m_Pos ); auto TexPtr = App::GetApp()->GetResource<TextureResource>(m_TextureResName); //描画データの構築 m_PtrObj = make_shared<BcDrawObject>(); m_PtrObj->m_MeshRes = m_SphereMesh; m_PtrObj->m_TextureRes = TexPtr; m_PtrObj->m_WorldMatrix = World; m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera(); m_PtrObj->m_OwnShadowmapActive = false; m_PtrObj->m_ShadowmapUse = true; m_PtrObj->m_FogEnabled = true; //フォグは青色っぽく m_PtrObj->m_FogColor = Col4(0.4f, 0.4f, 0.8f, 1.0f); m_PtrObj->m_FogStart = -10.0f; m_PtrObj->m_FogEnd = -30.0f; //シャドウマップ描画データの構築 m_PtrShadowmapObj = make_shared<ShadowmapObject>(); m_PtrShadowmapObj->m_MeshRes = m_SphereMesh; //描画データの行列をコピー m_PtrShadowmapObj->m_WorldMatrix = World; m_PtrShadowmapObj->m_Camera = GetStage<Stage>()->GetCamera(); }
void MultiFire::InsertFire(const Vec3& Pos) { auto ParticlePtr = InsertParticle(16); ParticlePtr->m_EmitterPos = Pos; ParticlePtr->SetTextureResource(L"FIRE_TX"); ParticlePtr->m_MaxTime = 0.5f; vector<ParticleSprite>& pSpriteVec = ParticlePtr->GetParticleSpriteVec(); for (auto& rParticleSprite : ParticlePtr->GetParticleSpriteVec()) { rParticleSprite.m_LocalPos.x = Util::RandZeroToOne() * 0.1f - 0.05f; rParticleSprite.m_LocalPos.y = Util::RandZeroToOne() * 0.1f; rParticleSprite.m_LocalPos.z = Util::RandZeroToOne() * 0.1f - 0.05f; //各パーティクルの移動速度を指定 rParticleSprite.m_Velocity = Vec3( rParticleSprite.m_LocalPos.x * 5.0f, rParticleSprite.m_LocalPos.y * 5.0f, rParticleSprite.m_LocalPos.z * 5.0f ); //色の指定 rParticleSprite.m_Color = Col4(1.0f, 1.0f, 1.0f, 1.0f); } }
void ntTruss::display_mode(D_mode m){ /////////////////////////////////////////////////////////////// ///////////////////////////////////////////// UPDATE COLOR MODE this->m = m; int n = nodes.size(); int e = elements.size(); int rMax = 0; int gMax = 0; int bMax = 0; std::vector <float> qM; std::vector <float> fM; qMax = 0; fMax = 0; //UPDATE HOST COPY IF VALUES HAVE BEEN if (isCurrent == false) { host_copy(); isCurrent = true; } /////////////////////////////////////////////////////////////// /////////////////////// DEFINE MAPPING BEHAVIOR OF DISPLAY MODE for (int i = 0; i < n; i++){ float u = abs(Q_h.at(i * DOF + 0)); float v = abs(Q_h.at(i * DOF + 1)); float w = abs(Q_h.at(i * DOF + 2)); float x = abs(F_h.at(i * DOF + 0)); float y = abs(F_h.at(i * DOF + 1)); float z = abs(F_h.at(i * DOF + 2)); ntVec3 dQ = ntVec3(u, v, w); ntVec3 dF = ntVec3(x, y, z); float q = dQ.mag(); float f = dF.mag(); qM.push_back(q); fM.push_back(f); if (qMax < q){ qMax = q; nMax = i + 1; ///REVISE TO INCLUDE NODES WITH EQUAL DISPLACEMENT } if (fMax < f){ fMax = f; } if (rMax < u){ rMax = u; } if (gMax < v){ gMax = v; } if (bMax < w){ bMax = w; } } /////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// UPDATE COLOR if (m == vW) { for (int i = 0; i < n; i++){ float r = .9; float g = .9; float b = .9; nodes.at(i)->col = Col4(r, g, b); } for (int i = 0; i < e; i++){ elements.at(i)->w = .5; } } if (m == vQ) { for (int i = 0; i < n; i++){ float q = qM.at(i); //float r = mapRange(0.3, 1, 0, qMax, q); //float g = mapRange(.35, .45, 0, qMax, q, false); //float b = mapRange( 0,.55, 0, qMax, q, false); float r = mapRange(0.3, 1, 0, qMax, q); float g = mapRange(0, .6, 0, qMax, q, false); float b = mapRange(0.1, .85, 0, qMax, q, false); nodes.at(i)->col = Col4(r, g, b); } for (int i = 0; i < e; i++){ elements.at(i)->w = .5; } } if (m == vF) { for (int i = 0; i < n; i++){ float q = fM.at(i); float r = mapRange( 0, 1, 0, qMax / 10000, q); float g = 0;//mapRange(0, .65, 0, qMax / 100000, q / 1000); float b = mapRange(0.75, .95, 0, qMax / 100000, q, false); if (r > .9){ g = 0;} if (b > .85){ g = 0; } nodes.at(i)->col = Col4(r, g, b); } for (int i = 0; i < e; i++){ elements.at(i)->w = .5; } } if (m == vS) { for (int i = 0; i<n; i++){ nodes.at(i)->col = ntCol4(1, 0, 0); } for (int i = 0; i < e; i++){ float s = abs(S_h[i]); float r = mapRange(0.1, 1, 0, sMax, s); float g = mapRange(0.1, 1, 0, sMax, s); float b = mapRange(0.1, 1, 0, sMax, s); float a = mapRange(1, 1, 0, sMax, s); //float r = mapRange(0.3, 1, 0, sMax, s); //float g = mapRange(.35, .45, 0, sMax, s, false); //float b = mapRange(0, .55, 0, sMax, s, false); float w = mapRange(1, 1.5, 0, sMax, s); elements.at(i)->colE = Col4(r, g, b, a); elements.at(i)->colS = Col4(r, g, b, a); elements.at(i)->w = w; } } }