Затемнение небосвода.

Статус
В этой теме нельзя размещать новые ответы.

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#1
Приветствую. У меня случилась беда с затемнением неба в ночное время суток. Подскажите куда смотреть или где взять пример? Если нужен код, то пишите, я скину.
А вот и проблема:
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#2
По идее, какой бы ты цвет неба не задал, его затемнение всё равно просчитывается где-то в рендер ентити, что ли... Может, у тебя туман светится? Настрой его цвет в зависимости от времени суток.

А вообще, красиво )
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#3
Копался в WorldProvider`e нашел отсылку на World, а там есть кастомизация неба. Ну вот и она. Тут видимо действительно установлено в зависимости от времени суток, но как установить свой цвет?
Код:
@SideOnly(Side.CLIENT)
    public Vec3 getSkyColorBody(Entity par1Entity, float par2)
    {
        float f1 = this.getCelestialAngle(par2);
        float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;

        if (f2 < 0.0F)
        {
            f2 = 0.0F;
        }

        if (f2 > 1.0F)
        {
            f2 = 1.0F;
        }
        
        int i = MathHelper.floor_double(par1Entity.posX);
        int j = MathHelper.floor_double(par1Entity.posZ);
        
        int multiplier = ForgeHooksClient.getSkyBlendColour(this, i, j);

        float f4 = (float)(multiplier >> 16 & 255) / 255.0F;
        float f5 = (float)(multiplier >> 8 & 255) / 255.0F;
        float f6 = (float)(multiplier & 255) / 255.0F;
        f4 *= f2;
        f5 *= f2;
        f6 *= f2;
        float f7 = this.getRainStrength(par2);
        float f8;
        float f9;

        if (f7 > 0.0F)
        {
            f8 = (f4 * 0.3F + f5 * 0.59F + f6 * 0.11F) * 0.6F;
            f9 = 1.0F - f7 * 0.75F;
            f4 = f4 * f9 + f8 * (1.0F - f9);
            f5 = f5 * f9 + f8 * (1.0F - f9);
            f6 = f6 * f9 + f8 * (1.0F - f9);
        }

        f8 = this.getWeightedThunderStrength(par2);

        if (f8 > 0.0F)
        {
            f9 = (f4 * 0.3F + f5 * 0.59F + f6 * 0.11F) * 0.2F;
            float f10 = 1.0F - f8 * 0.75F;
            f4 = f4 * f10 + f9 * (1.0F - f10);
            f5 = f5 * f10 + f9 * (1.0F - f10);
            f6 = f6 * f10 + f9 * (1.0F - f10);
        }

        if (this.lastLightningBolt > 0)
        {
            f9 = (float)this.lastLightningBolt - par2;

            if (f9 > 1.0F)
            {
                f9 = 1.0F;
            }

            f9 *= 0.45F;
            f4 = f4 * (1.0F - f9) + 0.8F * f9;
            f5 = f5 * (1.0F - f9) + 0.8F * f9;
            f6 = f6 * (1.0F - f9) + 1.0F * f9;
        }

        return this.getWorldVec3Pool().getVecFromPool((double)f4, (double)f5, (double)f6);
    }
[merge_posts_bbcode]Добавлено: 14.07.2016 09:18:38[/merge_posts_bbcode]

В 1.7.10 есть метод getSunBrightness, может ли он за это отвечать?
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#4
В твоём WorldProvider-е метод getSkyColor(), вроде бы... Там и указывай.
Отсюда цвет идёт дальше в getSkyBlendColour() и в указанный тобой метод.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#5
Нуууу, вот мой getSkyColor. И че, мне переписывать его?
Код:
@Override
    public Vec3 getSkyColor(Entity cameraEntity, float partialTicks) {
        int i = 0xFFBE44;
        float r = (i >> 16 & 0xFF) / 255.0F;
        float g = (i >> 8 & 0xFF) / 255.0F;
        float b = (i & 0xFF) / 255.0F;
        return this.worldObj.getWorldVec3Pool().getVecFromPool(r, g, b);
    }
[merge_posts_bbcode]Добавлено: 14.07.2016 12:45:35[/merge_posts_bbcode]

Ковырялся в других модах, нашел такой метод
Код:
@SideOnly(Side.CLIENT)
   public Vec3 getFogColor(float par1, float par2) {
      int i = 10518688;
      float f2 = MathHelper.cos(par1 * 3.141593F * 2.0F) * 2.0F + 0.5F;
      if(f2 < 0.0F) {
         f2 = 0.0F;
      }

      if(f2 > 1.0F) {
         f2 = 1.0F;
      }

      float f3 = (float)(i >> 16 & 255) / 255.0F;
      float f4 = (float)(i >> 8 & 255) / 255.0F;
      float f5 = (float)(i & 255) / 255.0F;
      f3 *= f2 * 0.0F + 0.15F;
      f4 *= f2 * 0.0F + 0.15F;
      f5 *= f2 * 0.0F + 0.15F;
      return super.worldObj.getWorldVec3Pool().getVecFromPool((double)f3, (double)f4, (double)f5);
   }
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#6
В цвете неба укажи желаемый цвет и всё.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#7
Liahim написал(а):
В цвете неба укажи желаемый цвет и всё.
Это будет постоянный цвет, а мне нужно чтобы ночью небо было темное.
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#8
За тебя это сделает getSkyColorBody()...
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#9
Попробовал вот такую фигню написать
Код:
@Override
    public Vec3 getSkyColor(Entity cameraEntity, float partialTicks) {
        float f1 = this.getCelestialAngle(partialTicks);
        float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;
        int k = MathHelper.floor_double(cameraEntity.posX);
        int j = MathHelper.floor_double(cameraEntity.posZ);
        int multiplier = ForgeHooksClient.getSkyBlendColour(this.worldObj, k, j);
        
        float f4 = (float)(multiplier >> 16 & 255) / 255.0F;
        float f5 = (float)(multiplier >> 8 & 255) / 255.0F;
        float f6 = (float)(multiplier & 255) / 255.0F;
        f4 *= f2;
        f5 *= f2;
        f6 *= f2;
        
        int i = 0xFFBE44;//это цвет
        float r = (i >> 16 & 0xFF) / 255.0F;
        float g = (i >> 8 & 0xFF) / 255.0F;
        float b = (i & 0xFF) / 255.0F;
        return this.worldObj.getWorldVec3Pool().getVecFromPool(r, g, b);
    }
Не помогло. Можно ли тут как-нибудь подправить, чтобы работало?
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#10
Бленд колор берёт цвет из цвета неба.
Ты его пихаешь в сам цвет. У тебя там цикла, часом, не подучилось?
Бленд пытается узнать цвет неба, а его опять переадресуют самого на себя.

Мне кажется, что у тебя туман окрашивает твоё небо. Выруби его и посмотри на результат.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#11
Liahim написал(а):
Мне кажется, что у тебя туман окрашивает твоё небо. Выруби его и посмотри на результат.
В смысле в настройках? Я там не видел такой функции...
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#12
Ну, ты же как-то настроил его плотность? Судя по картинке...
Вот уменьши её и посмотри на небо.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#13
Liahim написал(а):
Ну, ты же как-то настроил его плотность? Судя по картинке...
Вот уменьши её и посмотри на небо.
Это зависит от прогрузки чанков. Дальность прорисовки
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#14
И какая она у тебя сейчас?
Может, стоит её увеличить? С дальности менее 4-х чанков небо вообще не рисуется и всё покрывается туманом.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#15
Aaa, блин. Как мне его лучше переписать?Все время ошибки выскакивают
Код:
@Override
    public Vec3 getSkyColor(Entity cameraEntity, float partialTicks) {
        float f1 = this.getCelestialAngle(partialTicks);
        float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;
        int k = MathHelper.floor_double(cameraEntity.posX);
        int j = MathHelper.floor_double(cameraEntity.posZ);
        int multiplier = ForgeHooksClient.getSkyBlendColour(this.worldObj, k, j);
        
        float f4 = (float)(multiplier >> 16 & 255) / 255.0F;
        float f5 = (float)(multiplier >> 8 & 255) / 255.0F;
        float f6 = (float)(multiplier & 255) / 255.0F;
        f4 *= f2;
        f5 *= f2;
        f6 *= f2;
        
        int i = 0xFFBE44;//это цвет
        float r = (i >> 16 & 0xFF) / 255.0F;
        float g = (i >> 8 & 0xFF) / 255.0F;
        float b = (i & 0xFF) / 255.0F;
        return this.worldObj.getWorldVec3Pool().getVecFromPool(r, g, b);
    }
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#16
Удали его нафик и увеличь дальность... И будет тебе щастье.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#17
Не работает. Могу провайдер скинуть
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#18
Хз, почему не фурычит... Что-то с форджем, видимо )))
Попробуй так:

Код:
@Override
    public Vec3 getSkyColor(Entity cameraEntity, float partialTicks) {
        float f1 = this.getCelestialAngle(partialTicks);
        float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;

        int i = 0xFFBE44;
        float r = (i >> 16 & 0xFF) / 255.0F;
        float g = (i >> 8 & 0xFF) / 255.0F;
        float b = (i & 0xFF) / 255.0F;
        r *= f2;
        g *= f2;
        b *= f2;

        return this.worldObj.getWorldVec3Pool().getVecFromPool(r, g, b);
    }
Но тогда у тебя не будет плавного перехода между биомами.
 

RonyC

Каменная лига
Сообщения
687
Лучшие ответы
1
Симпатии
3
#19
Liahim написал(а):
Но тогда у тебя не будет плавного перехода между биомами.
Ты про что? Вообщем работает, спасибо большое))

Но случилась небольшая беда, цвет неба поменялся.

Может это быть из-за calcSunriseSunsetColors?
 

Liahim

Золотая лига
Сообщения
3,237
Лучшие ответы
34
Симпатии
194
#20
Бдыщ! Какой ты мне цвет дал, такой я тебе в примере и написал.
Это уж сам решай, какой тебе нужен.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху