Как я могу изменить нормали моей модели, чтобы она выглядела менее округлой

Мой код AGAL для создания нормалей это:

    "nrm ft1.xyz, v1.xyzn" + // renormalize normal
    "dp3 ft1, fc2.xyz, ft1.xyz n" + // directional light contribution

но я получаю очень закругленный объект, есть ли способ сгенерировать нормали так, чтобы они были более острыми по краям.

Спасибо

1 ответ

  1. Найти решение:
    Я экспортирую модель из 3DMax с моим скриптом (экспорт скрипта из http://not-so-stupid.com/ ), но выберите Sandy 3.0 format, который делает допустимым «экспорт нормальной вершины», а затем я копирую информацию из файла as, созданного скриптом. Я помещаю нормаль в новый буфер вершин и загружаю их:

    context.setVertexBufferAt( 2, normalBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
    

    затем используйте их в коде шейдеров:

            private const VERTEX_SHADER_LIGHT:String = "" +
            "m44 op, va0, vc0\n" + // pos to clipspace
            "mov v0, va1 \n" +  // copy uv
            "mov vt1.xyz, va2.xyz\n"+
            "mov vt1.w, va2.w\n"+   
            "mov v1, vt1\n"; 
    
        private const FRAGMENT_SHADER_LIGHT:String = "" +
        "tex ft0, v0, fs0 <2d,linear,nomip>\n" + // read from texture
        "nrm ft1.xyz, v1.xyz\n" + // renormalize normal v1 contains the normals created in the vertex code
        "dp3 ft1, fc2.xyz, ft1.xyz \n" + // directional light contribution
        "neg ft1, ft1 \n" + // negation because we have a vector "from" light 
        "max ft1, ft1, fc0 \n"+ // clamp to [0, dot]
    
        "mul ft1, ft1, fc3 \n"+ // contribution from light
        "mul ft1, ft1, ft0 \n"+ // contribution from light + texture
    
    
        "add oc, ft1, fc1"; // final color as surface + ambient