Een 3D-model exporteren dat is gemaakt in sketch-up voor gebruik in Android

Ik heb een probleem met het gebruik van opengl op android om een ​​eenvoudige rechthoek te tekenen. Dit is wat ik heb gedaan.

Ik tekende een eenvoudige rechthoek met schets. Ik heb het resultaat geëxporteerd met een 3d-model collada .dae-bestand. Vervolgens heb ik de hoekpuntengegevens gekopieerd het .dae-bestand (xml) en zet het in een array. Ik heb de array gekopieerd in native formatteren naar een floatbuffer. Ik trok toen de driehoeken met behulp van streep modus. Het resultaat is bijna een rechthoek. Er ontbreekt een driehoek aan elk oppervlak.

Hier is het relevante gedeelte van de code en het resultaat.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
   //Enable color tracking
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    for (int i=0; i<108/4; i=i+4) {
        myDrawColor(gl,i);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,i,4);// mode, first, count
    }
}

the result is shown here http://imgur.com/a/o3HTP

0

2 antwoord

U hebt waarschijnlijk uw hoekpunten in de verkeerde volgorde in uw hoekpunt lijst (wat de fout van de export zou kunnen zijn). Dit is wat ik kreeg van mijn quads toen ik de hoekpunten op de verkeerde plaatsen had. Je zult ze tegen de klok in van buitenaf willen bouwen. Het kan ook zijn dat driehoekstrip problemen met uw hoekpunten veroorzaakt. Voor een toepassing die zo eenvoudig is, kunt u GL_QUADS proberen.

1
toegevoegd

Ik heb de code laten werken. Er waren drie problemen.

  1. DrawArrays werkt vooruit door de vertex-array. d.w.z. je trekt één element tegelijk uit de array en gaat dan naar de volgende. Je kunt niet heen en weer springen door het.
  2. Met behulp van de offsetlijst in het .xml-bestand heb ik een array gemaakt die ik kon gebruiken met glDrawElements waar het rond huppelt in de hoekpuntenlijst.
  3. U moet de niet-ondertekende tekortkoming van de offset gebruiken. Ik gebruikte een geheel getal en maakte een oplossing die niet werkte.

Hier is de resulterende code die werkt. Het probleem was van mij. Niet het .xml-bestand dat wordt geproduceerd door een schets.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorsBuffer);
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
// Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    gl.glDrawElements(GL10.GL_TRIANGLES, myoffsets.length, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer);//mode, count, type, indices
}
0
toegevoegd