Ich bin ein Anfänger in AGAL, ich bin mir sicher, dass das nicht kompliziert ist.Stage3D Error # 3632: AGAL-Verknüpfung: Variable 1 wird im Fragment-Shader gelesen, aber nicht vom Vertex-Shader geschrieben
ich einen Vertex und Fragment-Shader haben, um einfach eine Box mit einer Textur ohne Lichteffekt zeichnen, hier ist der Code:
vertexAssembly.assemble(Context3DProgramType.VERTEX,
"m44 op, va0, vc0\n" + // pos to clipspace
"mov v0, va1" // copy uv
);
fragmentAssembly.assemble(Context3DProgramType.FRAGMENT,
"tex ft1, v0, fs0 <2d,linear,nomip>\n" +
"mov oc, ft1"
);
Ich habe auch AGAL Code für eine Box ohne Textur, gerade Farbe und mit Lichteffekt, hier ist der Code für die Shadern:
private const VERTEX_SHADER_LIGHT:String =
"mov vt0, va0\n"+
"m44 op, vt0, vc0\n"+
"nrm vt1.xyz, va0.xyz\n"+
"mov vt1.w, va0.w\n"+
"mov v1, vt1\n" +
"mov v2, va1"
private const FRAGMENT_SHADER_LIGHT:String =
"dp3 ft1, fc2, v1 \n"+
"neg ft1, ft1 \n"+
"max ft1, ft1, fc0 \n"+
"mul ft2, fc4, ft1 \n"+
"mul ft2, ft2, fc3 \n"+
"add oc, ft2, fc1";
Frage ist, wie ich den 2-Codes kombinieren, mag ich ein Box-Modell mit Textur-map, mit Lichteffekt zu zeigen.
Ich habe diese:
private const VERTEX_SHADER_LIGHT:String =
"m44 op, va0, vc0\n" + // pos to clipspace
"mov v0, va1" // copy uv
//"mov vt0, va0\n"+
//"m44 op, vt0, vc0\n"+
"nrm vt1.xyz, va0.xyz\n"+
"mov vt1.w, va0.w\n"+
"mov v1, vt1\n" +
"mov v2, va1"
private const FRAGMENT_SHADER_LIGHT:String =
"tex ft1, v0, fs0 <2d,linear,nomip>\n" +
"mov oc, ft1 \n" +
"dp3 ft1, fc2, v1 \n"+
"neg ft1, ft1 \n"+
"max ft1, ft1, fc0 \n"+
"mul ft2, fc4, ft1 \n"+
"mul ft2, ft2, fc3 \n"+
"add oc, ft2, fc1";
aber es gibt mir eine Fehlermeldung: „Fehler: Error # 3632: AGAL Verknüpfung: 1 Variation in den Fragment-Shader gelesen, aber nicht geschrieben durch die Vertex-Shader. bei flash.display3D :: Program3D/upload() bei Context3DExample/setupScene() bei Context3DExample/Context()“
ich bin sicher, dass jemand mit experiance dies in 5 Minuten lösen kann. Dank
Danke, jetzt bekomme ich die Fehlermeldung nicht und es funktioniert, ich sehe den Lichteffekt, aber ich bekomme nicht die Textur-Karte, irgendwie eine Farbe überschreibt die Textur. Wenn ich einen Teil des Codes entferne und nur die ersten 2 Zeilen des Codes belasse: \t "tex ft1, v0, fs0 <2d, linear, nomip> \ n" + \t \t \t "mov oc, ft1"; Ich sehe die Textur wieder, aber der Lichteffekt ist weg, was soll ich tun? –
Ich habe im Flash seit Ewigkeiten nicht programmiert, so erinnere ich mich nicht 100%. Versuchen Sie diese '' 'privaten const FRAGMENT_SHADER_LIGHT: String = " tex ft0, v0, fs0 <2d, linear, nomip> \ n "+ " dp3 ft1, fc2, v1 \ n "+ " neg ft1, ft1 \ n „+ "max FT1, FT1, FC0 \ n" + "mul FT2, FC4, FT1 \ n" + "mul FT2, FT2, FC3 \ n" + "add ft3, FT2, fc1 \ n" + "mul oc, ft0, ft3"; '' 'Aber ich sehe andere Probleme, zum Beispiel normal sollte im Pixelshader renormiert werden. – nikitablack
Ich habe Ihren Code verwendet, aber das Ergebnis ist das gleiche, könnte das wegen der Normalen Problem sein?denn wenn ich nur die 2 Zeilen Code verwende "tex ft1, v0, fs0 <2d, linear, nomip> \ n" + "mov oc, ft1"; Ich sehe die Textur, ich denke, Normalen sind ein weiteres Problem, sie bestimmen, ob das Modell glatt aussieht oder nicht. –