本帖最后由 hippig 于 2012-04-24 15:49:36 编辑

解决方案 »

  1.   

    如果不正确的话,应该是你的法线或者光源位置计算出了问题。我看了一次shader,本身没问题,只是在view空间内计算光照比较罕见,通常在world内计算。如果你要在view空间内计算的话,必须保证vertex, normal, light都在view空间。所有数据都必须在同一空间才有意义。
      

  2.   

    最好是用world坐标系的光源,顶点坐标也是,然后计算出法线,最后计算光照.
    千万不要把坐标系搞混了
      

  3.   

    你的changeSize为什么用正交变换
    为什么不用注释掉的
    //gluPerspective(60.0,h/w,1,400);
      

  4.   

    我对gl不熟悉,看你的shader本身没问题,但是必须要保证你传进去的值能满足统一坐标系的要求。
    另外,绝大部分的游戏中,都是使用world坐标系或tagent坐标系来计算光照,都必须将对象变换到相同的坐标系下。