Рендер неба

769
2
42
Помогите с рендером неба. Я все зарегистрировал и подключил, но почему объекты не отображаются. Просто пустое небо без ничего. Как исправить?

SkyProvider
Код:
package fb.futurebuilder.planets.mars.client;

import java.util.Random;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.client.FMLClientHandler;
import fb.futurebuilder.planets.mars.dimension.FBMarsWorldProvider;
import micdoodle8.mods.galacticraft.core.GCCoreConfigManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraftforge.client.IRenderHandler;

public class FBMarsSkyProvider extends IRenderHandler {

   public int starGLCallList = GLAllocation.generateDisplayLists(3);
   public int glSkyList;
   public int glSkyList2;


   public FBMarsSkyProvider() {
      GL11.glPushMatrix();
      GL11.glNewList(this.starGLCallList, 4864);
      this.renderStars();
      GL11.glEndList();
      GL11.glPopMatrix();
      Tessellator tessellator = Tessellator.instance;
      this.glSkyList = this.starGLCallList + 1;
      GL11.glNewList(this.glSkyList, 4864);
      boolean byte2 = true;
      boolean i = true;
      float f = 16.0F;

      int k;
      int i1;
      for(k = -384; k <= 384; k += 64) {
         for(i1 = -384; i1 <= 384; i1 += 64) {
            tessellator.startDrawingQuads();
            tessellator.addVertex((double)(k + 0), (double)f, (double)(i1 + 0));
            tessellator.addVertex((double)(k + 64), (double)f, (double)(i1 + 0));
            tessellator.addVertex((double)(k + 64), (double)f, (double)(i1 + 64));
            tessellator.addVertex((double)(k + 0), (double)f, (double)(i1 + 64));
            tessellator.draw();
         }
      }

      GL11.glEndList();
      this.glSkyList2 = this.starGLCallList + 2;
      GL11.glNewList(this.glSkyList2, 4864);
      f = -16.0F;
      tessellator.startDrawingQuads();

      for(k = -384; k <= 384; k += 64) {
         for(i1 = -384; i1 <= 384; i1 += 64) {
            tessellator.addVertex((double)(k + 64), (double)f, (double)(i1 + 0));
            tessellator.addVertex((double)(k + 0), (double)f, (double)(i1 + 0));
            tessellator.addVertex((double)(k + 0), (double)f, (double)(i1 + 64));
            tessellator.addVertex((double)(k + 64), (double)f, (double)(i1 + 64));
         }
      }

      tessellator.draw();
      GL11.glEndList();
   }

   public void render(float partialTicks, WorldClient world, Minecraft mc) {
      FBMarsWorldProvider gcProvider = null;
      if(world.provider instanceof FBMarsWorldProvider) {
         gcProvider = (FBMarsWorldProvider)world.provider;
      }

      GL11.glDisable(3553);
      Vec3 var2 = this.getCustomSkyColor();
      float var3 = (float)var2.xCoord * (1.0F - world.getStarBrightness(partialTicks) * 2.0F);
      float var4 = (float)var2.yCoord * (1.0F - world.getStarBrightness(partialTicks) * 2.0F);
      float var5 = (float)var2.zCoord * (1.0F - world.getStarBrightness(partialTicks) * 2.0F);
      float var10;
      if(mc.gameSettings.anaglyph) {
         float var23 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F;
         var10 = (var3 * 30.0F + var4 * 70.0F) / 100.0F;
         float var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F;
      }

      GL11.glColor3f(1.0F, 1.0F, 1.0F);
      Tessellator var231 = Tessellator.instance;
      GL11.glDepthMask(false);
      GL11.glEnable(2912);
      GL11.glColor3f(0.0F, 0.0F, 0.0F);
      GL11.glCallList(this.glSkyList);
      GL11.glDisable(2912);
      GL11.glDisable(3008);
      GL11.glEnable(3042);
      GL11.glBlendFunc(770, 771);
      RenderHelper.disableStandardItemLighting();
      float var20 = 0.0F;
      if(gcProvider != null) {
         var20 = gcProvider.getStarBrightness(partialTicks);
      }

      if(var20 > 0.0F) {
         GL11.glColor4f(1.0F, 1.0F, 1.0F, var20);
         GL11.glCallList(this.starGLCallList);
      }

      GL11.glEnable(3553);
      GL11.glBlendFunc(770, 1);
      GL11.glPushMatrix();
      GL11.glPopMatrix();
      GL11.glPushMatrix();
      GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
      GL11.glColor4f(1.0F, 1.0F, 1.0F, 5.0F);
      GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F);
      float var12 = 30.0F;
      FMLClientHandler.instance().getClient().renderEngine.bindTexture("/environment/sun.png");
      var231.startDrawingQuads();
      var231.addVertexWithUV((double)(-var12), 150.0D, (double)(-var12), 0.0D, 0.0D);
      var231.addVertexWithUV((double)var12, 150.0D, (double)(-var12), 1.0D, 0.0D);
      var231.addVertexWithUV((double)var12, 150.0D, (double)var12, 1.0D, 1.0D);
      var231.addVertexWithUV((double)(-var12), 150.0D, (double)var12, 0.0D, 1.0D);
      var231.draw();
      GL11.glPopMatrix();
      GL11.glPushMatrix();
      GL11.glDisable(3042);
      var12 = 10.0F;
      float earthRotation = (float)((double)world.getSpawnPoint().posZ - mc.thePlayer.posZ) * 0.01F;
      GL11.glScalef(0.6F, 0.6F, 0.6F);
      GL11.glRotatef(earthRotation, 1.0F, 0.0F, 0.0F);
      GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F);
      GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
      FMLClientHandler.instance().getClient().renderEngine.bindTexture("/micdoodle8/mods/galacticraft/core/client/planets/overworld.png");
      world.getMoonPhase();
      var231.startDrawingQuads();
      var231.addVertexWithUV((double)(-var12), -100.0D, (double)var12, 0.0D, 1.0D);
      var231.addVertexWithUV((double)var12, -100.0D, (double)var12, 1.0D, 1.0D);
      var231.addVertexWithUV((double)var12, -100.0D, (double)(-var12), 1.0D, 0.0D);
      var231.addVertexWithUV((double)(-var12), -100.0D, (double)(-var12), 0.0D, 0.0D);
      var231.draw();
      GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
      GL11.glDisable(3042);
      GL11.glEnable(3008);
      GL11.glEnable(2912);
      GL11.glPopMatrix();
      GL11.glDisable(3553);
      GL11.glColor3f(0.0F, 0.0F, 0.0F);
      double var25 = mc.thePlayer.getPosition(partialTicks).yCoord - world.getHorizon();
      if(var25 < 0.0D) {
         GL11.glPushMatrix();
         GL11.glTranslatef(0.0F, 12.0F, 0.0F);
         GL11.glCallList(this.glSkyList2);
         GL11.glPopMatrix();
         var10 = 1.0F;
         float var11 = -((float)(var25 + 65.0D));
         var12 = -var10;
         var231.startDrawingQuads();
         var231.setColorRGBA_I(0, 255);
         var231.addVertex((double)(-var10), (double)var11, (double)var10);
         var231.addVertex((double)var10, (double)var11, (double)var10);
         var231.addVertex((double)var10, (double)var12, (double)var10);
         var231.addVertex((double)(-var10), (double)var12, (double)var10);
         var231.addVertex((double)(-var10), (double)var12, (double)(-var10));
         var231.addVertex((double)var10, (double)var12, (double)(-var10));
         var231.addVertex((double)var10, (double)var11, (double)(-var10));
         var231.addVertex((double)(-var10), (double)var11, (double)(-var10));
         var231.addVertex((double)var10, (double)var12, (double)(-var10));
         var231.addVertex((double)var10, (double)var12, (double)var10);
         var231.addVertex((double)var10, (double)var11, (double)var10);
         var231.addVertex((double)var10, (double)var11, (double)(-var10));
         var231.addVertex((double)(-var10), (double)var11, (double)(-var10));
         var231.addVertex((double)(-var10), (double)var11, (double)var10);
         var231.addVertex((double)(-var10), (double)var12, (double)var10);
         var231.addVertex((double)(-var10), (double)var12, (double)(-var10));
         var231.addVertex((double)(-var10), (double)var12, (double)(-var10));
         var231.addVertex((double)(-var10), (double)var12, (double)var10);
         var231.addVertex((double)var10, (double)var12, (double)var10);
         var231.addVertex((double)var10, (double)var12, (double)(-var10));
         var231.draw();
      }

      GL11.glColor3f(0.2734375F, 0.2734375F, 0.2734375F);
      GL11.glPushMatrix();
      GL11.glTranslatef(0.0F, -((float)(var25 - 16.0D)), 0.0F);
      GL11.glCallList(this.glSkyList2);
      GL11.glPopMatrix();
      GL11.glEnable(3553);
      GL11.glDepthMask(true);
   }

   private void renderStars() {
      Random var1 = new Random(10842L);
      Tessellator var2 = Tessellator.instance;
      var2.startDrawingQuads();

      for(int var3 = 0; var3 < (GCCoreConfigManager.moreStars?20000:6000); ++var3) {
         double var4 = (double)(var1.nextFloat() * 2.0F - 1.0F);
         double var6 = (double)(var1.nextFloat() * 2.0F - 1.0F);
         double var8 = (double)(var1.nextFloat() * 2.0F - 1.0F);
         double var10 = (double)(0.15F + var1.nextFloat() * 0.1F);
         double var12 = var4 * var4 + var6 * var6 + var8 * var8;
         if(var12 < 1.0D && var12 > 0.01D) {
            var12 = 1.0D / Math.sqrt(var12);
            var4 *= var12;
            var6 *= var12;
            var8 *= var12;
            double var14 = var4 * (GCCoreConfigManager.moreStars?var1.nextDouble() * 100.0D + 150.0D:100.0D);
            double var16 = var6 * (GCCoreConfigManager.moreStars?var1.nextDouble() * 100.0D + 150.0D:100.0D);
            double var18 = var8 * (GCCoreConfigManager.moreStars?var1.nextDouble() * 100.0D + 150.0D:100.0D);
            double var20 = Math.atan2(var4, var8);
            double var22 = Math.sin(var20);
            double var24 = Math.cos(var20);
            double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6);
            double var28 = Math.sin(var26);
            double var30 = Math.cos(var26);
            double var32 = var1.nextDouble() * 3.141592653589793D * 2.0D;
            double var34 = Math.sin(var32);
            double var36 = Math.cos(var32);

            for(int var38 = 0; var38 < 4; ++var38) {
               double var39 = 0.0D;
               double var41 = (double)((var38 & 2) - 1) * var10;
               double var43 = (double)((var38 + 1 & 2) - 1) * var10;
               double var47 = var41 * var36 - var43 * var34;
               double var49 = var43 * var36 + var41 * var34;
               double var53 = var47 * var28 + 0.0D * var30;
               double var55 = 0.0D * var28 - var47 * var30;
               double var57 = var55 * var22 - var49 * var24;
               double var61 = var49 * var22 + var55 * var24;
               var2.addVertex(var14 + var57, var16 + var53, var18 + var61);
            }
         }
      }

      var2.draw();
   }

   private Vec3 getCustomSkyColor() {
      return Vec3.fakePool.getVecFromPool(0.26796875D, 0.1796875D, 0.0D);
   }

   public float getSkyBrightness(float par1) {
      float var2 = FMLClientHandler.instance().getClient().theWorld.getCelestialAngle(par1);
      float var3 = 1.0F - (MathHelper.sin(var2 * 3.1415927F * 2.0F) * 2.0F + 0.25F);
      if(var3 < 0.0F) {
         var3 = 0.0F;
      }

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

      return var3 * var3 * 1.0F;
   }
}

ClientProxy
Код:
package fb.futurebuilder.planets.mars.client;

import java.util.EnumSet;

import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.ITickHandler;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import fb.futurebuilder.planets.mars.FBMarsCommonProxy;
import fb.futurebuilder.planets.mars.dimension.FBMarsWorldProvider;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.world.World;

public class FBMarsClientProxy extends FBMarsCommonProxy {

   private static int magnesiumArmorRenderIndex;

   public static class TickHandlerClient implements ITickHandler {

       public void tickStart(EnumSet type, Object ... tickData) {
          Minecraft minecraft = FMLClientHandler.instance().getClient();
          WorldClient world = minecraft.theWorld;
          if(type.equals(EnumSet.of(TickType.CLIENT)) && world != null && world.provider instanceof FBMarsWorldProvider && world.provider.getSkyRenderer() == null) {
             world.provider.setSkyRenderer(new FBMarsSkyProvider());
          }

       }

       public void tickEnd(EnumSet type, Object ... tickData) {}

       public String getLabel() {
          return "Galacticraft Mars Client";
       }

       public EnumSet ticks() {
          return EnumSet.of(TickType.CLIENT);
       }
    }
    
   public void preInit(FMLPreInitializationEvent event) {
      
   }

   public void init(FMLInitializationEvent event) {}

   public void postInit(FMLPostInitializationEvent event) {}

   public void registerRenderInformation() {}

   public World getClientWorld() {
      return FMLClientHandler.instance().getClient().theWorld;
   }

}
 
Назад
Сверху