2016-06-04 15 views
0

Hallo Ich arbeite daran, eine Space-Umgebung mit einem Schiff im Inneren zu erstellen. Aber nach der Erstellung der Skybox (keine Fehler) habe ich mein Schiff hinein, aber es hat keine Farbe. Es ist so etwas wie weiß-schwarz Here is the projectWeiß (vielleicht ungefärbt) OBJ in GLSL/C++

ich das Schiff hatte (nach dem Vorbild) mit OPENSCAD und nach mit MESHLAB ich exportiert es in .OBJ Format. Ich lade es in den Quellcode, aber er hat nicht die Textur/Farbe. Das mein Schiff in Meshlab: Ship Meshlab

Ich muss nur wissen, ich muss etwas über Farbe in den Code hinzufügen, oder es ist ein Fehler in der Eingabe. Was ist das?

Wenn Sie ich brauche den Code schreiben, aber wenn Somthing normal ist dieser Fehler mir erklären, jedenfalls bin ich ein wenig Neuling in opengl, also geduldig, danke

EDIT:

schauen Sie meine .obj Datei in Windows: SHip meshlab

Und das gleiche Projekt in ubuntu: ship meshlab ubuntu

Was ist der Unterschied?

Wie auch immer der Openscad Code:

module navicella(){ 
    $fn=100; 
    rotate([0,180,270]){ 
    union(){ 
     rotate([270,180,0]){ 
       rotate([90,0,0]) 
       cylinder(50,7,10,center=true); 

       intersection(){ 
       translate([0,-25,0])  
       sphere(10); 
       translate([0,-25,0]) 
       cube(19,center=true);  
       } 
       difference(){ 
       translate([0,35,0]) 
       cube([10,15,15],center=true);  
       translate([0,40,0])  
       sphere(13); 
       } 

       translate([5,-10,0])rotate([90,0,70]) 
       cube([35,1,15],center=true); 
       translate([-2,0,0])rotate([90,0,95]) 
       cube([50,1,10],center=true); 

       translate([0,3,6])rotate([0,-15,90]) 
       cube([40,1,20],center=true); 
       translate([0,3,-6])rotate([0,15,90]) 
       cube([40,1,20],center=true); 

       translate([0,-35,0])rotate([90,0,0]) 
       cylinder(10,5,0,center=true); 
       translate([0,20,0])rotate([0,90,0]) 
       cube([45,1,2],center=true); 
       translate([0,25,0]) rotate([90,0,0]) 
       cylinder(5,4,7,center=true); 
     }  
    } 
} 
} 
navicella(); 
+0

Enthält Ihr OBJ-Modell Normale? Sie benötigen Normalen (nicht nur Eckpunkte und Flächen), um die OBJ zu schattieren. Wie rendern Sie das OBJ? Fügen Sie den entsprechenden Code ein. – Dan

+0

Aus dem Aussehen Ihres Meshlab Screenshots scheint das Mesh ziemlich durcheinander zu sein. Schau dir nur die Rückenflosse an, die Kanten. Entweder gibt es ernsthafte Z-Kämpfe, oder das Wickeln verderbt, oder Indizes zwischen Backside und Front Side Faces gemischt. Können Sie Ihre OPENSCAD-Quellen auch posten? Das OBJ ist wahrscheinlich zu viel zum Einfügen (vernünftig), aber die SCAD-Dateien können wir zumindest versuchen zu reproduzieren. – datenwolf

+0

Ich habe den Beitrag bearbeitet. Nachschlagen – Teshtek

Antwort

4

Sieht aus wie Sie alle verwendeten Texturen vergessen haben zu deaktivieren, die nicht von Ihrem Modell verwendet werden. Das ist ein sehr häufiger Fehler (ich mache es die ganze Zeit noch heute).

Was passiert wahrscheinlich?

  1. Sie gemacht Skybox oder ein beliebiges Objekt mit Texturen

    So zum Beispiel GL_CUBE_MAP und oder GL_TEXTURE_2D aktiviert sind. Wenn Sie nun mit dem Rendern Ihres Netzes beginnen, das keine Textur enthält, sind die Texturen weiterhin aktiviert. So wird für jedes Fragment/Pixel GL immer die zuletzt eingestellte Texturkoordinate von der letzten gebundenen Textur in allen aktivierten Texturzielen abtasten und die Farbe entsprechend den Einstellungen GL kombinieren.

    Wenn Sie also keine Texturkoordinaten enthalten, wird GL den letzten Satz verwenden. Das ist normalerweise im Eckbereich, wo schwarze Grenze ist ... oder Sie sind nur in einer dunklen Region der Textur. Auch wenn Sie Texturen losbinden, bedeutet das nur, dass Sie die Standard-Textur 0 binden, die normalerweise schwarz ist.

    Zum Testen/Abhilfemaßnahme rufen Sie einfach glDisable(GL_....); für alle zuvor verwendeten Texturziele. Wenn es Ihnen hilft zu wissen, wo das Problem liegt.

    Auch wenn Ihr Objekt Texturkoordinaten enthält und die Textur nicht korrekt geladen wird (wie falscher Dateiname/Pfad), ist das Ergebnis normalerweise schwarz.

  2. Fehlende oder negative normals während mit Beleuchtung Rendering aktiviert

    Hat sieht nicht wie es, aber es könnte auch der Grund sein. Wenn Ihr Modell falsch oder nicht normals ist, führt die Berechnung der Beleuchtung zu einer falschen Beleuchtung. Wenn das Objekt immer dunkel ist, auch wenn Sie es drehen, werden die Normalen negiert (in die entgegengesetzte Richtung) und Sie sollten die Vorderseite für Beleuchtung/Material ändern oder die Normalen negieren.

    Wenn sich die Farbintensität mit der Drehung ändert, hat Ihr Objekt wahrscheinlich keine normale und wieder die zuletzt eingestellte Normale (vom vorherigen Rendering). In diesem Fall berechnen Sie entweder Normalen für das Objekt (über Kreuzprodukt) oder deaktivieren die Beleuchtung für dieses Objekt.

+0

Geben Sie mir einen Moment, den ich überprüfe, jedenfalls habe ich andere Informationen über die .obj-Datei hinzugefügt, nachschlagen. – Teshtek

+0

@Testhtek wir müssen auch die obj-datei sehen ... schau hinein in einen notepad oder sowas und finde welche linien es hat. Anfangszeichen sagen Ihnen, welche Art von Daten es ist, also sehen Sie, ob es Zeilen hat, die mit 'v',' vn', 'vt',' f' beginnen und mindestens 1 Zeile von jeder Art hier kopieren (wichtig ist, wie viele Zahlen und '/'sind pro Zeile.Wenn das Verhalten zwischen Betriebssystem ist dann kann es mit einigen anderen Einstellungen oder sogar GFX-Treiber Problem. Die Ansichten nicht wie Ihre App aus dem ersten Bild von Ihnen, so dass ich nehme an, es ist ein Werkzeug statt vielleicht mit eigenen GLSL-Code von Ihnen – Spektre

+0

@Teshtek also, wenn Sie Ihre eigenen GLSL-Shadern verwenden kopieren Sie ihre Quelle hier und fügen Sie auch Informationen über Ihre GFX-Karte und Treiber für Win und Linux (im Falle eines Treiberproblems). – Spektre