Я новичок в АГАЛе, уверен это не сложно.
У меня есть вершинный и фрагментный шейдер, для простого рисования коробки с текстурой без светового эффекта, вот код:
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"
);
У меня также есть код AGAL для коробки без текстуры, только цвета и со световым эффектом, вот код для шейдеров:
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";
Вопрос в том, как мне объединить 2 кода, я хочу модель коробки с текстурной картой, чтобы показать световой эффект.
Я сделал это:
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";
но это дает мне ошибку: «Ошибка: ошибка № 3632: связь AGAL: переменная 1 читается в шейдере фрагментов, но не записывается вершинным шейдером. в flash.display3D::Program3D/upload() в Context3DExample/setupScene( ) в Context3DExample/contextCreated()"
Я уверен, что кто-то с опытом может решить это за 5 минут. Спасибо