Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:22

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Falsche Normlen?
BeitragVerfasst: Mo Apr 04, 2011 08:27 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Hallöchen,

irgendwie gefällt mir die Darstellung meiner Modelle noch nicht wirklich. Ich erstelle und exportiere diese in 3DS mit Cinema4D. Dort sehen die bereits triangulierten Modelle noch super aus. Doch in meiner Szene mit Beleuchtung kann ich die Triangles wieder erkennen... siehe Screenshots. Ich nutze gl3ds zum Rendern der Modelle..

Woran kann das Liegen?

Grüße
Thomas


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Mo Apr 04, 2011 18:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
gl3DS?

Wie alt ist das File? noeska hat seine Lib schon vor einiger Zeit in glModel umbenannt. Bist du auf dem aktuellen Stand?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Mo Apr 04, 2011 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Den Kampf habe ich gegen C4D gewonnen:

C4D hat gewisse Probleme mit Vertex-Normalen umzugehen.
Ich nutze von spanki das addNormals Plugin um die Normalen explizit zu erzeugen.
Allerdings exportiere ich die Modelle als obj mit Riptide vom selben Autor.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Mo Aug 08, 2011 18:30 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ich muss das hier leider nochmal aufrollen,
also das Problem liegt nicht an C4D, da normalen im 3DS Format nicht exportiert werden. Die Lib von Noeska berechnet die Normalen erst und genau da scheint das problem zu liegen..

Hier mal der Code:
Code:
  1.  
  2.     for m := 0 to FNumMeshes - 1 do
  3.     begin
  4.       if FMesh[m].FNumIndices > 0 then
  5.       begin
  6.         SetLength(FMesh[m].FVnormal, FMesh[m].FNumVertex);
  7.         SetLength(FMesh[m].FNormalIndices, FMesh[m].FNumIndices);
  8.         f := 0;
  9.         while f < FMesh[m].FNumIndices - 3 do // go through all vertexes and
  10.         begin
  11.          vertexn := CalcNormalVector(FMesh[m].FVertex[FMesh[m].FIndices[f]],
  12.           FMesh[m].FVertex[FMesh[m].FIndices[f + 1]], FMesh[m].FVertex[FMesh[m].FIndices[f + 2]]);
  13.  
  14.             FMesh[m].FNormalIndices[f] := FMesh[m].FIndices[f];
  15.             FMesh[m].FNormalIndices[f + 1] := FMesh[m].FIndices[f + 1];
  16.             FMesh[m].FNormalIndices[f + 2] := FMesh[m].FIndices[f + 2];
  17.  
  18.             FMesh[m].FVnormal[FMesh[m].FIndices[f]] := vertexn;
  19.             FMesh[m].FVnormal[FMesh[m].FIndices[f + 1]] := vertexn;
  20.             FMesh[m].FVnormal[FMesh[m].FIndices[f + 2]] := vertexn;
  21.  
  22.  
  23.           f := f + 3;
  24.         end;
  25.       end;
  26.     end;
  27.  


Anbei mal ein Beispiel. 3 Seiten eines Würfels sind immer korrekt, aber der rest ist falsch.. Woran könnts liegen?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Mo Aug 08, 2011 21:16 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Das Problem ist wohl, dass für einen Vertex immer nur die Normale des letzten Triangles genommen wird. Besser währe es, wenn man die Normalen addiert und danach normiert. Außerdem sollte man vor dem Addieren die Normale eines Dreiecks mit dem Winkel an den jeweiligen Eckpunkten skalieren. Dadurch wiegen Normalen bei stumpfen Winkeln mehr als bei Spitzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Di Aug 09, 2011 08:12 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
das komische ist auch, wenn ich mir einen Würfel in Sketchup exportiere stimmen die Normalen, doch von Cinema4d un 3dmax nicht...
Anscheind streiten sich die Geister wie mann Normalen berechnet?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Di Aug 09, 2011 19:16 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Wenn möglich kannst du ja versuchen die Normalen dir als Pfeile anzeigen zu lassen, indem du beispielsweise eine Linie von dem Ursprung der Normale zu dem Punkt zu dem die Normale zeigt (Ursprungsvektor+1*Richtungsvektor).

Vielleicht wirst du aus dem Ergebnis ja etwas schlauer. :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Falsche Normlen?
BeitragVerfasst: Mi Aug 10, 2011 08:11 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also ich bin dem problem jetzt auf die schliche gekommen ;) Habe auch das Normaldebugging mit dem Geometryshader implementiert.

Das liegt daran das Cinemar4D und auch 3DMax die Modelle teilweise beim 3ds export optimiert. Also ein normaler Würfel besteht bei C4D z.b. nur aus 20 :!: Punkten und bei 3Dmax nur aus 8 Punkten (was ja optimal ist). Aber die Normal Berechnung von Noeska funktioniert nur wenn das modell aus einzelflächen besteht. So fehlen z.b. beim C4D Würfel die letzten Normalen des Würfels, dann siehts so aus.. So bekam ich am ende von verschiedenen Programmen (C4D, Max, Sketchup) verschiedene resultate. Lediglich Sketchup exportiert alle einzelflächen.

Gelöst hab ich das jetzt so, das ich für jedes Face 3 neue Vertieces an gelegt habe. Somit hab ich jetzt egal von welchem Program, egal wieviel Faces sich einen Punkt teilen immer bei einem Würfel 36 Punkte. Und siehe da die Normalen werden immer korrekt berechnet.

Vielleicht war das jetzt nicht die eleganteste Lösung aber es funktioniert und auch die Perf. hat sich nicht geändert.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]