- void main(void)
- {
- vec4 a = gl_Vertex;
- a.x = a.x * 0.5;
- a.y = a.y * 0.5;
- a.z = a.z;
- gl_Position = gl_ModelViewProjectionMatrix * a;
- }
DGL https://delphigl.com/forum/ |
|
Shader - Einsteigerfrage https://delphigl.com/forum/viewtopic.php?f=20&t=7194 |
Seite 1 von 1 |
Autor: | Flips [ Fr Jan 11, 2008 16:12 ] |
Betreff des Beitrags: | Shader - Einsteigerfrage |
Hi. Ich will mir die Nutzung von Shadern aneignen, daher fang ich erstmal klein an ![]() Es tut mir echt Leid, dass ich ne so einfache Frage stellen muss, aber was stimmt an diesem Shader nicht? Am Anfang ist das Viereck, welches ich als Testobjekt rendere, ganz kurz da und dann ist es weg und kommt nicht wieder... ![]() Hier mal der Shader, ist nur ein Vertexshader. Code:
Initialisieren tu ich ihn hoffentlich richtig: Code:
Rendern tu ich ein einfaches weißes Quadrat. ich bin mir sicher, dass ihr mir helfen könnt! Danke!!!! ![]() |
Autor: | Lord Horazont [ Fr Jan 11, 2008 16:34 ] |
Betreff des Beitrags: | |
Mir ist nicht ganz klar, was die Multiplikationen da sollen... Ist das einfach nur ein Versuch, eine Transformation einzubauen oder hat das einen anderen Zweck? Ich verwende immer folgenden Standardshader als Vertexshader: Code:
das Varying vpos enthält dann die Vertexdaten, die brauche ich häufig im Fragmentshader, daher habe ich das in ein Varying gelegt. Hast du das Tutorial_glsl gelesen? Sieht zwar auf den ersten Blick wie ein Monsterteil aus, aber es lohnt sich durchaus, hat mir für den Einstieg sehr geholfen. Gruß Lord Horazont |
Autor: | Flips [ Fr Jan 11, 2008 18:17 ] |
Betreff des Beitrags: | |
Ja hab das Tutorial gelesen, wobei ich es ein wenig...zu theoretisch finde. Aber danke deinem kleinen Beispielcode hab ich jetzt immerhin mal ein wenig mehr verstanden ![]() |
Autor: | damadmax [ Fr Jan 11, 2008 18:20 ] |
Betreff des Beitrags: | |
ich tippe mal auf ein fehlendes glLoadIdentity. (aus erfahrung ![]() obwohl ich glaube dass der compiler das optimiert, so ginge das übrigens auch: Code:
|
Autor: | Flips [ Fr Jan 11, 2008 18:32 ] |
Betreff des Beitrags: | |
Nee LoadIdentity; sollte eigentlich drin sein ![]() |
Autor: | Lord Horazont [ Fr Jan 11, 2008 20:10 ] |
Betreff des Beitrags: | |
Dann schau dir mal das Tutorial_glsl2 an. Man muss sich ja im ersten nicht gleich alles durchlesen, aber es ist ein gutes nachschlagewerk. Im zweiten gehts dann eher ins praktische, man sollte dafür aber denke ich das erste zumindest angelesen haben. Gruß Lord Horazont |
Autor: | Flips [ Fr Jan 11, 2008 21:57 ] |
Betreff des Beitrags: | |
Jap hab ich schon. Zusammen genommen sind die beiden Tuts äußerst hilfreich ![]() |
Autor: | Flips [ So Jan 13, 2008 01:45 ] | |||
Betreff des Beitrags: | ||||
So, ich bin jetzt mal ein wenig weiter, habe allerdings folgendes Problem. Folgender Code: Code:
Vertex Shader: Code:
Fragment Shader: Code:
So, die Procedure rendert mir ja jetzt ohne Shader eine Mischung der zwei Texturen hin, wobei diese unten links und oben rechts rot gefärbt sind und dazwischen blau. Soweit sogut. Jetzt möchte ich mit den Shadern erreichen, dass an den roten Stellen die erste Textur ist, und an den blauen die Zweite, wobei dazwischen genau wie bei einem Farbverlauf ein Texturverlauf (sprich ne Art Blending) erfolgt. Wenn ich den obigen Fragment-Shader-Code anwende, dann ist das ganze Quadrat voll mit der ersten Textur. Wenn ich jetzt allerdings statt RGB.b einfach RGB.g nehme (grün ist nicht vorhanden), dann rendert er mir unten links und oben rechts die erste Textur hin, und dazwischen läufts ins schwarze, was ja auch vollkommen korrekt ist. Wieso funktioniert der Fragment-Shader nicht richtig und blendet bei der blauen Fläche nicht die 2. Textur ein?
|
Autor: | MatReno [ So Jan 13, 2008 10:48 ] |
Betreff des Beitrags: | |
Hi, du hast vergessen im dem Shader mitzuteilen, welche Textureinheiten du als sampler nehmen willst. Also im Code fehlt: Code:
nach "Shader.Use". Als ProgramObject musst du dein erstelltes ShaderProgramObject einsetzen. Gruß, MatReno |
Autor: | Flips [ Mo Jan 21, 2008 22:53 ] |
Betreff des Beitrags: | |
Sry, dass ich mich so spät erst wieder melde aber daran hats gelegen ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |