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

Aktuelle Zeit: Do Jul 24, 2025 05:09

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Würfel effektiver?
BeitragVerfasst: Mi Aug 04, 2004 10:32 
Offline
DGL Member

Registriert: Di Jun 22, 2004 12:13
Beiträge: 46
Wie zeichne ich einen 3D Würfel effektiver als alle 6 Quads einzeln zu zeichnen? Gibts eine Hilfsfunktion wie gluSphere?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 04, 2004 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für statische Geometrie gibt es keine bessere Optimierung als ne Displayliste oder VBOs. Allerdings wirst du bei nem Würfel wohl kaum vertexlimitert sein, sondern eher durch die Füllrate begrenzt, bzw. durch Texturenwechsel. Letzteres kann man mit DLs beschleunigen, v.a. wenn man die Seiten nach Material sortiert.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 04, 2004 10:55 
Offline
DGL Member

Registriert: Di Jun 22, 2004 12:13
Beiträge: 46
Zum Glück ist der Würfel untexturiert ;)

Dann eine damit verbundene Frage: Wenn ich ganz nah an den Würfel ranzoome, verschwindet er ziemlich schnell. Sicher liegt das daran, dass der Eckpunkt hinter die Kamera verschwindet und die ganze Kante damit verschwindet, aber kann man das umgehen, dass ich noch näher rankann? Ich finde der schneidet den Würfel etwas zu früh ab...

Dann habe ich noch ein Normalen-Problem: Irgendwie scheinen die Koordinaten der drei Eckpunkte zu klein zu sein, um damit vernünftig eine Normale zu bekommen. Ich bekomme dann einen Punkt wie 0,5 / 1,4 / 5,5*10^-18 (berechnet durch (1/10)-0.1) :shock: ). Der Würfel ist jedenfalls ziemlich grau und reflektiert kein Quäntchen Licht... Benutze ich hingegen grosse Zahlen wie 1,2,3 stimmt wieder alles, aber nicht mit den kleinen Zahlen. Das 3D-Objekt (hast Du bereits in einem anderen Thread von mir gesehen) ist hingegen korrekt beleuchtet mit meinem Normalen-Algorithmus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 04, 2004 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@Clipping :
Im Normalfall zeichnet man seine Objekte so groß wie möglich, damit man die Near-Clipping-Plane soweit wie möglich nach hinten verschieben kann, was zur Folge hat dass der Z-Puffer besser auflöst. Also mach den Würfel größer und schieb die Near-Plane weiter raus, wodurch auch nicht mehr so nah geclippt werden sollte.

@Normalen :
Du musst deine Normalen doch auch auf Einheitslänge (->normalisieren) bringen, und dann machts keinen Unterschied wie "klein" deine Vertices sind.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 04, 2004 11:22 
Offline
DGL Member

Registriert: Di Jun 22, 2004 12:13
Beiträge: 46
Normalisiert werden sie ja... komisch...

Code:
  1.  
  2. function vec_scale(const v:TVector;const scale:single):TVector;
  3. begin
  4.  result.x:=v.x*scale;
  5.  result.y:=v.y*scale;
  6.  result.z:=v.z*scale;
  7. end;
  8.  
  9. function vec_normalize(const v:TVector):TVector;
  10. var l:single;
  11. begin
  12.   l:=sqrt(sqr(v.x)+sqr(v.y)+sqr(v.z));
  13.   vec_normalize:=vec_scale(v,1/l);
  14. end;
  15.  
  16. procedure calcNormals(ax:Single;ay:Single;az:Single;bx:Single;by:Single;bz:Single;cx:Single;cy:Single;cz:Single);
  17. begin
  18.   //Vektoren bilden
  19.   v1.x:=bx-ax; v1.y:=by-ay; v1.z:=bz-az;
  20.   v2.x:=cx-ax; v2.y:=cy-ay; v2.z:=cz-az;
  21.   //Kreuz-Produkt
  22.   nv.x:=(v1.y*v2.z)-(v1.z*v2.y);
  23.   nv.y:=(v1.z*v2.x)-(v1.x*v2.z);
  24.   nv.z:=(v1.x*v2.y)-(v1.y*v2.x);
  25.   //Normieren
  26.   vec_normalize(nv);
  27. end;
  28.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 07, 2004 10:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Deine vec_normalize Routine ist eine Funktion und liefert den Einheitsvektor als Ergebnis zurück, ohne einen Referenzparameter zu ändern (du hast den ja sogar als const deklariert). Der Aufruf muss lauten:
Code:
  1.  
  2.   //Normieren
  3.   nv := vec_normalize(nv);
  4.  

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 10, 2004 09:17 
Offline
DGL Member

Registriert: Di Jun 22, 2004 12:13
Beiträge: 46
So, wieder da. Na super, das löst natürlich gleich 2 Probleme *freu* Einmal diesen Thread und mein anderer "Lighting" Thread. Jetzt sieht das normale Modell auch super aus :) Danke für den Tip :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.020s | 17 Queries | GZIP : On ]