Bladeren bron

fix problems rendering alpha models

Kolja Strohm 1 maand geleden
bovenliggende
commit
756959d2a8
1 gewijzigde bestanden met toevoegingen van 11 en 8 verwijderingen
  1. 11 8
      DX11GraphicsApi.cpp

+ 11 - 8
DX11GraphicsApi.cpp

@@ -887,14 +887,19 @@ void DirectX11::renderKamera(Cam3D* zKamera)
     int maxDist = 0;
     int minDist = 0x7FFFFFFF;
     Array<Model3D*> alphaModels;
-    w->render([this, &minDist, &maxDist, &alphaModels, &lc](Model3D* obj) {
+    Array<int> distances;
+    w->render([this, &minDist, &maxDist, &alphaModels, &lc, &distances](
+                  Model3D* obj) {
         float dist;
         if (isInFrustrum(obj->getPos(), obj->getRadius(), &dist))
         {
             if ((int)dist > maxDist) maxDist = (int)dist;
             if ((int)dist < minDist) minDist = (int)dist;
             if (obj->hasAlpha())
+            {
                 alphaModels.add(obj);
+                distances.add((int)dist);
+            }
             else
             {
                 pixelShader->fillConstBuffer((char*)lc, 2, sizeof(int) * 2);
@@ -909,15 +914,13 @@ void DirectX11::renderKamera(Cam3D* zKamera)
         int* index = new int[size];
         memset(index, 0, size * 4);
         Model3D** sorted = new Model3D*[size * alphaModels.getEntryCount()];
+        auto dist = distances.begin();
         for (auto obj : alphaModels)
         {
-            float dist;
-            dist = kamPos.distance(obj->getPos());
-            if (isInFrustrum(obj->getPos(), obj->getRadius(), &dist))
-            {
-                int pos = (int)dist - minDist;
-                sorted[pos * alphaModels.getEntryCount() + index[pos]++] = obj;
-            }
+            sorted[dist.val() * alphaModels.getEntryCount()
+                   + index[dist.val()]++]
+                = obj;
+            dist++;
         }
         for (int i = 0; i < size; i++)
         {