我已经编写了几个Android应用程序,但这是我第一次接触3D编程。
我创建了一个房间(4面墙、天花板和地板),里面放置了一些物体,并且可以像步行一样移动摄像机。我使用各种图像对所有表面进行了纹理处理,一切都按预期工作。
为了情境说明,房间宽14个单位,深16个单位(以原点为中心),高3个单位(离原点1个单位以上,2个单位以下)。房间中间有两个物体,一个立方体和一个倒置的金字塔。
接着我想添加一个光源来给立方体和金字塔上色。我阅读了一些NeHe的端口并遵循了其中几个,所以我将在照明课程中工作的内容应用到我的新代码中。
结果是立方体和金字塔没有受到阴影的影响。它们在对面光线的侧面上看起来与朝向光源的侧面相同。当摄像机直接远离光源时,房间看起来就像我添加灯光代码之前一样。当我旋转摄像机面向光源时,整个房间(包括物体)变暗,直到摄像机直接面对光源时完全变黑。
这是怎么回事?我读了很多关于照明和其工作原理的文章,但我没有看到任何迹象表明为什么这不会照亮房间的所有侧面,并根据光源位置使立方体和金字塔受到阴影的影响。因为光源在“内部”,所以是否有一些预期的光行为?或者我只是因为新手而错过了一些简单的东西?
我创建了一个房间(4面墙、天花板和地板),里面放置了一些物体,并且可以像步行一样移动摄像机。我使用各种图像对所有表面进行了纹理处理,一切都按预期工作。
为了情境说明,房间宽14个单位,深16个单位(以原点为中心),高3个单位(离原点1个单位以上,2个单位以下)。房间中间有两个物体,一个立方体和一个倒置的金字塔。
接着我想添加一个光源来给立方体和金字塔上色。我阅读了一些NeHe的端口并遵循了其中几个,所以我将在照明课程中工作的内容应用到我的新代码中。
gl.glEnable(GL10.GL_LIGHTING);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, new float[] { 0.1f, 0.1f, 0.1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, new float[] { 1f, 1f, 1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] { -4f, 0.9f, 6f, 1f }, 0);
gl.glEnable(GL10.GL_LIGHT0);
结果是立方体和金字塔没有受到阴影的影响。它们在对面光线的侧面上看起来与朝向光源的侧面相同。当摄像机直接远离光源时,房间看起来就像我添加灯光代码之前一样。当我旋转摄像机面向光源时,整个房间(包括物体)变暗,直到摄像机直接面对光源时完全变黑。
这是怎么回事?我读了很多关于照明和其工作原理的文章,但我没有看到任何迹象表明为什么这不会照亮房间的所有侧面,并根据光源位置使立方体和金字塔受到阴影的影响。因为光源在“内部”,所以是否有一些预期的光行为?或者我只是因为新手而错过了一些简单的东西?