我正在写一个用ASCII艺术绘制的3D游戏,以实现特殊的外观。我将模型渲染到ModelBatch,现在我想在将最终结果绘制到屏幕之前将每个像素转换为ASCII符号。我已经有了将像素转换为ASCII的代码,但我不知道如何获取渲染结果的像素。LibGDX - 渲染3D场景后修改像素
到目前为止的代码(不包括ASCII convertation):
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() {
}
}
你可以绘制图像,然后访问图像中的像素? –
这将是理想的解决方案,但是如何将3D绘制到libGDX中的图像?我应该画一个ModelBatch,将其转换为图像,然后用SpriteBatch绘制它,但我不知道如何做到这一点。我尝试过很多方法,但都没有成功。我错过了什么? – Finnboy11
我只是把想法抛出去,但必须有一种方法。毕竟,你正在渲染2D缓冲区(屏幕),对吧?我不知道如何从头到尾做,但渲染图像/纹理可能是一个开始搜索libGDX文档和论坛的地方。 –