Мерцание блока

Версия Minecraft
1.7.10
586
1
2
Всем привет. Решил сделать 3д блок который выходит за границы обычного блока(просто моделью выходит),но будет иметь размер одного блока.
Когда блок стоит на одном блоке все впорядке,а когда вокруг становиться больше блоков,появляется мерцание.
Кто может помочь с проблемой?
Java:
import org.lwjgl.opengl.GL11;


import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;

public class MetkaBlockRender extends TileEntitySpecialRenderer {

    private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":" + "textures/blocks/metkablock.png");
   
    private MetkaBlockModel model;
   
    public MetkaBlockRender() {
        this.model = new MetkaBlockModel();
    }
   
    @Override
    public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) {

       
        int i;
        if (tileentity.getWorldObj() == null)
        {
                i = 0;
        } else {
                Block block = tileentity.getBlockType();
                i = tileentity.getBlockMetadata();
                if (block != null && i == 0)
                {
                        i = tileentity.getBlockMetadata();
                }
        }
            GL11.glPushMatrix();
            GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
            Minecraft.getMinecraft().renderEngine.bindTexture(texture);
            GL11.glPushMatrix();
            GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
            int j = 0;
            if(i == 3) {
                j = 270;
            }
            if(i == 2) {
                j = 180;
            }
            if(i == 1) {
                j = 90;
            }
            if(i == 0) {
                j = 360;
            }
            GL11.glRotatef(j, 0.0F, 1.0F, 0F);
            this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
            GL11.glPopMatrix();
            GL11.glPopMatrix();
    }

}
 

Вложения

  • 2018-02-05_11.23.41.png
    2018-02-05_11.23.41.png
    551.6 KB · Просмотры: 25
  • 2018-02-05_11.23.48.png
    2018-02-05_11.23.48.png
    418.1 KB · Просмотры: 25
5,020
47
784
две плоскости в одной у тебя. И рендер не может определиться. Сдвинь одну из плоскостей модели на 0.0000000001 вверх и мерцание исчезнет
 
586
1
2
glDisable(GL_CULL_FACE);
// рендер
glEnable(GL_CULL_FACE);

Лично мне всегда помогало.
Сделал вот так(это с оружием если что):
GL11.glDisable(GL11.GL_CULL_FACE);
model.render();
GL11.glEnable(GL11.GL_CULL_FACE);

В выводе не помогло :/
 

CumingSoon

Местный стендапер
1,634
12
269
Хотя вы знаете,я вас понял,прибавил на 0.001 и все работает.
Еще такой вопрос по теме,а с мобами и предметами как такое решается?
Что конкретно? Проблема называется Z-Fighting. Есть 2 общих решения:
1. Отодвинуть (это не будет вызывать у z-buffer проблем с проверкой и он будет знать однозначно, что рисовать)
2. Использовать лалгоритм художника. Сложнее, т.к. нужно будет сортировать от дальних к передним; рисовать в том же порядке. И да, вручную учитывать, когда они рисуются, а когда нет(типа стенок). Зато проблем не будет. Гарантированно. (будут другие)
 
1,990
18
105
Java:
float n = -3.0F; // с этим числом можешь поиграться, при больших значениях оно может давать визуальные артефакты (объект будет рисоваться поверх того чего не должен), при маленьких может не фиксить проблему
glPolygonOffset(n, n);
glEnable(GL_POLYGON_OFFSET_FILL);
/// ... render
glPolygonOffset(0F, 0F);
glDisable(GL_POLYGON_OFFSET_FILL);
Для броников и оружия вполне подойдет.
З.Ы. Единственное, декаль с этим костылем придется рисовать как тайл, а не как блок :Р
 
586
1
2
Что конкретно? Проблема называется Z-Fighting. Есть 2 общих решения:
1. Отодвинуть (это не будет вызывать у z-buffer проблем с проверкой и он будет знать однозначно, что рисовать)
2. Использовать лалгоритм художника. Сложнее, т.к. нужно будет сортировать от дальних к передним; рисовать в том же порядке. И да, вручную учитывать, когда они рисуются, а когда нет(типа стенок). Зато проблем не будет. Гарантированно. (будут другие)
Меня интересует решение как для мобов,как и для оружий(итемов). В первом не понял что отодвинуть.

В варианте Oldestkon(цитатнуть не смог :/ ) хотелось бы уточнить пару моментов: вы предлагаете сделать тайл для предмета и в нем присваивать текстуру?И как понять "не как блок".
 
5,020
47
784
Ты чего все мучаешься, извращенец? Увеличь просто полигон так чтобы незаметно было и все. Чего ты этих замороченных профессионалов слушаешь.
 
Сверху