- 1,870
- 52
- 357
Всем привет.
Пытался я тут сделать что-то вроде зеркал (отражений в них), для этого нужно каким-то образом повторно зарендерить мир в другой определенной точке(на координатах зеркала).
Нашел метод renderWorld в Minecraft.getMinecraft().entityRenderer.
Получилось что-то типа этого:
Ну и потом я просто накладываю текстурку фбо на предмет.
И это вроде бы работает, но если немного отлететь от "зеркала", то чанки перестают прогружаться
Как и на зеркале, так и в нормальном мире.
Как я понял, чанки рисуются только на заданном растоянии(renderDistanceChunks) от renderViewEntity, и перестают прогружаться на растоянии(renderDistanceChunks) от игрока. Почему так? Можно ли это как-то исправить?
Пытался я тут сделать что-то вроде зеркал (отражений в них), для этого нужно каким-то образом повторно зарендерить мир в другой определенной точке(на координатах зеркала).
Нашел метод renderWorld в Minecraft.getMinecraft().entityRenderer.
Получилось что-то типа этого:
Java:
public static Framebuffer framebuffer;
@SubscribeEvent
public void onTick(TickEvent.RenderTickEvent event){
if(!event.phase.equals(TickEvent.Phase.END))
return;
if(rendering) return;
if(framebuffer == null) framebuffer = GLMC10.glGetSimilarMcFBO(true);
GLMC10.glCopyOptionsMcFBO(framebuffer);
GL11.glEnable(GL11.GL_BLEND);
Minecraft mc = Minecraft.getMinecraft();
GameSettings settings = mc.gameSettings;
EntityLivingBase entityLast = mc.renderViewEntity;
boolean hideGuiLast = settings.hideGUI;
float fovLast = settings.fovSetting;
int widthLast = mc.displayWidth;
int heightLast = mc.displayHeight;
for(Reflection reflection : reflections) {
if(reflection.getEntityCamera() == null) continue;
mc.renderViewEntity = reflection.getEntityCamera();
settings.fovSetting = 90f;
settings.hideGUI = true;
rendering = true;
EntityRenderer entityRenderer = mc.entityRenderer;
entityRenderer.renderWorld(1f, reflection.getRenderEndNanoTime() + (1000000000 / settings.limitFramerate));
reflection.setTextureReflection(framebuffer.framebufferTexture);
reflection.setRenderEndNanoTime(System.nanoTime());
rendering = false;
}
mc.renderViewEntity = entityLast;
settings.fovSetting = fovLast;
settings.hideGUI = hideGuiLast;
mc.displayWidth = widthLast;
mc.displayHeight = heightLast;
GL11.glDisable(GL11.GL_BLEND);
Minecraft.getMinecraft().framebufferMc.bindFramebuffer(true);
GL10.glViewportz(widthLast, heightLast);
GL11.glLoadIdentity();
}
И это вроде бы работает, но если немного отлететь от "зеркала", то чанки перестают прогружаться
Как и на зеркале, так и в нормальном мире.
Как я понял, чанки рисуются только на заданном растоянии(renderDistanceChunks) от renderViewEntity, и перестают прогружаться на растоянии(renderDistanceChunks) от игрока. Почему так? Можно ли это как-то исправить?