LibGDX 3d 模型纹理未正确渲染

Posted

技术标签:

【中文标题】LibGDX 3d 模型纹理未正确渲染【英文标题】:LibGDX 3d model textures not rendering correctly 【发布时间】:2014-04-03 03:56:09 【问题描述】:

提醒一下,如果我的问题不清楚,我真的很抱歉:

我使用 Blender 制作了一个 3D 模型,作为我模型的材质,我只是使用了具有光泽和漫反射纹理的混合着色器。我试图让它在 LibGDX 中正确显示。当我在 Blender 中渲染模型时,它是这样的:

然后我将文件导出到 fbx,然后使用 fbx-conv 将其转换为 .g3db 文件,但是当我尝试在我的代码中加载模型时(取自 http://blog.xoppa.com/loading-models-using-libgdx/):

public class Basic3DTest implements ApplicationListener 
PerspectiveCamera cam;
public CameraInputController camController;
public Environment environment;
public ModelInstance instance;
public ModelBatch modelBatch;
public AssetManager assets;
public Array<ModelInstance> instances = new Array<ModelInstance>();
public boolean loading;

@Override
public void create() 
    modelBatch = 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, -.5f,
            -0.6f, -1f));
    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();
    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);
    assets = new AssetManager();
    assets.load("data/Space Game/ModelData/blinky.g3db", Model.class);
    loading = true;


  private void doneLoading() 
        Model ship = assets.get("data/Space Game/ModelData/blinky.g3db", Model.class);
        ModelInstance shipInstance = new ModelInstance(ship); 
        instances.add(shipInstance);
        loading = false;
    

@Override
public void dispose() 
    modelBatch.dispose();
    instances.clear();
    assets.dispose();


@Override
public void pause() 
    // TODO Auto-generated method stub



@Override
   public void render () 
    if (loading && assets.update())
        doneLoading();
    camController.update();

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(instances, environment);
    modelBatch.end();


@Override
public void resize(int arg0, int arg1) 
    // TODO Auto-generated method stub



@Override
public void resume() 
    // TODO Auto-generated method stub


以下是显示的内容:

知道有什么问题吗?提前致谢。

【问题讨论】:

【参考方案1】:

您应该在渲染时显式设置着色器。有关在 libgdx 中使用着色器的信息,请参阅https://github.com/libgdx/libgdx/wiki/Shaders

【讨论】:

【参考方案2】:
'AssetManager assets = new AssetManager();'
'assets.load("myFile.g3db", Model.class);'
'assets.finishLoading();'
'Model myModel = assets.get("myFile.g3db", Model.class);'

'ModelInstance myInstance = new ModelInstance(myModel);'
'Texture myTexture = new Texture(Gdx.files.internal("badlogic.png"));'
'Material myMaterial = new Material(TextureAttribute.createDiffuse(myTexture));'
'NodePart nodePart = myModel.nodes.get(0).parts.get(0);'
'nodePart.material.set(myMaterial);

/* 所有这些都必须在 create 方法中 */

【讨论】:

以上是关于LibGDX 3d 模型纹理未正确渲染的主要内容,如果未能解决你的问题,请参考以下文章

使用 VAO/VBO 进行 OpenGL 模型/纹理渲染

我的渲染技术进阶之旅解决显示3D模型时因为使用stb_image库加载纹理时未翻转y轴导致模型纹理映射出错的问题

我的渲染技术进阶之旅解决显示3D模型时因为使用stb_image库或者opencv库加载纹理时未翻转y轴导致模型纹理映射出错的问题

Unity3D纹理贴图 ( 纹理 Texture 简介 | 为 3D 模型设置纹理贴图 )

libgdx SpriteBatch 渲染到纹理

将纹理 3d 模型和纹理从搅拌机导出到 xna 4.0