Собственный туман (1.7.10)

1,137
5
3
Ты когда натягиваешь текстуру на квад, перед отрисовкой квада вруби шейдер. И ещё отменить стандартную фигню. Даже проще можно, но надо логику жсона разобрать
 
4,046
63
645
А откуда я знаю, в какой момент майн натягивает текстуру на квад?
Я запускаю шейдер и достаю ванильный фрейм буфер... и делаю это в момент отрисовки тумана... То есть, где-то до натягивания текстуры.
То есть, отрисовка блоков должна происходить уже с использованием моего шейдера.
Затем я его вырубаю...

Я правильно это себе представляю?
 
1,137
5
3
После отрисовки сцены он натягивает. 
Тебе надо где-нибудь включить шейдер(код у хирурга взять можно). Потом написать связку с жсоном, передав твои данные(без понятия какие, смотри статью). Ну и сделать шейдер. Легко!(не очень). Я, наверно, попробую сделать
 
4,046
63
645
У хирурга спросить нужно или он уже где-то выкладывал? )))
А на счёт жсона, я подумал, что лучше без него будет... В описанной выше программе как раз есть загрузка шейдера напрямую через GL20(бла-бла, программ)... Если, конечно, майн отнесётся к этому с пониманием )))
[merge_posts_bbcode]Добавлено: 17.06.2016 18:12:25[/merge_posts_bbcode]

Хирург, отзовись!
 
1,137
5
3
Liahim написал(а):
У хирурга спросить нужно или он уже где-то выкладывал? )))
А на счёт жсона, я подумал, что лучше без него будет... В описанной выше программе как раз есть загрузка шейдера напрямую через GL20(бла-бла, программ)... Если, конечно, майн отнесётся к этому с пониманием )))
...
Жсон - обёртка. тебе не придётся писать кучу GL20.glBuildProgram, майнкрафт сам всё сделает. Это типа АПИ.
 
1,137
5
3
Именно. Примеры шейдеров есть в майне, так что я, пожалуй, пойду
 
1,137
5
3
Код:
{
    "targets": [
        "swap"
    ],
    "passes": [
        {
            "name": "invert",
            "intarget": "minecraft:main",
            "outtarget": "swap",
            "uniforms": [
                {
                    "name": "InverseAmount",
                    "values": [ 0.8 ]
                }
            ]
        },
        {
            "name": "blit",
            "intarget": "swap",
            "outtarget": "minecraft:main"
        }
    ]
}

Код:
{
    "blend": {
        "func": "add",
        "srcrgb": "one",
        "dstrgb": "zero"
    },
    "vertex": "blit",
    "fragment": "invert",
    "attributes": [ "Position" ],
    "samplers": [
        { "name": "DiffuseSampler" }
    ],
    "uniforms": [
        { "name": "ProjMat",       "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
        { "name": "InSize",        "type": "float",     "count": 2,  "values": [ 1.0, 1.0 ] },
        { "name": "OutSize",       "type": "float",     "count": 2,  "values": [ 1.0, 1.0 ] },
        { "name": "InverseAmount", "type": "float",     "count": 1,  "values": [ 0.0 ] }
    ]
}

Код:
#version 120

uniform sampler2D DiffuseSampler;

varying vec2 texCoord;

uniform float InverseAmount;

void main(){
    vec4 diffuseColor = texture2D(DiffuseSampler, texCoord);
    vec4 invertColor = 1.0 - diffuseColor;
    vec4 outColor = mix(diffuseColor, invertColor, InverseAmount);
    gl_FragColor = vec4(outColor.rgb, diffuseColor.a);
}

Код:
#version 120

attribute vec4 Position;

uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;

varying vec2 texCoord;

void main(){
    vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
    gl_Position = vec4(outPos.xy, 0.2, 1.0);

    vec2 sizeRatio = OutSize / InSize;
    texCoord = Position.xy / OutSize;
    texCoord.x = texCoord.x * sizeRatio.x;
    texCoord.y = texCoord.y * sizeRatio.y;
    texCoord.y = sizeRatio.y - texCoord.y;
}

Надо вдуплять в первый файл. Какие-то магические слова и числа. О юниформах понятно, про blend тоже, вроде. 2 последних, вообще, сами шейдеры. Непонятно какие майн выдаёт параметры, как передать их шейдеру
 
1,137
5
3
Нигде, это абстрактность скорее. Дабы не писать кучу кода, файлы сами грузятся.
 
4,046
63
645
Это делается через ЭнтитиРендерер! Я знал! :D
Спасибо за ссылку, только проблему это не решает...

Загвоздка уже описана в этой теме выше: данный метод включает шейдер как таковой и он сам применяется в тот момент, в который нужно... Однако стороннее включение любого другого шейдера вырубает мой.
Мне же нужно, что бы он висел независимо от остальных...
Соответственно, его нужно включать и выключать каждый кадр...

Вопрос: в каком же месте это делается? )))
 
1,137
5
3
Ой, точно

Тогда как сказал конь: подрубаться хуком, рисовать СВОЙ квад с шейдером.
*****
Я никак не могу найти формулу этого тумана. Киньте кто-нибудь, плз
 
1,239
2
24
Можно и свои униформы грузить и майновские
Майновские:
Код:
ShaderUniform uniform = shader.getUniform("Имя переменной");

а потом эту переменную в .json заполнять,во вкладке uniforms и обращаться к ней в коде шейдера
Код:
uniform vec3 Имя переменной

А свою можно как 2д самплер сделать,но как другие типы не разбирался.
а ваще вилах,мог бы показать свою либу.
с шейдерами и их написанием он сам по ходу разберется,я дал ссылки на вбо,фбо.
 
4,046
63
645
А shader в данном случае - это что?
Что-то я в классе Shader метода getUniform не нахожу.
[merge_posts_bbcode]Добавлено: 17.06.2016 22:37:19[/merge_posts_bbcode]

nikita488 написал(а):
Код:
"/assets/examplemod/shaders/overl.fsh"
Кстати, такая фишка не прокатила... Так же не может найти путь.

Попробовал грузить через код хирурга.
Пишет:
Код:
Could not find uniform named InSize in the specified shader program
Но это уже беда жсонов...
Хотя, такая униформа в нём присутствует.

Может, я опять пути не правильно указываю?
Код:
{
    "targets": [
        "swap"
    ],
    "passes": [
        {
            "name": "fog",
            "intarget": "minecraft:main",
            "outtarget": "swap"
        },
        {
            "name": "fog",
            "intarget": "swap",
            "outtarget": "minecraft:main"
        }
    ]
}

Не нужно ли вместо "fog", писать что-то типа "examplemod:fog"? Хотя, и это не помогает...
Чо-та не идут у меня шейдеры эти (
 
164
1
4
У тебя должно быть два джсона и вершинный и фрагментный шейдеры. Где они лежат?
 
Сверху