1

特別な外観を実現するためだけに ASCII アートで描かれた 3D ゲームを書いています。モデルを ModelBatch にレンダリングし、最終結果を画面に描画する前に、すべてのピクセルを ASCII シンボルに変換したいと考えています。ピクセルを ASCII に変換するコードは既にありますが、レンダリング結果のピクセルを取得する方法がわかりません。

これまでのコード (ASCII 変換を含まない):

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.materials.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.materials.Material;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;

public class MyGame implements ApplicationListener {
    private PerspectiveCamera cam;
    private ModelBatch batch;

    public Model model;
    public ModelInstance instance;

    @Override
    public void create() {      
        //float w = Gdx.graphics.getWidth();
        //float h = Gdx.graphics.getHeight();

        cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        cam.position.set(10f, 10f, 10f);
        cam.lookAt(0,0,0);
        cam.near = 0.1f;
        cam.far = 300f;
        cam.update();

        batch = new ModelBatch();

        ModelBuilder modelBuilder = new ModelBuilder();
        model = modelBuilder.createBox(5f, 5f, 5f,
            new Material(ColorAttribute.createDiffuse(Color.GREEN)),
            Usage.Position | Usage.Normal);
        instance = new ModelInstance(model);
    }

    @Override
    public void dispose() {
        batch.dispose();
        model.dispose();
    }

    @Override
    public void render() {      
        Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        batch.begin(cam);
        batch.render(instance);
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}
4

1 に答える 1

1

テクスチャにレンダリングし、テクスチャを Pixmap に変換してから、pixmap を解析して ASCII 文字を実際の画面に描画する必要があると思います。

最初に、LibGDX でテクスチャ (オフスクリーン バッファ) にレンダリングするには、次を使用しますFrameBufferObject

fbo = new FrameBuffer();
fbo.begin();
// draw your stuff
// ...
fbo.end();

次に、CPU が使用できるバイト数を取得するには、[ScreenUtilsクラス]( http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/ScreenUtils.html ) を使用できます。Pixmapまたは rawを取得できますbyte[]。たとえば、// ...上記を次のように置き換えます。

Pixmap p = ScreenUtils.getFrameBufferPixmap(0, 0, width, height);

これで、ピクセルをチェックアウトするピックスマップをさまよいます ([ Pixmap.getPixel]( http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html#getPixel(int , int)) を使用) )。

于 2014-01-16T05:59:39.680 に答える