Licht/Schatten in 3d/ES

Previous topic - Next topic

Kitty Hello

"when it's done" XD

WPShadow

Perfekt! Den Zeitpunkt markiere ich mir im Kalender!  :booze:
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

bigsofty

Maybe this suggestion, which I would still like, would help...

http://www.glbasic.com/forum/index.php?topic=1165.msg31677#msg31677
Cheers,

Ian.

"It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration."
(E. W. Dijkstra)

kanonet

Ich bringe mal meine Liste hier auf den neuesten Stand (V10.054):
Quote from: kanonet on 2011-Jun-09Damit bleiben auf meiner Bugliste der Schattenengine nur noch:
1. Schatten+Nebel --> kann wohl nicht ohne weiteres behoben werden und ist mir nicht wichtig
2. Übergang von Licht zu Schattenseite eines Objekts ist zu schlagartig (siehe meinen letzten Post) --> kein Bug, sondern so gewollt? Ein flüssigerer Übergang wäre aber viel ansehnlicher.
3. Skalierung geht immer noch nicht, weder mit X_SCALEMODEL, noch mit X_SCALING --> behoben für X_SCALING aber X_SCALEMODEL funktioniert immer noch nicht richtig (siehe Beispiel im letzten Post
Außerdem aufgefallen, (wenn auch nicht in 3D):
4. Drücken von ESC beendet Programm sofort, egal was gerade gemacht wird. Sollte es nicht Aufgabe des Programmierers sein eine entschprechende Abbruchbedingung+Beendungsroutine zu schreiben?

Ich weiß, man soll nicht übermütig werden, aber ich würde mir da ein 3D-Feature wünschen:
Ich hätte gern eine Analogie zum Befehl X_GETMATRIX, einen Befehl z.B. X_SETMATRIX(bzw. X_SETFACE), der es ermöglicht ein Modell komplett zu manipulieren. Ich hoffe das dies deutlich schnell wäre als das Modell mit X_OBJ neu zu erstellen. (Ist das dasselbe worauf bigsofty schon hingewiesen hat?)

Grüße.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

backslider

Hi kanonet,

also zu deinem Punkt
Quote4. Drücken von ESC beendet Programm sofort, egal was gerade gemacht wird. Sollte es nicht Aufgabe des Programmierers sein eine entschprechende Abbruchbedingung+Beendungsroutine zu schreiben?

Nutze folgenden Code, damit dein Wunsch in Erfüllung geht :)
Code (glbasic) Select

ALLOWESCAPE FALSE //in der Initialisierung

WHILE TRUE
    checkEscape()
SHOWSCREEN
WEND

//checke, ob Escape gedrückt wurde. Wenn ja, dann beende oder mach vorher noch was
FUNCTION checkEscape:
    IF KEY(1) THEN END
ENDFUNCTION

kanonet

Hi backslider,

du hast den Punkt meines Einwands nicht ganz gefasst, mir geht es darum, dass die Schleife
Code (glbasic) Select
WHILE TRUE
SHOWSCREEN
WEND
endlos laufen sollte, auch wenn ESC gedrückt wird. Dies ist jedoch nicht der Fall, ESC unterbricht die Schleife einfach und beendet das Programm, obwohl keine Abbruchbedingung geschrieben wurde. Übrigens scheint der Übeltäter SHOWSCREEN zu sein, denn ohne diesen Befehl wird die Schleife nicht unterbrochen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

backslider

Das ist schon richtig was du sagst, allerdings kannst du genau dieses "Problem" mit
Code (glbasic) Select
ALLOWESCAPE FALSE
ausschalten. :)

kanonet

Oh da hast du Recht. Wurde das irgendwann geändert? Ich bin mir sicher, dass das noch nicht so geregelt war, als ich mit GLB begonnen habe (V7). Ok, damit kann 4. wieder aus meiner Liste gelöscht werden. Es sollte aber eventuell auch auf den Hilfeseiten der Schleifen erwähnt werden...
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

backslider

Hm, also ich glaube das war schon immer so. Ich kenne es auf jeden Fall nicht anders und in Version 7 war es zu 99,9% auch schon so. :)

kanonet

Nach langer Zeit mal wieder eine aktualisierte Bugliste 3D:
  • Übergang von Licht- zu Schattenseite eines Objekts ist zu schlagartig. Sollte besser per Pixel erfolgen und nicht per Vertex.
  • X_SCALEMODEL funktioniert nicht. Die Größe des Schattens ändert sich zwar wie erwartet, jedoch bleibt das Objekt selbst unverändert.
  • Beleuchtung einer Fläche ändert sich, wenn sich der Winkel zwischen Fläche und Kamera ändert. Es sollte jedoch ausschließlich der Winkel zwischen Lichtquelle und Fläche einfließen. Tritt nur auf, bei ausreichend hellem X_AMBIENT_LT!
  • Wird eine Fläche, über der sich eine Lichtquelle befindet, kleiner skaliert (ca. ab Skalierungsfaktor <0.5), dann wird sie nicht beleuchtet (z.B. immer weiß gezeichnet auch wenn farbiges Licht verwendet wird). Der Bug #3 tritt jedoch trotzdem auf! Tritt nur auf, bei ausreichend hellem X_AMBIENT_LT!
  • Bump-mapping funktioniert nicht auf Intel Grafikkarten.
  • Schatten ignorieren Nebel. Kann wohl nicht ohne weiteres behoben werden und ist mir nicht wichtig. Ich empfehle Schatten ab einer gewissen Nebeldichte nicht mehr zu zeichnen (bring möglicherweise sogar Geschwindigkeitszuwachs?)
  • Eine Lichtquelle mit Öffnungswinkel <360 wirft trotzdem Schatten in alle Richtungen (Öffnungswinkel wird bei X_SPOT_LT -3 ignoriert). Würde man Schatten von Objekten nicht zeichnen, die außerhalb des Öffnungswinkels liegen, könnte dies eventuell die Geschwindigkeit verbessern?
  • X_DOT und X_LINE habe maximale Größen, die jedoch auf verschiedenen Grafikkarten unterschiedlich liegen (z.B. bei mir: Intel zeichnet X_DOTs nur mit Größen bis 10, Nvidia bis 65).

Punkte 6-8 sind mir nicht sonderlich wichtig, ich wollte sie nur mal erwähnt haben.
Alle Fehler sollten mit dem Code in diesem Thread ohne zu große Modifizierungen nachvollziehbar sein.

Außerdem wünsche ich mir weiterhin eine Möglichkeit Verices eines Objekts zu manipulieren und Per-Pixel-Lightning (besonders für große Objekt, bzw nahe Lichtquellen wichtig).

Gernot, sollte etwas unklar formuliert sein, oder kannst du etwas nicht reproduzieren: ich werde die nächsten Tage wieder ab und zu im Chat sein, dort können wir das am besten klären. Antwort hier ist natürlich genauso gut.

Grüße,
Kanonet
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64