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

Aktuelle Zeit: Do Jul 17, 2025 07:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Okt 01, 2003 07:47 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

es ist möglich (und wenn wie genau) normales Diffuse Bumpmapping mitteles TexEnvf befehle zu machen ohne die Fragment Programme und Register Combiners zu benutzen ?
So das es ab GeForce1 läuft, diese hat ja die GL_DOT3_RGBA extension.

Ich hab das ganze schonmal versuch umzusetzten, leider bisher ohne wirklichen erfolg :( Es kann gut sein, das ich irgendwas vergessen habe...

aber hier mal grob wie ichs mache:

Code:
  1.  
  2. - Komplette Welt mit Umgebungsfarbe zeichnen Schwarz (0,0,0) und Blendoperation GL_ONE, GL_ZERO und Tiefentest GL_LESS
  3.  
  4. - Tiefenfunktion GL_EQUAL und Tiefenmaske aus
  5.  
  6. { Für jedes punktlicht
  7. - Lichtintensität mit (1D+2D = 3D Texture) in den Alphakanal schreiben ohne Blendoperation mit TexEnvf Alpha befehlen.
  8.  
  9. TexEnvf:
  10. SetTextureStageAlpha(GL_PREVIOUS_ARB,GL_SUBTRACT,GL_TEXTURE1_ARB); // 1D LichtTexture
  11.  
  12. SetTextureStageAlpha(GL_PRIMARY_COLOR_ARB,GL_SUBTRACT,GL_TEXTURE0_ARB); // 2D LichtTexture
  13.  
  14. - Normalization Cubemap und Bumpmap in den Alphakanal schreiben mit Blendoperation GL_DST_ALPHA, GL_ONE und TexEnvf Alpha befehlen.
  15.  
  16. TexEnvf:
  17. SetTextureStageAlpha(GL_PREVIOUS_ARB,GL_DOT3_RGB,GL_TEXTURE1_ARB); // Normal Cubemap
  18.  
  19. SetTextureStageAlpha(GL_PRIMARY_COLOR_ARB,GL_MODULATE,GL_TEXTURE0_ARB); // Bumpmap
  20.  
  21. - Diffuse Texture zeichen mit Blendoperation GL_DST_ALPHA, GL_one und glColor wert vom Licht.
  22. }
  23.  
  24. - Tiefenfunktion GL_LESS und Tiefenmaske an
  25.  


hier ist die procedure SetTextureStageAlpha:

Code:
  1.  
  2. procedure SetTextureStageAlpha(param1, op, param2 : Integer);
  3. begin
  4.   glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_EXT);
  5.   glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_ALPHA_ARB,op);
  6.  
  7.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_ALPHA_ARB,param1);
  8.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_ALPHA_ARB,GL_SRC_ALPHA);
  9.  
  10.   glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_ALPHA_ARB,param2);
  11.   glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_ALPHA_ARB,GL_SRC_ALPHA);
  12.  
  13.   glTexEnvi(GL_TEXTURE_ENV,GL_ALPHA_SCALE,1);
  14. end;
  15.  


Hier ist mal mein versuch als Exe von meiner engine:
http://www.xenorate.com/final/r3d_Template.zip[/list]

Hoffe mal jemand hat ahnung davon und kann mir helfen !

*EDIT: Könnte jemand mal von den OP`s den thread in den OGL verschieben ? Habs versehentlich in Offtop gemacht. ;D Danke,

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2003 09:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hab deinen Thread verschoben.Kann dir allerdings im Moment nicht wirklich bei deinem Problem helfen, aber schau dir mal dieses Tutorial an,welches Bumpmapping auf eine Art-und-Weise realisiert,wie es auch Karten der GeForce1-Klassen darstellen können.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2003 09:50 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Das tut kenn ich schon, aber danke fürs verschieben.
In dem tut wirds über das normale OpenGL Licht gemacht, ich hab aber PerPixel mit LichtIntensität sprich 3D Lightmap.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2003 11:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
3D-LightMap & GeForce 1? Ist dass nicht eigentlich ein wiederspruch in sich? Zumindest nicht sonderlich schnell...

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2003 11:22 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Wahhh ihr versteht mich falsch *lol*...

3D Lightmap kann auch aus 2 Texturen bestehen

ne 1D + 2D Texture... funzt wunderbar... siehe template ;)

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2003 21:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Also reines Diffuses Bumpmapping habe ich schon (allerdings ohne Lichtintensität) laufen gehabt. Das ganze aus dem Thread "Nocheinmal das Licht" zusammengetragen und ein paar Samples von ATI oder NVIDIA durchgeguckt. Da mir das aber zu eingeschränkt war, habe ich eben Vertexprogramme genutzt, anschließend auch Fragmentprogramme. Wenn ich die Datei noch habe, dann kann ich die mal hochladen. Ansonsten müsste ich die Befehle aber grob noch alle zusammenbekommen. Das ganze lief halt so ab, dass auf Texture0 die Normalmap gelegt habe, auf 1 dann die Cubemap, auf 2 die normale Texture. Dann den Lichtvektor eben per Texturkoordinate der Cubemap übergeben und per TexEnv das Dot-Product aus Texture-Unit 0 und 1 gebildet. Dann per TexEnv das ganze mit Texture-Unit 2 multipliziert. Für die Intensität musst du das ganze ja nur noch mit der entsprechenden 3D-Texture (Unit 3 dann) multiplizieren. Da du aber ja wohl nur 4 Texturunits hast, musst du das ganze dann aber wohl irgendwie aufteilen (2D auf Tex3 und 1D auf Tex4 geht ja nicht, da das 5 Units wären).
Ich habe das ganze jetzt mal schnell aus dem Kopf dargestellt. Wenn Du's so nicht hinbekommst, und bis Freitag warten kannst, dann müsste ich ne Demo hinbekommen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 02, 2003 09:06 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Also irgendwie hab ich das gefühl das ich mich falsch ausgedrückt habe,
ich hab hier im geschäft ne GeForce 256 DDR (GeForce1) diese hat nur 2 Texture Units, Vertex Program per software und GL_DOT3_RGBA und hat TexEnv Combine und kann Cubemapping.

Mein ziel ist es, bumpmapping für sämtliche karten die diese features aufweisen laufen zu lassen. Ich will keine Register Combiners benutzten da diese ja nur GeForce karten können und auch keine Fragment Programme da das nichtmal die geforce4 ti 4200 kann :(

Ich hab schon einige samples gefunden, die Dot3 Bumpmapping mit Vertex programmen machen, aber immer nur mit dem blöden opengl licht.

Und eigentlich wollte ich Vertex Programme erstmal weglassen, da ich mich damit noch nicht richtig auseinander gesetzt habe... und es geht bestimmt auch ohne.

Specular ist eigentlich so auch machbar, da bei dem specular pass die Normalization cubemap per Texture Matrix auf die camera koordinanten verschoben wird, oder seh ich da was falsch ?

Humus machts in seinem sample übrigens auch nur mit TexEnvf befehlen, zumindest bei seiner alten GameEngine. Leider hat ers damals mit 3D Texturen für die Lichtintensität gemacht :( Somit konnte ich seine blendbefehle ncih einfach übernehmen :(

Die neuen sachen sind alle wieder fragment scheisse :(
Keine frage, fragment programme sind wesentlich schneller als gegen über gewöhnlichen texenv combinern und bieten auch mehr möglichkeiten.

Aber wenn man z.b. nen Breakout klon schreibt der gut aussehen soll, aber so gut wie überall laufen muss, dann gehts halt nicht anderst...
nich jeder hat mal 300 euro über für ne neue graka ;(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 02, 2003 10:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich vermute das ist der Fehler:
Die Bumpmap und Cubemap muessten so geblendet werden:
SetTextureStageRGB(gl_texture0,gl_replace,gl_texture0)
SetTextureStageRGB(gl_previous,gl_dot3_rgba,gl_texture1)
glblendfunc(gl_dst_alpha,gl_zero)

Man kann alles was man mit Vertex Programmen machen kann auch selber ausrechnen, wenn man den Geschwindigkeitsverlust hinnehmen kann. Die Berechnung der Vektoren im Tangent Space geht nicht mit einer Matrix, weil die Matrix von der normalen Welt in den Tangent Space an jedem Vertex durch die Tangente,Binormale und Normale angegeben wird und deshalb unterschiedlich ist.


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 2 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.008s | 16 Queries | GZIP : On ]