簡體   English   中英

libgdx-如何將子畫面批處理設置為這樣的混合/陰影?

[英]libgdx - how to set sprite batch to blend/shade like this?

我目前有一個默認的精靈批處理:

    batch = new SpriteBatch();

我已經閱讀了有關使用着色器修改批處理繪制每個精靈的方式的信息。 在我的游戲中,我嘗試創建“夜間”效果-我希望屏幕上的每個像素都為黑色,但已經是白色的像素除外。 對於白色像素,我想要一個藍色陰影。 顯然,我是libgdx和openGL的新手-熟悉混合或着色器的人可以幫助我解決這個問題嗎? 我應該如何對我的spritebatch進行處理以達到我所描述的效果?

您想要達到的效果可以通過這樣的方法來完成。

頂點着色器

attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord;
attribute vec2 a_texCoord0;

uniform mat4 u_projTrans;

varying vec4 v_color;
varying vec2 v_texCoords;

void main()
{
    v_color = a_color;
    v_texCoords = a_texCoord0;
    gl_Position =  u_projTrans * a_position;
}

片段着色器

precision mediump float;

varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform mat4 u_projTrans;

bool equals(float a, float b) {
    return abs(a-b) < 0.0001;
}

bool isWhiteShade(vec4 color) {
    return equals(color.r, color.g) && equals(color.r, color.b);
}

void main() {
    vec4 color = texture2D (u_texture, v_texCoords) * v_color;
    if(isWhiteShade(color)) {
        color *= vec4(0, 0, 1, 1);
    }
    else {
        color *= vec4(0, 0, 0, 1);
    }
    gl_FragColor = color;
}

將它們添加到資產文件夾,然后在創建ShaderProgram實例時作為參數傳遞,當然不要忘記將此着色器程序應用於您的SpriteBatch。

老實說,它與SpriteBatch幾乎沒有任何共同點-您所要做的只是應用創建的着色器

    batch.setShader(ShaderProgram shader)

着色器主題非常廣泛(老實說,獨立於Libgdx),並且在沒有任何信息的情況下無法簡單回答您的問題。 另外-老實說-首先嘗試閱讀有關着色器的一些知識,然后在遇到一些麻煩時再回到SO。

您可以從這里開始:

https://github.com/libgdx/libgdx/wiki/Shaders

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM