2016-04-15 19 views
1

Ich lerne, wie Objekte mit libGdx gerendert werden. Ich habe ein quadratisches Modell, das aus ihnen einige Modellinstanzen erzeugt. Wenn ich nur ein Modell habe, ist es in Ordnung. enter image description hereRendern mehrerer 3D-Objekte

Aber wenn ich mehr Instanzen habe, ist es nicht richtig. Es sieht so aus, als ob die vorderen Objekte zuerst gezeichnet werden und der Hintergrund der letzte, also sind immer die Hintergrundobjekte sichtbar und die vorderen Objekte, durch die man sie sehen kann. enter image description here

zu machen Ich verwende die folgende

Gdx.gl.glViewport(0,0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl20.glClearColor(1f, 1f, 1f, 1f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 

    mb.begin(cam); 
    worldManager.render(mb, environment); 
    mb.end(); 

mb Variable ist die ModelBatch Instanz und innerhalb worldManager.render jedes Modell Beispiel ist wie folgt zeichnen:

mb.render(model, environment); 

bin ich nicht sicher, was passiert. Aber ich denke, es ist ein GL-Attribut, das ich brauche aktivieren

Ist nicht 100% bezogen auf die folgenden post weil ja ja es OPENGL wie libgdx verwendet, aber die Lösung in diesem Beitrag zur Verfügung gestellt funktioniert nicht und ich denke, das Problem kommt von ModelBatch von Libgdx

Reproduction of the problem

+3

dieser vielleicht 'glEnable (GL_DEPTH_TEST)'? Es könnte auch sein, dass Sie es aktiviert haben, aber nicht den Tiefenpuffer erstellt haben, und alles funktioniert genau so, wie Sie es nicht aktiviert haben – Guiroux

+1

Mögliches Duplikat von [OpenGL ES 2.0 Objekte mit LibGDX in umgekehrter Reihenfolge anzeigen] (http: // stackoverflow.com/questions/25070612/openg-l-es-2-0-displaying-objects-in-opposite-depth-order-using-libgdx) – Guiroux

+0

Ich markiert als Duplikat, weil es opengl mit libgdx und Sie haben das gleiche Problem, also könnte die akzeptierte Antwort Ihnen helfen – Guiroux

Antwort

3

Sie haben Ihre Kamera nicht richtig eingerichtet. Zuallererst ist die Kamera in der Nähe der Ebene 0f, was bedeutet, dass sie unendlich klein ist. Stellen Sie einen Wert von mindestens 1f ein. Zweitens hast du die Kamera auf ihre eigene Position eingestellt, was unmöglich ist (du kannst nicht in deine eigenen Augen schauen, kannst du;)).

So wäre es etwa so aussehen:

camera = new PerspectiveCamera(90, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
camera.position.set(0, 10, 0); 
camera.lookAt(0,0,0); 
camera.near = 1f; 
camera.far = 100f; 
camera.update(); 

Sie wahrscheinlich hier starten wollen: https://xoppa.github.io/blog/basic-3d-using-libgdx/

Weitere Informationen darüber, wie die Kamera funktioniert haben einen Blick auf: http://www.badlogicgames.com/wordpress/?p=1550

Btw, Das Anrufen Gdx.gl20.glEnable(GL20.GL_DEPTH_TEST); wird an diesem Standort nicht helfen und sollte definitiv nicht getan werden, wenn es mit ModelBatch gemischt wird. ModelBatch verwaltet seinen eigenen Renderkontext. Weitere Informationen finden Sie in der Dokumentation: https://github.com/libgdx/libgdx/wiki/ModelBatch

+0

danke das Problem war auf der Kamera. Ja, ich weiß, dass Modelbatch seinen eigenen Render-Kontext hat, deshalb denke ich, dass das Problem dort war und versuche deprete_test im Modelbatch-Kontext zu aktivieren. Aber das Problem war die Kamera. Vielen Dank! –

1

viele mögliche Antwort gibt es, aber ich würde sagen, dass

glEnable (GL_DEPTH_TEST) ; 

wenn Sie es noch nicht getan helfen könnte. Das Aktivieren des Tiefenpuffers funktioniert auch nur, wenn Sie tatsächlich einen Tiefenpuffer haben, was bedeutet, dass Sie sicherstellen müssen, dass Sie einen haben, und die Methode dafür hängt von Ihrem Fensterkontext ab.

+0

Ich habe diese Zeile aktiviert und funktioniert immer noch nicht. Ich denke, das Problem ist von der ModelBatch von libgx. Auch habe ich diese Zeile auch und noch nicht funktioniert batch.getRenderContext(). SetDepthTest (GL20.GL_DEPTH_BITS); –

Verwandte Themen