Проблема с z-fighting, мерцание

Версия Minecraft
1.6.4
355
2
17
DmBLl43fJPYp9A.png


По сути это выделение блока, расширение границ не помогло, это вот тоже не помогло:

Java:
GL11.glPolygonOffset(-3F, -3F);
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
GL11.glEnable(GL11.GL_CULL_FACE);

Вызываю из ивента RenderWorldLastEvent

Java:
AxisAlignedBB alignedBB = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z +1).expand(0.001D, 0.001D, 0.001D);

double worldPosX = -(mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * partialTicks);
double worldPosY = -(mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * partialTicks);
double worldPosZ = -(mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * partialTicks);

GL11.glPushMatrix();
GL11.glTranslated(worldPosX, worldPosY, worldPosZ);
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_LIGHTING);

GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glColor4f((float)(color >> 16) / 255.0F, (float)(color >> 8 & 255) / 255.0F, (float)(color & 255) / 255.0F, 0.25F);

Tessellator tessellator = Tessellator.instance;

tessellator.startDrawingQuads();

//top
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.maxZ);

//bottom
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.minZ);

//north
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.minZ);

//south
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.maxZ);

//west
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.maxZ);

//east
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.maxZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.minZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.minZ);
tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.maxZ);

tessellator.draw();

if (drawLines)
{
    tessellator.startDrawing(3);
    tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
    tessellator.draw();
    tessellator.startDrawing(3);
    tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
    tessellator.draw();
    tessellator.startDrawing(1);
    tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.minZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.minY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.maxX, alignedBB.maxY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.minY, alignedBB.maxZ);
    tessellator.addVertex(alignedBB.minX, alignedBB.maxY, alignedBB.maxZ);
    tessellator.draw();
}

GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
 
355
2
17
Не цитируйте предыдущее сообщение, если вы отвечаете на него целиком, а не на его часть
Ну если слишком вылезает, то число меньше ставь :eek:k_hand:. А почему glScale не использовал?
Scale там по сути и не нужен, эти методы такие же, как рендер обычного блока.

А вот менять число не помогает, он уже на 0.1 достаточно выпирает (видно на скрине), а мне нужно это как оверлей поверх блока в идеале, чтобы не выпирало.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Ты не туда уменьшаешь, солдат.
Ты вообще читаешь тему? Если он уменьшает значение, то у него мерцает все. В этом и проблема.
Вообще не вникаешь в вопрос и говоришь чушь...
 
355
2
17
Как я и предполагал, в общем:

Java:
double worldPosX = -(mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * partialTicks);
double worldPosY = -(mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * partialTicks);
double worldPosZ = -(mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * partialTicks);

GL11.glTranslated(worldPosX, worldPosY, worldPosZ)

Заменяя на: tessellator.setTranslation(worldPosX, worldPosY, worldPosZ);
Проблема исчезает.
 
Сверху