Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Spiele-/Grafikprogrammierung ::  Texturen zusammenfügen!  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Chris Benoit!
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.10.2006
Beiträge: 69
Beitrag Chris Benoit! Mitglied 16:39:32 03.02.2012   Titel:              Zitieren

Ich zeige gerne mal die kompletten Sachen:

Erstmal der Code in C:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void LoadReflectionShader()
{
    GLuint v, f;
    char *vs = NULL, *fs = NULL;
    v = glCreateShader(GL_VERTEX_SHADER);
    f = glCreateShader(GL_FRAGMENT_SHADER);

    vs = textFileRead("game/Shader/Reflection.vert");
    fs = textFileRead("game/Shader/Reflection.frag");

    const char * vv = vs;
    const char * ff = fs;

    glShaderSource(v, 1, &vv,NULL);
    glShaderSource(f, 1, &ff,NULL);

    delete vs;
    delete fs;

    glCompileShader(v);
    glCompileShader(f);
    ReflectionShader = glCreateProgram();

    glAttachShader(ReflectionShader, v);
    glAttachShader(ReflectionShader, f);
    glLinkProgram(ReflectionShader);
    glUseProgram(ReflectionShader);

    Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");
    Texture2 = glGetUniformLocation(ReflectionShader, "WaterTex");
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void LoadReflectionShader()
{
GLuint v, f;
char *vs = NULL, *fs = NULL;
v = glCreateShader(GL_VERTEX_SHADER);
f = glCreateShader(GL_FRAGMENT_SHADER);

vs = textFileRead("game/Shader/Reflection.vert");
fs = textFileRead("game/Shader/Reflection.frag");

const char * vv = vs;
const char * ff = fs;

glShaderSource(v, 1, &vv,NULL);
glShaderSource(f, 1, &ff,NULL);

delete vs;
delete fs;

glCompileShader(v);
glCompileShader(f);
ReflectionShader = glCreateProgram();

glAttachShader(ReflectionShader, v);
glAttachShader(ReflectionShader, f);
glLinkProgram(ReflectionShader);
glUseProgram(ReflectionShader);

Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");
Texture2 = glGetUniformLocation(ReflectionShader, "WaterTex");
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void LoadReflectionShader()
{
    GLuint v, f;
    char *vs = NULL, *fs = NULL;
    v = glCreateShader(GL_VERTEX_SHADER);
    f = glCreateShader(GL_FRAGMENT_SHADER);

    vs = textFileRead("game/Shader/Reflection.vert");
    fs = textFileRead("game/Shader/Reflection.frag");

    const char * vv = vs;
    const char * ff = fs;

    glShaderSource(v, 1, &vv,NULL);
    glShaderSource(f, 1, &ff,NULL);

    delete vs;
    delete fs;

    glCompileShader(v);
    glCompileShader(f);
    ReflectionShader = glCreateProgram();

    glAttachShader(ReflectionShader, v);
    glAttachShader(ReflectionShader, f);
    glLinkProgram(ReflectionShader);
    glUseProgram(ReflectionShader);

    Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");
    Texture2 = glGetUniformLocation(ReflectionShader, "WaterTex");

Texture1 und 2 sind 2 globale Variablen vom Typ GLuint.

Dann natürlich noch das:
C/C++ Code:
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Reflection);
    glUniform1i(Texture1, Reflection);

    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, WaterTexture);
    glUniform1i(Texture2, WaterTexture);
C/C++ Code:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, Reflection);
glUniform1i(Texture1, Reflection);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, WaterTexture);
glUniform1i(Texture2, WaterTexture);
C/C++ Code:
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Reflection);
    glUniform1i(Texture1, Reflection);

    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, WaterTexture);
    glUniform1i(Texture2, WaterTexture);


Im Shader dann sollte ich auf beide Texturen so zugreifen können:
Code:
uniform sampler2D WaterTex;
uniform sampler2D RefTex;
Code:
uniform sampler2D WaterTex;
uniform sampler2D RefTex;
Code:
uniform sampler2D WaterTex;
uniform sampler2D RefTex;


Der Shader an sich läd ja auch sonst ohne Probleme und ich kann dort drin arbeiten, nur eben die Texturen kommen da nicht an :rolleyes:
ScottZhang
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.12.2010
Beiträge: 207
Beitrag ScottZhang Mitglied 16:52:09 03.02.2012   Titel:              Zitieren

wie oft den noch:

Wenn du GL_TEXTUREn im Shader haben willst, musst du

glUniform1i(<Deine Location>, n)

aufrufen!

_________________
If anything has been made foolproof, a better fool will be developed.
Hobby
ScottZhang
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.12.2010
Beiträge: 207
Beitrag ScottZhang Mitglied 16:55:14 03.02.2012   Titel:              Zitieren

Bsp anhand deines Codes

C/C++ Code:
Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");

...

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, Reflection);
glUniform1i(Texture1, 0);
C/C++ Code:
Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");

...

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, Reflection);
glUniform1i(Texture1, 0);
C/C++ Code:
Texture1 = glGetUniformLocation(ReflectionShader, "RefTex");

...

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, Reflection);
glUniform1i(Texture1, 0);

_________________
If anything has been made foolproof, a better fool will be developed.
Hobby
Chris Benoit!
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.10.2006
Beiträge: 69
Beitrag Chris Benoit! Mitglied 17:31:18 03.02.2012   Titel:              Zitieren

Achso! Werds probieren - danke :live:

Ok klappt alles!
Danke :)


Zuletzt bearbeitet von Chris Benoit! am 17:44:40 03.02.2012, insgesamt 1-mal bearbeitet
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 13529
Beitrag hustbaer Mitglied 19:25:21 03.02.2012   Titel:              Zitieren

ScottZhang schrieb:
wie oft den noch:

Wenn du GL_TEXTUREn im Shader haben willst, musst du

glUniform1i(<Deine Location>, n)

aufrufen!

Aaaah, jetzt hab glaub ich sogar ich es verstanden. :)
Da ist halt auch das dumme dass OGL nicht type-safe ist, weil überall und für alles einfach Integers verwendet werden.

_________________
"Let there be Licht..." http://lichttools.sourceforge.net/
Sehr cooles ASCII Spiel (leider nicht von mir): ASCII-Scramble - http://www.roskakori.at/ascii/
C/C++ Forum :: Spiele-/Grafikprogrammierung ::  Texturen zusammenfügen!  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.