我正在使用webgl并且我的对象看起来不正确 - 它们的z长度比它应该大得多
在图片右上方的立方体是如此之长,为什么会发生? 我的MVPmatrix看起来像:
var y = Math.tan(fovy / 2);
var x = y / ratio;
var d = 1;
var out = new Mat4([
x, 0, 0, 0,
0, y, 0, 0,
0, 0, (far + near) / (far - near), d,
0, 0, -2 * (far * near) / (far - near), 0
]);
立方体着色器:
`#define MAX_POINTLIGHTS 16
attribute vec3 a_Position;
attribute vec3 a_Normal;
uniform mat4 u_MVMatrix;
uniform mat4 u_MVPMatrix;
uniform mat3 u_MVNMatrix;
uniform vec3 u_PointLights[MAX_POINTLIGHTS];
varying float v_Light;
void main(void) {
vec4 position4 = u_MVMatrix * vec4(a_Position, 1.0);
vec3 position3 = position4.xyz / position4.w;
float light = 0.0;
for (int i = 0; i < 1; i++) {
vec3 lightDir = normalize(u_PointLights[0] - position3);
vec3 normal = normalize(u_MVNMatrix * a_Normal);
light += max(dot(normal, lightDir), 0.0);
}
v_Light = min(light, 1.0);
gl_Position = u_MVPMatrix * position4;
}`,
`precision mediump float;
uniform vec4 u_DiffuseColor;
varying float v_Light;
void main(void) {
gl_FragColor = vec4(u_DiffuseColor.rgb * v_Light, u_DiffuseColor.a);
}`
我真的没有想法。我有旧的引擎,我做得很好,所以这2个项目在代码中几乎没有任何不同,但它不适用于新的。 你有什么想法吗?非常感谢!