2012-08-13 7 views
5

Mam bardzo prosty program, który ładuje plik obj obłoku, obraca i wyświetla go. Problem polega na tym, że program renderuje go z pewnymi problemami (takimi jak brakujące trójkąty). Miałem podobny problem, gdy próbowałem wyrenderować piramidę z buforem wierzchołków zaczerpniętym z samouczka NeHe. Więc nie wiem, co powoduje problemy z renderowaniem. Możesz mi pomóc? Buggy Space ShuttleProblem z renderingiem siatki libgdx

package com.jam.libgdx3DTest; 

import com.badlogic.gdx.Game; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.*; 
import com.badlogic.gdx.graphics.g3d.loaders.obj.ObjLoader; 

import java.io.InputStream; 

public class Libgdx3DTest extends Game { 

    private Mesh shuttleMesh; 
    private Camera camera; 
    private float rotateAngle; 

    public void create() { 
     if (shuttleMesh == null) { 
      InputStream in = Gdx.files.internal("shuttle.obj").read(); 
      shuttleMesh = ObjLoader.loadObj(in, false); 
     } 
    } 

    public void render() { 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

     Gdx.gl10.glMatrixMode(GL11.GL_MODELVIEW_MATRIX); 

     Gdx.gl10.glLoadIdentity(); 

     camera.update(); 
     camera.apply(Gdx.gl10); 

     rotateAngle += 0.5f; 
     Gdx.gl10.glRotatef(rotateAngle, 0f, 1f, 0f); 
     Gdx.gl10.glRotatef(-90f, 1f, 0f, 0f); 

     shuttleMesh.render(GL11.GL_TRIANGLES); 
    } 

    public void resize(int width, int height) { 
     float aspectRatio = (float) width/(float) height; 
     camera = new PerspectiveCamera(67, 2f * aspectRatio, 2f); 
     camera.translate(0f, 0f, 12f); 
    } 

    public void pause(){ 
    } 

    public void resume(){ 
    } 

    public void dispose() { 
    } 
} 
+2

Zobacz, czy ta odpowiedź może pomóc: http://stackoverflow.com/questions/9019669/ android-mesh-issue-issue – Wroclai

+0

Dzięki stary, myślę, że może to jest problem. Spróbuję "triangulować" model. –

Odpowiedz

2

myślę, że może być o kwestie krętych czyli model ma inny kręte niż OpenGL.

Uzwojenie OpenGL jest domyślnie przeciwne do ruchu wskazówek zegara, ale można to zmienić za pomocą glFrontFace (GL_CW);

0

myślę, że to jest twój problem

shuttleMesh.render(GL11.GL_TRIANGLES) 

powinny być

shuttleMesh.render(GL11.GL_TRIANGL_FAN); 

IZ