gpt4 book ai didi

graphics - libgdx:显示加载模型的线框

转载 作者:行者123 更新时间:2023-12-02 21:44:02 31 4
gpt4 key购买 nike

我一直在互联网上拼命寻找解决方案......但除了函数glDrawArrays之外,我没有得到任何进一步的信息。我不知道如何使用它,也不知道为什么它不起作用...我想渲染使用 ObjLoader 加载的模型的多边形线(或顶点线)。相反,它一直向我显示白色边框。

我使用的是 libgdx 1.0.0。

这是我的代码:

public class Teapot extends ApplicationAdapter {
ModelBatch batch;
ModelInstance m;
Camera cam;
CameraInputController camController;
Environment environment;

@Override
public void create () {
batch = new ModelBatch();

environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));


cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(0, 0, 5f);
cam.lookAt(0,0,0);
cam.position.add(0, 2, 0);
cam.near = 1f;
cam.far = 100f;
cam.update();

camController = new CameraInputController(cam);
Gdx.input.setInputProcessor(camController);


Model model = new ObjLoader().loadModel(Gdx.files.internal("teapot.obj"), true);
m = new ModelInstance(model);
}

@Override
public void render () {
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glDrawArrays(GL20.GL_TRIANGLES, 0, 3);
batch.begin(cam);
batch.render(m);
batch.end();
}
}

我正在使用的teapot.obj:http://groups.csail.mit.edu/graphics/classes/6.837/F03/models/teapot.obj

最佳答案

有几种不同的方法可以做到这一点。基本上,问题在于加载的模型带有有关其类型的模型的信息(三角形,而不是直线),并且 ModelBatch 会查看该信息来决定如何绘制它。

最直接的方法是以指定其线条的格式导出模型,然后使用 fbx-conv 将其转换为 libgdx 的 native 格式 (G3D)。 。我认为不可能将 .obj 文件指定为行,因此您需要 FBX 或 Collada 之类的东西。

这是我能想到的最简单的方法,可以在不欺骗模型文件的情况下获得快速而肮脏的结果:子类 ModelInstance 并重写以下方法,如下所示:

    public Renderable getRenderable(final Renderable out, final Node node, 
final NodePart nodePart) {
super.getRenderable(out, node, nodePart);
out.primitiveType = GL20.GL_LINE_STRIP;
return out;
}

然后使用这个子类而不是ModelInstance。这将告诉 ModelBatch 该网格是线带网格,使其绘制线条。缺点是它会按照文件中显示的顺序连接所有顶点,因此您会在模型的某些地方出现一些意外的额外线条。您可以使用 GL_LINES 来代替,但是这样您会丢失一堆线段。

关于graphics - libgdx:显示加载模型的线框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462105/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com