javascript - WebGL,负比例法线

标签 javascript webgl

我尝试在某些模型上渲染灯光。 所有模型都有一些独特的选项(缩放、位置、旋转)。我使用所有这些选项创建一个矩阵,并更改该矩阵中的所有模型顶点。

当模型具有负比例时,我遇到了一个大问题,正常情况是相反的并且看起来不应该。

enter image description here

这是我使用的代码:

vec3.calcNormal = function( a, b, c, dest ) {
    var v1 = dest || vec3.create(), v2 = vec3.create();
    vec3.subtract( c, b, v1 );
    vec3.subtract( a, b, v2 );
    vec3.cross( v1, v2 );
    return vec3.normalize(v1);
};

// Apply matrix on vertices
size  = vertices.length;
vert  = new Array(size);
for( i=0; i<size; ++i ) {
    vert[i] = vec3.create();
    mat4.multiplyVec3(  matrix, vertices[i],  vert[i] );
}


// Generate face normals
face_normal    = new Array(faces.length);
for ( i=0, count=faces.length; i<count; ++i ) {
    face           = faces[i];
    face_normal[i] = vec3.create();

    vec3.calcNormal(
        vert[ face.vertidx[0] ],
        vert[ face.vertidx[1] ],
        vert[ face.vertidx[2] ],
        face_normal[i]
    );
}

有人知道如何解决这个问题吗? 我尝试缩小正常范围或根本不缩小,但没有成功。

修复:

// Get normal matrix
mat3.transpose( mat4.toInverseMat3(matrix), normalMat );

// Apply matrix on vertices
size  = vertices.length;
vert  = new Array(size);
for( i=0; i<size; ++i ) {
    vert[i] = vec3.create();
    mat4.multiplyVec3(  matrix, vertices[i],  vert[i] );
}


// Generate face normals
face_normal    = new Array(faces.length);
for ( i=0, count=faces.length; i<count; ++i ) {
    face           = faces[i];
    face_normal[i] = vec3.create();

    vec3.calcNormal(
        vertices[ face.vertidx[0] ],
        vertices[ face.vertidx[1] ],
        vertices[ face.vertidx[2] ],
        face_normal[i]
    );

    mat3.multiplyVec3( normalMat, face_normal[i] );
}

最佳答案

负比例值将翻转您的几何图形:demo来自 here 。如果您需要缩小它,您应该使用分数值。

关于javascript - WebGL,负比例法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298396/

相关文章:

javascript - 之前调用 jQuery 时未清除的选项

c# - UnityWebRequest WebGL 缺少 Cookie 响应 header

three.js - "uv"和其他 WebGL 变量的文档在哪里?

javascript - 即时调整形状大小

javascript - 防止Threejs透视相机出现负Y值?

javascript - 如何使用 Angular4 将参数传递到服务中

javascript - 使用 jquery 单击时将元素添加到有序列表

javascript - 为什么我的 map 函数返回 View 不起作用?

javascript - Bootstrap 网站标题中使用的图像类型

javascript - Mesh 在 three.js 中突然消失了。剪裁?