- 769
- 2
- 42
Помогите с рендером неба. Я все зарегистрировал и подключил, но почему объекты не отображаются. Просто пустое небо без ничего. Как исправить?
SkyProvider
ClientProxy
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;
}
}