繪製模型的normal 問題

1.normal 的數據應該跟頂點對應起來.跟索引多少無關.
例如:一個正方體正常的做法是繪製24個頂點 然後36個索引,因此需要繪製24個法線

var pos =[
2,3,4,7, //下
2,3,0,1,//前
4,7,6,5,//後
7,2,1,6,//左
3,4,5,0, //右
1,0,5,6 //上
]
 var indexArray = [
            0, 1, 2, 0, 2, 3,//下
            4, 5, 6, 4, 6, 7,//前
            8, 9, 10, 8, 10, 11,//後
            12, 13, 14, 12, 14, 15,//左
            16, 17, 18, 16, 18, 19,//右
            20, 21, 22, 20, 22, 23,//上
        ];
        
        var npx = [1, 0, 0]; //+x
        var nnx = [-1, 0, 0]; //-x
        var npy = [0, 1, 0]; //y+
        var nny = [0, -1, 0]; //y-
        var npz = [0, 0, 1]; //z+
        var nnz = [0, 0, -1]; //z-
        var normals = [
            ...nnz, ...nnz, ...nnz, ...nnz, //z-
            ...nny, ...nny, ...nny, ...nny, //y-
            ...npy, ...npy, ...npy, ...npy, //y+
            ...nnx, ...nnx, ...nnx, ...nnx, //x-
            ...npx, ...npx, ...npx, ...npx, //x+  
            ...npz, ...npz, ...npz, ...npz, //z+  
        ]

如果是隻定義8個頂點的話 那麼每個頂點的法線等於 頂點所在的幾個面的法線的加權平均值.

var pos =[0,1,2,3,4,5,6,7];
var normals = [
            -1/3,-1/3,-1/3,//0 x-,y-,z- [-1,0,0,]+[0, -1, 0]+[0, 0, -1] -1,-1,-1
            -1/3,1/3,-1/3,//1 x-,y+,z- [-1, 0, 0] + [0, 1, 0]+ [0, 0, -1] -1,1,-1
            1/3,-1/3,-1/3,//2x+,y-,z- [1, 0, 0] + [0, -1, 0]+[0, 0, -1] 1,-1,-1
            1/3,1/3,-1/3,//3x+y+,z- [1, 0, 0] +[0, 1, 0]+ [0, 0, -1] 1,1,-1
            -1/3,-1/3,1/3,//4x-,y-,z+ [-1,0,0,]+[0, -1, 0]+[0, 0, 1] -1,-1,1
            -1/3,1/3,1/3,//5x-,y+,z+ [-1, 0, 0] + [0, 1, 0]+ [0, 0, 1] -1,1,1
            1/3,-1/3,1/3,//6x+,y-,z+ [1, 0, 0] + [0, -1, 0]+[0, 0, 1] 1,-1,1
            1/3,1/3,1/3,//7x+y+,z+ [1, 0, 0] +[0, 1, 0]+ [0, 0, 1] 1,1,1
        ];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章