簡體   English   中英

Libgdx Box2D 燈,在 android 設備上看起來不同,光的奇怪輪廓

[英]Libgdx Box2D Lights, looking diffrent on android devices, strange outlines of light

最近我一直在嘗試學習如何使用 Box2D 燈。 我已經嘗試將它們實現到我的一個簡單游戲中。 一切正常並且看起來不錯(在 PC 上),直到我在手機上運行它。 燈光看起來完全不同,我什至不知道如何描述它。 看起來我正在經歷某種粘液,而不是良好和平滑的燈光效果。 我注意到的另一件事是,當我嘗試用 OBS 錄制它時,它看起來和我手機上的一樣。 我在我兄弟的手機上試過了,令我驚訝的是,它看起來和我的電腦上一模一樣。 如果有人遇到過這種行為或者可能知道它可能是由什么引起的,我將不勝感激,即使是如何稱呼它的名字。 改變光線的數量似乎沒有多大作用。 我也嘗試在兄弟的手機上錄制它,但它的行為方式與 PC 錄制的方式相同。

我的手機(小米mi mix 3)

我哥的手機(華為P10 lite)

它在我的手機上的外觀: https://youtu.be/fq_J6A95D2Y

這是它在 PC 上的外觀屏幕,光線的“OutLines”仍然可見,但要少得多: https://imgur.com/a/D6UHUVp

以下是與燈光相關的代碼:


    `RayHandler.useDiffuseLight(true);
    rayHandler = new RayHandler(world);
    rayHandler.setAmbientLight(0.1f,0.1f,0.1f,0.2f);
    rayHandler.setCulling(true);`

如果沒有 useDiffuseLight,它看起來會更糟。 剔除似乎沒有做任何與我的問題有關的事情。


    lightArray = new Array<>();
    int rays = 2048;
    int distance = 8;
    Color color = new Color(0.5f,0.5f,0.5f,1);
    PointLight light1 = new PointLight(context.getRayHandler(),rays,color,distance,3,3);
    PointLight light2 = new PointLight(context.getRayHandler(),rays,color,distance,3,13);
    PointLight light3 = new PointLight(context.getRayHandler(),rays,color,distance,6,3);
    PointLight light4 = new PointLight(context.getRayHandler(),rays,color,distance,6,13);
    lightArray.add(light1);
    lightArray.add(light2);
    lightArray.add(light3);
    lightArray.add(light4);
    for(Light light:lightArray){
        light.setSoftnessLength(1);
        light.setSoft(true);

    }

光線的數量似乎並沒有改變與我的問題相關的任何事情。 (我已經嘗試過使用 64,128,1024,4096 並且“輸出線看起來仍然相同”)。 關閉柔軟度不會改變與我的問題相關的任何內容。


    playerLight = new PointLight(context.getRayHandler(),2048,new 
    Color(0.4f,0.4f,0.4f,1f),5,playerBody.getPosition().x,playerBody.getPosition().y);
    playerLight.attachToBody(playerBody);


    rayHandler.setCombinedMatrix(context.getCamera());
    rayHandler.updateAndRender();

這是在 shapeRenderer 和 SpriteBatch 繪制完所有內容之后調用的。

你所描述的是所謂的帶狀。 由於某種原因,Android 上的 LibGDX 默認幀緩沖區僅使用 16 位顏色。 您可以在 AndroidLauncher 中將其更改為 32 位:

protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(){{
        r = 8;
        g = 8;
        b = 8;
        a = 8;
    }};
    initialize(new MyGdxGame(), config);
}

您還可以啟用抖動以減少條帶,但可能會影響性能。 對於它的價值,我總是保持它,我所有的東西都以 60fps 運行,所以我認為它需要一個相當沉重的游戲才能成為問題。

要啟用抖動,請將其放入游戲的create()方法中:

Gdx.gl.glEnable(GL20.GL_DITHER);

暫無
暫無

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

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