1.6.4. Вопросы по жидкостям.

Вообщем создал жидкость (нефть).
Несколько вопросов:
1. Есть файлик underwater.png, который отвечает как выглядит вода, когда находишься под водой (простите за тавтологию). Нефть у меня чёрная с оттенками. Как сделать и вид под водой такой же? Подскажите хоть направление.
2. По поводу капель с блока, который находится под жидкостью. Видел файлик партиклей с каплями и прочими фишками. Как сделать свой (или прикрутить) чтобы поменять цвет капель?
Заранее спасибо за внимание.
 
Посмотри в RenderGameOverlay. Там underwater. С частицами хз. Думаю свою сделать и спавнить
 
С частицами в майне все вообще очень плохо.
По-хорошему, стоило поступить с атласом частиц так же, как и с атласами блоков и предметов - собирать их из разрозненных текстур при загрузке. Однако, почему-то этого не сделали, оставив атлас, зашитый в одну текстуру.
Однако, в твоем конкретном случае все не очень плохо. Для нефти можно без проблем использовать иконку от капли воды, просто очень сильно затемнив ее. Делаешь свой класс частицы extends EntityDropParticleFX, подменяешь там цвет частицы, спавнишь эти партиклы где надо и вуаля.
 
Благодарствую.

К Dovakin нашёл только класс RenderGameOverlayEvent, но это не то. Ну то есть там нет underwater.
 
Я названия не помню



А вот код для тендера партикла с твоей текстурой. Код не мой. 
Код:
public abstract class EntityParticle extends EntityFX{

    public EntityParticle(World wrd, double x, double y, double z){
        super(wrd, x, y, z);
    }
        //Этот метод скопипастен полностью, кроме того, что помечено.
    @Override
    public void renderParticle(Tessellator tess, float partialTicks, float par3, float par4, float par5, float par6, float par7){
        Minecraft.getMinecraft().renderEngine.bindTexture(getIconLoc());//МЕТКА
        GL11.glDepthMask(false);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F);//МЕТКА
        tess.startDrawingQuads();//МЕТКА
        tess.setBrightness(getBrightnessForRender(partialTicks));//МЕТКА
        float scale = 0.1F * particleScale;
        float x = (float)(prevPosX + (posX - prevPosX) * partialTicks - interpPosX);
        float y = (float)(prevPosY + (posY - prevPosY) * partialTicks - interpPosY);
        float z = (float)(prevPosZ + (posZ - prevPosZ) * partialTicks - interpPosZ);
        tess.addVertexWithUV(x - par3 * scale - par6 * scale, y - par4 * scale, z - par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 0.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x - par3 * scale + par6 * scale, y + par4 * scale, z - par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 0.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x + par3 * scale + par6 * scale, y + par4 * scale, z + par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 1.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x + par3 * scale - par6 * scale, y - par4 * scale, z + par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 1.0/*КОНЕЦ_МЕТКИ*/);
        tess.draw();//МЕТКА
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glDepthMask(true);
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);//МЕТКА
    }
 
Что за draw call? Этот код давным давно(в далёкой галактике)кидал ещё тогда ферстик. По-моему такой же в частицах. Сам я туда боюсь лазать
 
Draw call обращение к видеокарте, после которого она начинает что-то рендерить. В этом примере - tessellator.draw().  Каждое такое обращение далеко не мгновенно, и делать его для каждой частицы дорого. В майне сделано оптимальнее: перед рендерингом всех частиц вызывается tessellator.startDrawingQuads(), при отрисовке частицы только добавляются вершины в буфер, а tessellator.draw() вызывается один раз после отрисовки всех частиц. 

Кстати, я без понятия, как этот кусок кода должен работать. Если два раза подряд вызвать StartDrawingQuads, то вылезает экзепшн. ЕМНИП, нужно ещё  переписать метод getFxLayer(). Впрочем, не уверен, потому что сразу сделал свою реализацию частиц, не страдая, ковыряясь в этой.
 
Современных видеокарт не знаешь?Хотя особо спорить не хочу,ибо в рендеринге я полный 0
 
Ну с какими-то драйверами дроу коллы правда довольно быстрые, с какими-то нет. Тем не менее, в современных играх от майнкрафта до крайзиса делается в районе 2000 дроу коллов на кадр. Не думаю, что стоит делать ещё столько же ради одних частиц :D
 
GloomyFolken написал(а):
Draw call обращение к видеокарте, после которого она начинает что-то рендерить. В этом примере - tessellator.draw().  Каждое такое обращение далеко не мгновенно, и делать его для каждой частицы дорого. В майне сделано оптимальнее: перед рендерингом всех частиц вызывается tessellator.startDrawingQuads(), при отрисовке частицы только добавляются вершины в буфер, а tessellator.draw() вызывается один раз после отрисовки всех частиц. 

Кстати, я без понятия, как этот кусок кода должен работать. Если два раза подряд вызвать StartDrawingQuads, то вылезает экзепшн. ЕМНИП, нужно ещё  переписать метод getFxLayer(). Впрочем, не уверен, потому что сразу сделал свою реализацию частиц, не страдая, ковыряясь в этой.
Дай пжлста
 
А вот по-подробнее о создании своей системы частиц можно? На чем основывать, то есть, надо же как-то к майн-миру прикрутить...
[merge_posts_bbcode]Добавлено: 20.04.2015 21:44:09[/merge_posts_bbcode]

И если можете на 1.7.10)
 
Назад
Сверху