OpenGL-光源位置的控制
2017-07-22 16:53
246 查看
光源位置
1.视图变换:
将相机移动到准备拍摄的位置,将它对准某个方向。
2.模型变换
将准备拍摄的对象移动到场景中的指定位置。
3.光源保持静止
在使用完视图和模型变换之前设置光源的位置,init()后面,display()之前。
光源出现在视图变换之前,后面进行的变换与光源没有关系,相对于视点固定。
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
GLfloat position[] = { 0.0, 0.0, -3.0, 1.0 }; //灯泡
glLightfv (GL_LIGHT0, GL_POSITION, position);
}
4.独立的移动光源
在模型变换之后设置光源位置。
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 }; //灯泡
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();//用于隔离视图变换和模型变换
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix ();//用于隔离视图变换和模型变换
glRotated ((GLdouble) spin, 1.0, 0.0, 0.0);//旋转光源
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (0.0, 1.0, 1.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();//局部坐标系归位
glutSolidTorus (0.25, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
5.光源和对象一起移动
void display(void) //光源和对象一起移动
{
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//glPushMatrix ();
glRotated ((GLdouble) spin, 1.0, 0.0, 0.0);//旋转对象
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (0.0, 1.0, 1.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glTranslated (0.0, 0.0, 1.5);
glutSolidTorus (0.275, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
6.光源和观察点一起移动
在视图变换之前设置光源位置,(ex, ey, ez)控制观察点位置;(upx,
upy, upz)控制朝上向量的值;现在如果观察点移动位置,光源也跟着一起移动
void display(void) //光源和一起移动
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
//gluLookAt (ex, ey, ez, 0.0, 0.0, 0.0, upx, upy, upz);
gluLookAt (5.0, 0.0, move, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glutSolidTorus (0.275, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
glLightfv (GL_LIGHT0, GL_POSITION, position);
}
1.视图变换:
将相机移动到准备拍摄的位置,将它对准某个方向。
2.模型变换
将准备拍摄的对象移动到场景中的指定位置。
3.光源保持静止
在使用完视图和模型变换之前设置光源的位置,init()后面,display()之前。
光源出现在视图变换之前,后面进行的变换与光源没有关系,相对于视点固定。
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
GLfloat position[] = { 0.0, 0.0, -3.0, 1.0 }; //灯泡
glLightfv (GL_LIGHT0, GL_POSITION, position);
}
4.独立的移动光源
在模型变换之后设置光源位置。
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 }; //灯泡
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();//用于隔离视图变换和模型变换
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix ();//用于隔离视图变换和模型变换
glRotated ((GLdouble) spin, 1.0, 0.0, 0.0);//旋转光源
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (0.0, 1.0, 1.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();//局部坐标系归位
glutSolidTorus (0.25, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
5.光源和对象一起移动
void display(void) //光源和对象一起移动
{
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//glPushMatrix ();
glRotated ((GLdouble) spin, 1.0, 0.0, 0.0);//旋转对象
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (0.0, 1.0, 1.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glTranslated (0.0, 0.0, 1.5);
glutSolidTorus (0.275, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
6.光源和观察点一起移动
在视图变换之前设置光源位置,(ex, ey, ez)控制观察点位置;(upx,
upy, upz)控制朝上向量的值;现在如果观察点移动位置,光源也跟着一起移动
void display(void) //光源和一起移动
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
//gluLookAt (ex, ey, ez, 0.0, 0.0, 0.0, upx, upy, upz);
gluLookAt (5.0, 0.0, move, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glutSolidTorus (0.275, 0.85, 8, 15);
glPopMatrix ();
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
glLightfv (GL_LIGHT0, GL_POSITION, position);
}
相关文章推荐
- Win32+OpenGL计算机图形学光照阴影算法 可控制光源、光照物等位置的移动以及漫游等
- 一、OpenGL灯光位置的控制 -- 模型视图矩阵的本质
- OpenGL光源位置
- OpenGL光源位置
- 《高效学习OpenGL》 之 控制光源的位置和方向
- 排队系统拥塞控制的位置
- js 控制浏览器窗口位置,大小
- OpenGL---GLUT教程(七) GLUT高级键盘控制
- OpenGL光源的移动解释
- JavaScript弹出新窗口并控制窗口移动到指定位置的方法
- OpenGL - 算数操作符、循环语句、流程控制及函数声明
- Unity 3D 中实现对物体 位置(position) 旋转(rotation) 大小(scale) 的全面控制
- Android PopupWindow怎么合理控制弹出位置(showAtLocation)
- OpenGL---GLUT键盘控制 .
- 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
- 用javascript能控制网页窗口的大小和位置总结
- OpenGL键盘控制图形移动
- js 控制滚动条位置
- OpenGL教程翻译 第十四课 相机控制(一)
- 关于RMAN备份时,控制文件位置