为什么深度testing在我的代码中不能正常工作?

http://jsfiddle.net/w9WqJ/31/

旋转相机时,会显示一些应该隐藏的部分。 我应该创造更多的三角形,或者我在这里做错了什么?

你的顶点着色器有一些不好的math。 你有这个:

  float newZ = pos_.z * .5 + .5; gl_Position = vec4(pos_.x, pos_.y, -newZ * .00001, newZ); 

但是你其实只是想做这个:

  float newZ = pos_.z * .5 + .5; gl_Position = vec4(pos_.x, pos_.y, pos_.z, newZ); 

(另外,'newZ'可能是这个variables的一个不好名字;你真正计算的是'w'在同质空间中,而不是一个新的'z'坐标。

基本上,你正在修改你的z坐标,使深度缓冲区不能告诉更近或更远。

同样值得注意的是,当你进一步学习GL的东西时,你将不再用这种方式做明确的math,而是可能会开始使用mat4matrix来表示旋转和投影到同质的空间,在这一点上,你将不会有做这样的特殊math; 只需乘以matrix(es)并将结果赋给gl_Position,就完成了。

所有这些东西变得更容易,一旦你这样工作,而不是手滚自己的math! 所以坚持你正在学习的东西。 你已经非常接近达到容易的地步! 🙂