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

Aktuelle Zeit: Fr Jul 18, 2025 00:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 07, 2004 18:04 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Hmm *gerade den Thread mal überfligen habe*
Die GF 3 / 4 Generation (sowie die ATI 8500) unterstützen doch DX 8 - Shader also die Shader der "ersten" Generation ...
Wenn ch mir den 3D-Mark 2001 (und die Technik-Tests die darin später vorkommen) oder auch die Nature-Demo so ansehe, frage ich mich, ob diese Shader nicht doch für viele Effekte reichen ...
(Ok, ich weiß nicht, die es mit dem Displacement-Kram so aussieht, aber das Bumpmapping sollte man doch hinbekommen !?!)

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 07, 2004 22:42 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Jap das mein ich auch DJW, man kann schon viel mit Register Combiners und Texture Shader machen.
Nur gibts da keine gescheite doku für... die nvidia sources sind echt hard gecodet, bis da mal was brauchbares findest :(

Achja, für dies interessiert, ich hab mein radical3D Game Template weitergeproggt und 2 neue sachen eingebaut und paar fixes.
- Vertex Programme
- Two Sided Stencil Extension
- Viele Optimierungen
- Sonstige Fixes

Wer das schnell ma testen will: Sollte ab GeForce 1 laufen ;)
Ist aber noch nicht optimiert für GeForce 3+ oder Radeon 8500+, also für weniger passes.
Kommt aber alles noch ;)
Specular pass kommt auch noch, nur hab ich da kein plan wie ich den mit TexEnv machen kann.

Hier nen shot:
Bild

und hier das binäre release:
http://www.xenorate.com/final/development/radical3d_gametemplate_015a.zip

*Edit:

Achja, wer GTKRadiant hat der kann die original map im ordner tools\mapcompiler\r3d_shadowtest.map ändern und testen :)
Natürlich vorher mit dem mapcompiler compilieren, und in den data\worlds kopieren.


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

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Sieht recht nett aus, allerdings geht auf meiner R9700 kein Bump-Mapping, obwohl die Framerate bei dessen Aktivierung runtergeht. Und ansonsten sieht man (je nach Fenstergröße mehr oder weniger deutliche) Risse in deinen Schatten, die da eigentlich nicht sein sollten. Kanns auch sein dass du die Maussteuerung deaktiviert hast, oder wie kann man die Kamera bewegen (wenn das geht). Ein etwas aufwendigerer Raum (oder ne komplette Szene) durch die man sich bewegen kann wäre sicherlich interessanter als so eine starre Ansicht auf ein paar Säulen in einer Box.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 07, 2004 23:04 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Also in der Welt kannst dich bewegen indem du Z Drückst und mit WSAD rumfliegst.
Steht aber in der readme datei :p

Das mit Rissen ist erst seitdem ich auf Vertex Programme umgestiegen bin O_o

Ne Komplexere Scene überleg ich mir schon die ganze zeit.
Bau da auch was schon mit radiant, bisher fällt mir aba nix brauchbares ein :(

Das es auf deiner radeon nich geht, is komisch... der ARB Pfad geht ja zumindest bei mir unem kolleg.
Wir beide haben aber nvidia karten :p

Liegt dann wohl an dem vertex programm :(
Source davon ist als fxpascal tools\fxpascal\diffuse.pas.


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

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Bei mir geht das Bumpmapping auch nicht auf der Radeon 9800 pro. Bei der Vorgängerversion von der Engine funktionierte es aber ohne Probleme und es gab auch keine Risse im Schatten.
Ich habe mal zum Test die Option invariant weggelassen, aber das hat nichts gebracht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie renderst du denn eigentlich deine Szene? Wenn ich das Backface-Culling deaktiviere, sehe ich wirklich sehr viele Artifakte (weiße Pixel) an allen Objekten in der Szene, was recht störend wirkt.

Und beim "Durch-die-Szene-Fliegen" ist mir auch aufgefallen dass dein Frustum-Culling nicht korrekt ist. Denn sobald ein Objekt ausserhalb des Frustums liegt, wird auch dessen Schattenvolumen ausgeblendet, was ja nicht korrekt ist.

P.S. : Reichlich OT, aber die "Textur" im Unterordner "data\textures\test" war wohl nicht mit Absicht dabei, oder? :wink:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 12:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zitat:
P.S. : Reichlich OT, aber die "Textur" im Unterordner "data\textures\test" war wohl nicht mit Absicht dabei, oder?


Aus welchem "Spiel" sind die Texturen denn, oder selbst mit der Digitalkamera gemacht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 15:35 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hmpf, ups... :p War photo von ner guten freundin, mehr sag ich dazu nich.
Wollte mal wissen wie das bumpmapping bei fotos wirkt und hatte kein anderes photo grad da :p
Hab das Zip updatet, der test ordern ist draussen...

Hab auch mal die letzte sicherungskopie vor dem vertex program support hochgeladen, guckt mal ob die mit bump geht.
http://www.xenorate.com/final/development/radical3d_gametemplate_014a.zip

Hab da noch was festgestellt, irgendwie werden meine Tangenten und BiNormalen nicht richtig berechnet... Hab mal testweise was gebaut mit radiant... siehe shot:

Ohne Bump:
Bild

mit Bump:
Bild

Ultra merkwürdig :(

@SoS:

Also Rendervorgang sicht so aus:

Code:
  1.  
  2. Ambient Zeichnen (Schwarz)
  3.  
  4. Für jedes Punktlicht {
  5.  
  6.   Culling:  
  7.     Wenn Object BB nicht im Frustum liegt dann nächstes licht verarbeiten, sofern Frustum Culling aktiviert ist
  8.  
  9.     Wenn Camera BB nicht Object BB schneidet dann nächstes licht verarbeiten, sofern Cubig Clipping aktiviert ist
  10.  
  11.     Wenn Licht BB nicht Object BB schneidet dann  nächstes licht verarbeiten, sofern Light Cube Culling aktiviert ist
  12.        
  13.     Wenn Licht Sphere nicht im Frustum liegt dann nächstes licht verarbeiten, sofern Light Sphere Culling aktiviert ist
  14.  
  15.   Stencil Schatten Zeichnen, Carmacks Reverse:
  16.      Plane vom Aktuellem Polygon Invertieren (war in der version wo ich gestern hochgeladen habe ausgeklammert)
  17.      
  18.      Wenn eine Ray Intersects Poly mit dem Start (Licht Pos) und Ende (Camera Pos) das aktuelle Polygon schneidet wird die StencilShadowReferenceValue dekrimiert.
  19.  
  20.       // Vordere seite rendern
  21.      glCullFace(GL_BACK);
  22.      glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
  23.  
  24.       // Rück seite rendern
  25.      glCullFace(GL_FRONT);
  26.      glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);
  27.  
  28.      Die Geometrie der Schatten wird als Quad_Strip gerendert.
  29.  
  30.   Lichtintesität Zeichnen in den Alphakanal :
  31.     Bei Register Combiners support, register combiners verwenden und 2D Attenuation map auf Tex0 und Tex1 binden,
  32.     keine combiners dann nur die [b]Invertierte[/b] 2D Attenuation map auf Tex0 und Tex1 binden.
  33.  
  34.   Diffuse Bumpmapping Zeichnen in den Alpha Kanal:
  35.     Normalization Cubemap auf Tex1 binden
  36.     TexEnv auf GL_TEXTURE0_ARB, GL_DOT3_RGBA, GL_TEXTURE1_ARB);
  37.  
  38.     Normal/Bump map auf Tex0 binden
  39.     TexEnv auf GL_TEXTURE0_ARB, GL_REPLACE, GL_TEXTURE1_ARB);
  40.  
  41.   Decal/Normale Texture Zeichnen
  42. }
  43.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 16:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@Bumpmapping :
In der Version 0.14 funzt das einwandfrei (wenn auch recht langsam).

@Tangenten :
Ohne genaue Angaben wie du die denn berechnest, kann man dir da wohl schwer weiterhelfen. Also sag mal bitte genauer wie die berechnet werden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 16:48 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ok, dann liegts wohl an den Vertex Programmen :(

Hier ist der code für Tangent Space:

Code:
  1.  
  2.   TR3DTangentSpaceVertex = record
  3.     Position,
  4.     Normal,
  5.     Tangent,
  6.     Binormal : TVector;
  7.     Texcoord : TTexcoord;
  8.   end;
  9.  
  10. procedure TangentSpaceCalculate(var V1, V2, V3 : TR3DTangentSpaceVertex);
  11. var
  12.   V1_,
  13.   V2_  : TVector;
  14.   T1_,
  15.   T2_  : TTexcoord;
  16.   DDX,
  17.   DDY,
  18.   DDZ  : TVector;
  19.   dudx,
  20.   dvdx,
  21.   dudy,
  22.   dvdy,
  23.   dudz,
  24.   dvdz : Single;
  25.   Tangent,
  26.   Binormal : TVector;
  27. begin
  28.   V1_.X := V1.Position.X - V2.Position.X;
  29.   V1_.Y := V1.Position.Y - V2.Position.Y;
  30.   V1_.Z := V1.Position.Z - V2.Position.Z;
  31.   T1_.U := V1.Texcoord.U - V2.Texcoord.U;
  32.   T1_.V := V1.Texcoord.V - V2.Texcoord.V;
  33.  
  34.   V2_.X := V3.Position.X - V1.Position.X;
  35.   V2_.Y := V3.Position.Y - V1.Position.Y;
  36.   V2_.Z := V3.Position.Z - V1.Position.Z;
  37.   T2_.U := V3.Texcoord.U - V1.Texcoord.U;
  38.   T2_.V := V3.Texcoord.V - V1.Texcoord.V;
  39.  
  40.   DDX := VectorCrossProduct(Vector(V1_.X, T1_.U, T1_.V), Vector(V2_.X, T2_.U, T2_.V));
  41.   DDY := VectorCrossProduct(Vector(V1_.Y, T1_.U, T1_.V), Vector(V2_.Y, T2_.U, T2_.V));
  42.   DDZ := VectorCrossProduct(Vector(V1_.Z, T1_.U, T1_.V), Vector(V2_.Z, T2_.U, T2_.V));
  43.  
  44.   dudx := - ddx.y/ddx.x; // Hier kommt Div by zero manchma, bei geraden flächen kommt das nicht... nur bei schrägen oder so.
  45.   dvdx := - ddx.z/ddx.x;
  46.   dudy := - ddy.y/ddy.x;
  47.   dvdy := - ddy.z/ddy.x;
  48.   dudz := - ddz.y/ddz.x;
  49.   dvdz := - ddz.z/ddz.x;
  50.  
  51.   Tangent.Setup(dudx, dudy, dudz); Tangent.Normalize;
  52.   Binormal.Setup(dvdx, dvdy, dvdz); Binormal.Normalize;
  53.  
  54.   V1.Tangent.Add(Tangent);
  55.   V2.Tangent.Add(Tangent);
  56.   V3.Tangent.Add(Tangent);
  57.  
  58.   V1.Binormal.Add(Binormal);
  59.   V2.Binormal.Add(Binormal);
  60.   V3.Binormal.Add(Binormal);
  61. end;
  62.  


Diese lass ich aus jedem Polygon berechnen, wird alles im mapcompiler gemacht.
End Ergebnis is V1-V3.Tangent,BiNormal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Texturen auf den Brushes werden ja planar ausgerichtet. Das ist der einfachste Fall, denn da hat man die Tangente und die Binormale nämlich gleich direkt. Das sind dann die Normalen der beiden Ebenen an denen die Koordinanten ausgerichtet sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 08, 2004 17:52 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Jain, das Planare hab ich eigentlich deaktiviert und hab die routine von dem orig c prog genommen und portiert:
Das von orig q3 map compiler, es funzt ja auch ansonsten würden die texture coords ja falsch sein.
Die Normalen stimmen auch, hab das nachgeprüft kann diese mir ja anzeigen lassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 09, 2004 13:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Probier mal die Tangenten-Berechnung aus diesem Tutorial aus. Die nutze ich auch, und die funktioniert an sich auch mit allen Objekten. Bei Objekten die weiche Tangenten brauchen muss man dann sehen wie man das hinbiegen kann, denn wenn man da (was ja durchaus vorkommen kann) ein Vertex hat, das z.B. zwei Tangenten hat die genau in die entgegengesetzen Richtungen zeigen, kommt eine Null-Tangente bei raus. Da muss man sich halt selbst was zurechtwerkeln.

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.009s | 15 Queries | GZIP : On ]