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

Aktuelle Zeit: Fr Jul 18, 2025 12:27

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Vertexkoord. als Texturkoord.
BeitragVerfasst: Di Mai 13, 2008 14:00 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Hallo Leute!

Ich bemühe mich immer noch um die Implementation von Wasser mithilfe des Tutorials von Lord Horazont. Das funktionierte bisher auch ganz gut, bis ich die Wasserebenen dynamisch erstellen wollte. Im Tutorial wird die Texturenmatrix ja so eingestellt, dass als Texturkoordinaten die Vertexkoordinaten übergeben werden können. Jetzt habe ich die Vertexkoordinaten aber nicht, sondern regele alles über glTranslate, glRotate und glScale.

Muss ich die Matrixmanipulation, die ich auf die Modelview-Matrix anwende jetzt auch genauso auf die Texturenmatrix anwenden?

Jede Hilfe ist willkommen

Viele Grüße,
Rüdiger


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, du musst dann auch die Operationen, die du auf die Modelviewmatrix anwendest auch auf die Texturmatrix anwenden (soweit ich weiss auch in gleicher reihenfolge).

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 14:54 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Super, vielen Dank!
Alles funktioniert jetzt, wie ich es will.

Übrigens danke für das Tutorial :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 15:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Kannst du evtl den Shader und einen Codeschnipsel posten? Würde mich mal interessieren wie das aussieht. :D

_________________
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:
BeitragVerfasst: Di Mai 13, 2008 16:47 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Aber klar doch. Aus Performance-Gründen benutze ich aber nur eine Refraktionsmap.

Code:
  1.              
  2.               WaterManager.Process;
  3.               glActiveTexture(GL_TEXTURE0);
  4.               glMatrixMode(GL_TEXTURE);
  5.               glPushMatrix;
  6.                 glLoadIdentity;
  7.                 glTranslatef(0.5, 0.5, 0);
  8.                 glScalef(0.5, 0.5, 0);
  9.                 gluPerspective(45, RenderContext.Width/RenderContext.Height, 0.01, 100000);
  10.                 Camera.WeltRotation;
  11.                 Camera.WeltTranslation;
  12. // Manipulationen, um Objekt zu setzen.
  13.                 glTranslatef(-(Sightrange+1)*FieldSize, 0, -(Sightrange+1)*FieldSize);
  14.                 glTranslatef(i*FieldSize,0,j*FieldSize);
  15.                 glTranslatef(Position[0],Position[1],Position[2]);
  16.                 glRotatef(Rotation[0],1,0,0);
  17.                 glRotatef(Rotation[1],0,1,0);
  18.                 glRotatef(Rotation[2],0,0,1);
  19.                 glScalef(ScaleFactor,ScaleFactor,ScaleFactor);
  20.  
  21.               glEnable(GL_TEXTURE_2D);
  22.               glBindTexture(GL_TEXTURE_2D, WaterManager.Refract);
  23.  
  24.               glActiveTexture(GL_TEXTURE1);
  25.               glMatrixMode(GL_TEXTURE);
  26.               glPushMatrix;
  27.                 glLoadIdentity;
  28.                 glTranslatef(WaterManager.WaterOffset,0,0);
  29.                 glScalef(ScaleFactor,ScaleFactor,ScaleFactor);
  30.  
  31.               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  32.               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  33.               glEnable(GL_TEXTURE_2D);
  34.               glBindTexture(GL_TEXTURE_2D, WaterManager.Bumpmap);
  35.  
  36. // Manipulationen, um Objekt zu setzen.
  37.               glMatrixMode(GL_MODELVIEW);
  38.               glTranslatef(i*FieldSize,0,j*FieldSize);
  39.               glTranslatef(Position[0],Position[1],Position[2]);
  40.               glRotatef(Rotation[0],1,0,0);
  41.               glRotatef(Rotation[1],0,1,0);
  42.               glRotatef(Rotation[2],0,0,1);
  43.               glScalef(ScaleFactor,ScaleFactor,ScaleFactor);
  44.  
  45.  
  46.                 glBegin(GL_QUADS);
  47.                   glMultiTexCoord3f(GL_TEXTURE0,0,0,0);
  48.                   glMultiTexCoord2f(GL_TEXTURE1,0,0);
  49.                   glVertex3f(0,0,0);
  50.                   glMultiTexCoord3f(GL_TEXTURE0,32,0,0);
  51.                   glMultiTexCoord2f(GL_TEXTURE1,1/30,0);
  52.                   glVertex3f(32,0,0);
  53.                   glMultiTexCoord3f(GL_TEXTURE0,32,0,32);
  54.                   glMultiTexCoord2f(GL_TEXTURE1,1/30,1/30);
  55.                   glVertex3f(32,0,32);
  56.                   glMultiTexCoord3f(GL_TEXTURE0,0,0,32);
  57.                   glMultiTexCoord2f(GL_TEXTURE1,0,1/30);
  58.                   glVertex3f(0,0,32);
  59.                 glEnd();
  60.  
  61.               glActiveTexture(GL_TEXTURE1);
  62.               glDisable(GL_TEXTURE_2D);
  63.               glMatrixMode(GL_TEXTURE);
  64.               glPopMatrix;
  65.  
  66.               glActiveTexture(GL_TEXTURE0);
  67.               glDisable(GL_TEXTURE_2D);
  68.               glMatrixMode(GL_TEXTURE);
  69.               glPopMatrix;
  70.  
  71.               glMatrixMode(GL_MODELVIEW);
  72.               WaterManager.Stop;
  73.  


Der erste und der letzte Befehl aktiviert/deaktiviert den Wassershader und erhöht WaterOffset, um die Wellen zu erzeugen. Ich hoffe, so ist es auch gedacht :) Es funktioniert jedenfalls.


Viele Grüße,

Rüdiger


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 14, 2008 09:58 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Ich hatte die Shader noch vergessen:

Vertex Shader:
Code:
  1. varying mat4 texMat[2];
  2.  
  3. void main(void)
  4. {
  5.   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  6.   gl_TexCoord[0]  = gl_MultiTexCoord0;
  7.   gl_TexCoord[1]  = gl_MultiTexCoord1;
  8.   texMat[0] = gl_TextureMatrix[0];
  9.   texMat[1] = gl_TextureMatrix[1];
  10.   gl_FrontColor   = gl_Color;
  11. }


Fragment Shader:
Code:
  1. uniform sampler2D refractTex;
  2. uniform sampler2D bumpMap;
  3.  
  4. varying mat4 texMat[2];
  5.  
  6. void main(void)
  7. {
  8.   vec4 refractcoord;
  9.   vec4 offsetColor = (texture2D(bumpMap, vec2(texMat[1] * gl_TexCoord[1])) +
  10.     texture2D(bumpMap, vec2(texMat[1] * gl_TexCoord[1]) * 4.0)) / 2.0;
  11.   vec4 origOffset = offsetColor;
  12.   vec4 refractColor = vec4(1.0, 1.0, 1.0, 1.0);
  13.   vec4 blendedColor;
  14.  
  15.   offsetColor -= 0.5;
  16.   offsetColor *= 2.0;
  17.  
  18.   refractcoord = gl_TexCoord[0];
  19.   refractcoord.x += offsetColor[0];
  20.   refractcoord.z += offsetColor[1];
  21.   refractcoord = texMat[0] * refractcoord;
  22.   refractColor = texture2DProj(refractTex, refractcoord);
  23.  
  24.  
  25.   refractColor[3] = 1.0;
  26.  
  27.   blendedColor = refractColor * gl_Color;
  28.   blendedColor.a = 1.0;
  29.  
  30.   gl_FragColor = blendedColor;
  31. }


Nochmal: Alles mithilfe des Tutorials von Lord Horazont entstanden :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 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 | 15 Queries | GZIP : On ]