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