mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-12-12 03:02:30 +00:00
feat(world): make test routines to render CM2Scene in CWorldScene
This commit is contained in:
parent
b1694c2897
commit
0e4ef3aa29
3 changed files with 53 additions and 5 deletions
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <bc/Memory.hpp>
|
#include <bc/Memory.hpp>
|
||||||
#include <tempest/Matrix.hpp>
|
#include <tempest/Matrix.hpp>
|
||||||
|
#include <common/Time.hpp>
|
||||||
|
|
||||||
|
|
||||||
CGWorldFrame* CGWorldFrame::s_currentWorldFrame = nullptr;
|
CGWorldFrame* CGWorldFrame::s_currentWorldFrame = nullptr;
|
||||||
|
|
@ -166,7 +167,7 @@ void CGWorldFrame::OnWorldRender() {
|
||||||
GxRsSet(GxRs_Multisample, 1);
|
GxRsSet(GxRs_Multisample, 1);
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
CImVector clearColor = { 0, 0, 0, 0xFF };
|
CImVector clearColor = { 0x80, 0x80, 0x80, 0xFF };
|
||||||
GxSceneClear(3, clearColor);
|
GxSceneClear(3, clearColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -187,7 +188,11 @@ void CGWorldFrame::OnWorldRender() {
|
||||||
|
|
||||||
CShaderEffect::UpdateProjMatrix();
|
CShaderEffect::UpdateProjMatrix();
|
||||||
|
|
||||||
CWorld::Render(C3Vector(), 0.0f);
|
static auto s_time = 0;
|
||||||
|
|
||||||
|
float elapsed = static_cast<float>(OsGetAsyncTimeMs() - s_time) / 1000.0f;
|
||||||
|
s_time = OsGetAsyncTimeMs();
|
||||||
|
CWorld::Render(C3Vector(), elapsed);
|
||||||
|
|
||||||
if (CWorldScene::s_m2Scene) {
|
if (CWorldScene::s_m2Scene) {
|
||||||
CWorldScene::s_m2Scene->Draw(M2PASS_0);
|
CWorldScene::s_m2Scene->Draw(M2PASS_0);
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,39 @@
|
||||||
|
|
||||||
|
|
||||||
CM2Scene* CWorldScene::s_m2Scene;
|
CM2Scene* CWorldScene::s_m2Scene;
|
||||||
|
HTEXTURE CWorldScene::s_defaultTexture;
|
||||||
|
HTEXTURE CWorldScene::s_defaultBlendTexture;
|
||||||
|
|
||||||
|
CM2Model* g_models[10] = {};
|
||||||
|
|
||||||
|
void CWorldSceneLightingCallback(CM2Model* model, CM2Lighting* lighting, void* userArg) {
|
||||||
|
lighting->AddAmbient({ 1.0f, 1.0f, 1.0f });
|
||||||
|
lighting->AddDiffuse({ 1.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 0.0f });
|
||||||
|
lighting->AddSpecular({ 0.0f, 0.0f, 0.0f });
|
||||||
|
}
|
||||||
|
|
||||||
void CWorldScene::Initialize() {
|
void CWorldScene::Initialize() {
|
||||||
// TODO
|
// TODO
|
||||||
CWorldScene::s_m2Scene = M2CreateScene();
|
CWorldScene::s_m2Scene = M2CreateScene();
|
||||||
auto model = CWorldScene::s_m2Scene->CreateModel("Spells\\ErrorCube.mdx", 0);
|
g_models[0] = CWorldScene::s_m2Scene->CreateModel(R"(World\LORDAERON\Arathi\PassiveDoodads\Trees\ArathiStump01.m2)", 0);
|
||||||
model->SetAnimating(1);
|
g_models[0]->SetWorldTransform(C3Vector(1.0f, 0.0f, 0.0f), 0.0f, 0.1f);
|
||||||
model->SetVisible(1);
|
|
||||||
|
g_models[1] = CWorldScene::s_m2Scene->CreateModel(R"(World\NoDXT\Detail\ApkBus01.m2)", 0);
|
||||||
|
g_models[1]->SetWorldTransform(C3Vector(1.5f), 0.0f, 1.0f);
|
||||||
|
|
||||||
|
g_models[2] = CWorldScene::s_m2Scene->CreateModel(R"(Creature\BloodElfGuard\BloodElfMale_Guard.m2)", 0);
|
||||||
|
g_models[2]->SetWorldTransform(C3Vector(0.0f), 0.0f, 1.0f);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < 10; ++i) {
|
||||||
|
if (!g_models[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g_models[i]->SetBoneSequence(0xFFFFFFFF, 0, 0xFFFFFFFF, 0, 1.0f, 1, 1);
|
||||||
|
g_models[i]->SetLightingCallback(&CWorldSceneLightingCallback, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
CWorldScene::s_defaultTexture = TextureCreateSolid({ 0x80, 0x80, 0x80, 0xFF });
|
||||||
|
CWorldScene::s_defaultBlendTexture = TextureCreateSolid({ 0, 0, 0, 0xFF });
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWorldScene::Render(const C3Vector& cameraPos, float time) {
|
void CWorldScene::Render(const C3Vector& cameraPos, float time) {
|
||||||
|
|
@ -37,12 +62,25 @@ void CWorldScene::Render(const C3Vector& cameraPos, float time) {
|
||||||
|
|
||||||
|
|
||||||
if (CWorldScene::s_m2Scene) {
|
if (CWorldScene::s_m2Scene) {
|
||||||
|
for (size_t i = 0; i < 10; ++i) {
|
||||||
|
if (!g_models[i])
|
||||||
|
continue;
|
||||||
|
g_models[i]->SetAnimating(1);
|
||||||
|
g_models[i]->SetVisible(1);
|
||||||
|
}
|
||||||
|
|
||||||
CWorldScene::s_m2Scene->m_flags |= 1u;
|
CWorldScene::s_m2Scene->m_flags |= 1u;
|
||||||
CWorldScene::s_m2Scene->AdvanceTime(static_cast<uint32_t>(time * 1000.0f));
|
CWorldScene::s_m2Scene->AdvanceTime(static_cast<uint32_t>(time * 1000.0f));
|
||||||
CWorldScene::s_m2Scene->Animate(cameraPos);
|
CWorldScene::s_m2Scene->Animate(cameraPos);
|
||||||
CWorldScene::s_m2Scene->m_flags &= ~1u;
|
CWorldScene::s_m2Scene->m_flags &= ~1u;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sub_6FDA20();
|
||||||
|
// sub_7BB570();
|
||||||
|
|
||||||
|
CShaderEffect::UpdateProjMatrix();
|
||||||
|
// CWorldScene::RenderSetFog();
|
||||||
|
|
||||||
DayNight::Update();
|
DayNight::Update();
|
||||||
DayNight::RenderSky();
|
DayNight::RenderSky();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,16 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <tempest/Vector.hpp>
|
#include <tempest/Vector.hpp>
|
||||||
|
|
||||||
|
#include "gx/Texture.hpp"
|
||||||
|
|
||||||
class CM2Scene;
|
class CM2Scene;
|
||||||
|
|
||||||
class CWorldScene {
|
class CWorldScene {
|
||||||
public:
|
public:
|
||||||
static CM2Scene* s_m2Scene;
|
static CM2Scene* s_m2Scene;
|
||||||
|
static HTEXTURE s_defaultTexture;
|
||||||
|
static HTEXTURE s_defaultBlendTexture;
|
||||||
|
|
||||||
|
|
||||||
static void Initialize();
|
static void Initialize();
|
||||||
static void Render(const C3Vector& cameraPos, float time);
|
static void Render(const C3Vector& cameraPos, float time);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue