From a3c0dee1f2212ebaf1988949d5527b09a33522dc Mon Sep 17 00:00:00 2001 From: MarcEricMartel <74071476+MarcEricMartel@users.noreply.github.com> Date: Sat, 4 Dec 2021 09:55:43 -0500 Subject: [PATCH] Optimization de performance du renderer! --- SQCSim2021/engine.cpp | 6 ++-- SQCSim2021/engine.h | 2 +- SQCSim2021/media/chunks/16357_16343.chunk | 1 - SQCSim2021/media/chunks/16382_16360.chunk | Bin 32768 -> 0 bytes SQCSim2021/media/chunks/16382_16377.chunk | Bin 32768 -> 0 bytes SQCSim2021/media/chunks/16382_16382.chunk | Bin 32768 -> 0 bytes SQCSim2021/media/chunks/16382_16383.chunk | Bin 32768 -> 0 bytes SQCSim2021/media/chunks/16383_16382.chunk | Bin 32768 -> 0 bytes SQCSim2021/media/chunks/16383_16383.chunk | Bin 32768 -> 0 bytes SQCSim2021/world.cpp | 37 +++++++++++----------- 10 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 SQCSim2021/media/chunks/16357_16343.chunk delete mode 100644 SQCSim2021/media/chunks/16382_16360.chunk delete mode 100644 SQCSim2021/media/chunks/16382_16377.chunk delete mode 100644 SQCSim2021/media/chunks/16382_16382.chunk delete mode 100644 SQCSim2021/media/chunks/16382_16383.chunk delete mode 100644 SQCSim2021/media/chunks/16383_16382.chunk delete mode 100644 SQCSim2021/media/chunks/16383_16383.chunk diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index fc03441..431897a 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -35,7 +35,7 @@ void Engine::Init() { m_skybox.Init(0.00013f); // Objet de musique! - m_audio.ToggleMusicState(); + //m_audio.ToggleMusicState(); // Init Chunks m_world.GetChunks().Reset(nullptr); @@ -52,9 +52,9 @@ void Engine::LoadResource() { LoadTexture(m_textureCrosshair, TEXTURE_PATH "cross.bmp"); LoadTexture(m_textureFont, TEXTURE_PATH "font.bmp"); TextureAtlas::TextureIndex texDirtIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal3.png"); - TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "dirt.png"); + TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); - TextureAtlas::TextureIndex texMetalIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal.png"); + TextureAtlas::TextureIndex texMetalIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal1.png"); if (!m_textureAtlas.Generate(512, false)) { std::cout << " Unable to generate texture atlas ..." << std::endl; diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 1eeff0d..e1e4626 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -47,7 +47,7 @@ private: TextureAtlas m_textureAtlas = TextureAtlas(BTYPE_LAST); World m_world = World(); - Perlin m_perlin = Perlin(4,32.f,7.f,12345); + Perlin m_perlin = Perlin(8,45.f,7.f,12345); Texture m_textureSkybox; Texture m_textureFont; diff --git a/SQCSim2021/media/chunks/16357_16343.chunk b/SQCSim2021/media/chunks/16357_16343.chunk deleted file mode 100644 index 96cfa40..0000000 --- a/SQCSim2021/media/chunks/16357_16343.chunk +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/SQCSim2021/media/chunks/16382_16360.chunk b/SQCSim2021/media/chunks/16382_16360.chunk deleted file mode 100644 index 7f5c4748bb58c80c573f775fa35f3eddf50b1155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmZP`1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiTNLV$sR0mVm{d=zPBH03nl6LJr#3m8BE$%!B?vI+M9L>9<@sAcDBaAy5|068I(Y!kv|7Za+!nmXHKf)p$&AX%V zj}{;!j5`|tBP_zvygM5IXaO?9xTEnu!Xg~ayQA@s79b;xI~xBZEW**eI~xCJ0W!k4 zqwzn&A{@=Tqw$XxAR~-B8vi3K!qL1t8vkekGQzl{@jt>M9L>9<@sAcDBaAy5|068I z(Y!kv|7Za+!nmXHKf)p$&AX%Vj}{;!j5`|tBP_zvygM5IXaO?9xTEnu!Xg~ayQA@s z79b;xI~xBZEW**eI~xCJ0W!k4qwzn&A{@=TBR&4nf@73B8UmvsFd71*Aut*OqaiRF V0;3@?8UmvsFd71*AuzN<003XTO|Ad{ diff --git a/SQCSim2021/media/chunks/16382_16377.chunk b/SQCSim2021/media/chunks/16382_16377.chunk deleted file mode 100644 index a62d18d79cb0b5c84916525908086a796fab78e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmZP`1-L_iiHQj=$pirqK7Zs!I(fFrIFb-KmM&p0TMjcfgJ{td23C1C7$Y}fz*{Gw6 z!$;$vD#18p4H=F9Ascm6arkKbQzaOOtRbWEKV+khDh?lwf2suIkTqm9{)cSTQN`h- z@lTat9I}Rt#{ZCwI;uE)H2$d)j6>Ft(fA*-QAZVrkH$Y$f^ovfBjK=?vjXJ70d^G;45{yIE zkkR-bvQbABhmXcTRf2KUkkJqr4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R W7!85Z5Eu=C(GVC7fzc2k6aoNZA0sRP diff --git a/SQCSim2021/media/chunks/16382_16382.chunk b/SQCSim2021/media/chunks/16382_16382.chunk deleted file mode 100644 index 21dacccdb2e2ec2d7b2088278857dbda1e783619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmZP`1M{5T0f;;XA1(luC&-5>fT_peLj~aS7<`BTLLS0L@+wW3 z=(b?+(FB+Y@=+BqqiF#757{Hw_^2izs~%;KhQMeDjE2By2#kinXb6mkz-S1JhQMeD zjE2C72muBVK=LVw%YejZ0tq1VK>~RBObjUcnK1ZFX!00*6ys^Z0r_dvxdP zNBs{9g^`O#c=Bf$_5a9C`yii>#y=<&MlK$W|B)N_AfJ!MKPVJNE*_2lksJ3QpO3~r zC=^C69*zHz8}}fekH$YJ6hmOy0hQMeDjE2By2#kinXb6mkz-S1JhQMeDjO-9#L;|3YU<46Jn30K* z5r#p+j7%UEAQD6~F+t_PG(;XO237^(qw5EWA~2Hm5CaiXRA(`u07ga>?ug@zbpJDq z@c19`{vUBUe$>OGAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF S0;3@?8UmvsFd71+g#Z92DBzT@%nGn|9FFE*h`M=)Xy-&bN{IShkXVg_26g-jE2By2#kinXb6mk zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD ljE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb8|D1OSypAff;O diff --git a/SQCSim2021/media/chunks/16383_16383.chunk b/SQCSim2021/media/chunks/16383_16383.chunk deleted file mode 100644 index 578182415d92e10f9c231c1d628cb883c8a9266a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmZQZ0ZdFNTxN7WGnzaGA65Gh;4uwxz>Ma8f_!uZX!=LFqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8Un*N1Q?J2BO@ad5|@FAiIE9efDyz;5&+91@gedE0UUg|0*HPl zxE&z-!66NG1egsbAOc_}m>|T5SOHcFA;20SOfU)NqZ5pbs3PcmRN0}=L-Q^Jx_{C6 zL*K`!J{a{sYIvaY(8C8^eyH;a`HztNsQ-s{2oQ>2Lh?h~_Y4e#{6|QB)c->}1PH}1 zA^D;0`_c4ID1HgakH-Jd4go^(OGtib`+hY46N+C#@}u!Tv_pVU{1TEM+P)vn|AgX~ zko;);5A6^j6u*SzhqmuW^FN{ZB_ux@|3fAI<-S;+K&8X#5ZD5Fix4gye^|??>}Lq4*^vKN|l-I|K;DFCqD%?fcREPbhu~ z$&beW&<+7Y@k>a4X#0LN{}YN|Lh_^WKeR)DQ2Y{-AKJbj&HsermyrBu{15FAAQZoZ zi#3-{^1_KqyEPq0;BPd zKYWI}>}dQC_ZY_SztQ-|A3nofb~OHndko|E-)Q{f51-*KI~xDPJ%;i7Z#4e#htF`A z9gY9t9>e(kHyZ!=!)Lh5j>i9Rk74}&8;yVb;WON2N8^9E$1r~XjmAIz@EPv1qwzo7 YV;H~xM&loU_zZX1(fA+kF^u1T0Q>+VvH$=8 diff --git a/SQCSim2021/world.cpp b/SQCSim2021/world.cpp index 7dd8012..eadf6c8 100644 --- a/SQCSim2021/world.cpp +++ b/SQCSim2021/world.cpp @@ -148,8 +148,8 @@ bool World::GenerateChunk(int chx, int chy, Perlin& perlin) { float xnoiz, ynoiz; xnoiz = (double)(x + (chx / CHUNK_SIZE_X + m_center[0]) * CHUNK_SIZE_X) / (double)INT16_MAX; ynoiz = (double)(z + (chy / CHUNK_SIZE_Z + m_center[1]) * CHUNK_SIZE_Z) / (double)INT16_MAX; - float height = (perlin.Get(xnoiz, ynoiz)) * 10.f; - for (int y = 0; y <= (int)height; ++y) + float height = (perlin.Get(xnoiz, ynoiz)) * 20.f + 5.f; + for (int y = 0; y <= (int)height % CHUNK_SIZE_Y; ++y) chunk->SetBlock(x, y, z, BTYPE_METAL, this); } @@ -158,7 +158,7 @@ bool World::GenerateChunk(int chx, int chy, Perlin& perlin) { float xnoiz, ynoiz; xnoiz = (double)(x + (chx / CHUNK_SIZE_X + m_center[0]) * CHUNK_SIZE_X) / (double)INT16_MAX; ynoiz = (double)(z + (chy / CHUNK_SIZE_Z + m_center[1]) * CHUNK_SIZE_Z) / (double)INT16_MAX; - float height = (perlin.Get(xnoiz, ynoiz) + 16.f); + float height = perlin.Get(xnoiz, ynoiz) * 5.f + 16.f; for (int y = 0; y <= (int)height % CHUNK_SIZE_Y; ++y) { if (chunk->GetBlock(x, y, z) == BTYPE_AIR) chunk->SetBlock(x, y, z, BTYPE_GRASS, this); @@ -272,14 +272,14 @@ void World::RenderWorld(int& rendercount, int& badhitcount, Player& player, Tran direct.Normalize(); pos.y = 1; - static Vector3i renderManifest[VIEW_DISTANCE * 4]; + static Vector3f renderManifest[VIEW_DISTANCE * 4]; for (int dist = VIEW_DISTANCE; dist >= 0; dist -= CHUNK_SIZE_X) { // Configuration du radar. float sinus, cosinus; int echantillons; - if (dist > VIEW_DISTANCE * .375f) { + if (dist > VIEW_DISTANCE * .625f) { sinus = .01745240643; // sin(1 degré) cosinus = .99984769515; // cos(1 degré) echantillons = 90; @@ -289,7 +289,7 @@ void World::RenderWorld(int& rendercount, int& badhitcount, Player& player, Tran cosinus = .99965732497; echantillons = 60; } - else if (dist > VIEW_DISTANCE * .625f) { + else if (dist > VIEW_DISTANCE * .375f) { sinus = .0348994967; cosinus = .99939082701; echantillons = 45; @@ -313,7 +313,7 @@ void World::RenderWorld(int& rendercount, int& badhitcount, Player& player, Tran angle.Normalize(); cursor = pos - direct * CHUNK_SIZE_X * 2 + angle * dist; - if (cursor.y >= 128.f || cursor.y >= 0.f) cursor.y = 1; + if (cursor.y >= 128.f || cursor.y >= 0.f) cursor.y = CHUNK_SIZE_Y / 2.f; bool valide = true; @@ -321,24 +321,25 @@ void World::RenderWorld(int& rendercount, int& badhitcount, Player& player, Tran int chx, chy; ChunkAt(cursor)->GetPosition(chx, chy); for (int index = 0; index < rendercount; ++index) // Permet de vérifier seulement contre celles ajoutées dans la frame, et ne pas avoir à refaire l'array à chaque frame. - if (renderManifest[index] == Vector3i(chx, 0, chy)) { + if (renderManifest[index].x == chx && renderManifest[index].z == chy) { valide = false; ++badhitcount; } - if (valide) { - world.ApplyTranslation((chx - m_center[0]) * CHUNK_SIZE_X, 0, (chy - m_center[1]) * CHUNK_SIZE_Z); - world.Use(); - float dist = (pos - cursor).Length(); - float blend = ((float)VIEW_DISTANCE - dist * 2.f + 128.f) / (float)VIEW_DISTANCE; - glBlendColor(0.f, 0.f, 0.f, blend); - ChunkAt(cursor)->Render(); - world.ApplyTranslation(-(chx - m_center[0]) * CHUNK_SIZE_X, 0, -(chy - m_center[1]) * CHUNK_SIZE_Z); - renderManifest[++rendercount] = Vector3i(chx, 0, chy); - } + float ray = (pos - cursor).Length(); + if (valide) renderManifest[rendercount++] = Vector3f(chx, (VIEW_DISTANCE - ray * 2 + 128) / (float)VIEW_DISTANCE, chy); } } } + for (int index = 0; index < rendercount; ++index) { + int chx = (renderManifest[index].x - m_center[0]) * CHUNK_SIZE_X, chy = (renderManifest[index].z - m_center[1]) * CHUNK_SIZE_Z; + + world.ApplyTranslation(chx, 0, chy); + world.Use(); + glBlendColor(0.f, 0.f, 0.f, renderManifest[index].y); + ChunkAt(chx, 1, chy)->Render(); + world.ApplyTranslation(-chx, 0, -chy); + } shader.Disable(); };