opengl关于光照位置的疑问

谁之朱斯提提亚 2016-01-25 02:53:51
模型的中心点在原点,半径为0.5,为什么从Z轴正半轴(0,0,1)设置个光源,模型是黯淡无光的,而在负半轴(0,0,-1)设置光源,模型的颜色非常显眼,Z轴正半轴不是指向观察点吗。
结果和我想象的正好相反,我以为,从眼睛的方向打一束光,那么会看到物体,如果从背面打过来,后面的部分就照不到光(就是我看到的面)


#include <GL/freeglut.h>

void resharp(int w, int h)
{
glViewport(0, 0, w, h);
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
//glMatrixMode(GL_MODELVIEW);
//glRotatef(60.0, 0.0f, 1.0f, 0.0f);
glutSolidCube(0.5/*, 20, 16*/);
glutSwapBuffers();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500, 600);
glutCreateWindow("test");
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

GLfloat matAmbient[] = { 1.0f, 0.0f, 0.0f, 1.0f };
GLfloat matDiff[] = { 1.0f, 0.0f, 0.0f, 1.0f };
//GLfloat ambientLight[] = { 1.0f, 1.0f, 1.0f, 1.0f }; //环境光
GLfloat diffuseLight[] = { 1.0f, 1.0f, 1.0f, 1.0f }; //散射光
GLfloat lightPosition[] = { 0.0f, 0.0f,-1.0f, 0.0f }; //光源位置

//为LIGHT0设置析质
glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiff);
//现在开始调协LIGHT0
//glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight); //设置环境光分量
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); //设置散射光分量
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); //设置光源在场景中的位置

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);

glutReshapeFunc(resharp);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
...全文
144 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-25
  • 打赏
  • 举报
回复
先弄清楚是左手坐标系还是右手坐标系。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧