资源简介
在太阳系程序的基础上添加光照效果
- 宇宙中加一盏泛光
- 太阳自发光
- 太阳系中加一艘飞碟,飞碟沿着椭圆轨道绕地球或太阳运行,其上有一个spot light始终照耀着地球
程序为博主个人独自编写,切勿用于商用
代码片段和文件信息
#include
#include
#include
#include
/*变量设置*/
const GLfloat windowWidth = 700.0f;//初始窗口宽
const GLfloat windowHeight = 500.0f;//初始窗口高
const GLfloat pi = 3.1415926;
GLfloat distance = -3.6f;
GLfloat sunTheta = 0.0f;//太阳旋转角度
GLfloat earthTheta = 0.0f;//地球旋转角度
GLfloat monthTheta = 0.0f;//月球旋转角度
GLfloat dSunToEarth = 2.5f;//太阳到地球
GLfloat dEarthToMonth = 0.35f;//地球到月亮
GLfloat sunR = 0.6f;//太阳半径
GLfloat earthR = 0.15f;//地球半径
GLfloat monthR = 0.08f;//月亮半径
GLsizei n = 7200;//线段绘制次数
GLfloat sunEarthFai = 10.0f;//控制日地轨道倾斜
GLfloat earthMonthFai = -20.0f;//控制地月轨道倾斜
GLfloat a = 1.0f;//椭圆长半轴
GLfloat b = 0.35f;//椭圆短半轴
GLfloat t = 0.0f;//卫星旋转角度
GLfloat sateX = a * cos(t * pi);
GLfloat sateZ = b * sin(t * pi);
GLfloat sateR = 0.05f;//卫星半径
//视点位置
GLfloat x = 0;
GLfloat y = 0.3;
GLfloat z = 2.0;
//方向光照参数
GLfloat vLit0Position[4] = { 0100.0f };//位置
GLfloat vLit0Ambient[4] = { 0.2f0.2f0.2f1.0f };//环境光
GLfloat vLit0Diffuse[4] = { 0.8f0.8f0.8f1.0f };//漫射光
GLfloat vLit0Specluar[4] = { 0.5f0.5f0.5f1.0f };//强光
//聚光灯光照参数
GLfloat vSpotPosition[4] = { sateX 0.0fsateZ1.0f };//位置——始终为卫星的位置
GLfloat vSpotDirection[3] = {-sateX 0.0f -sateZ };//方向——始终从卫星射向地球
GLfloat spotExp = 1.0f;//衰减系数
GLfloat spotCutoff = 15.0f;//聚光灯的光锥的发散角度
GLfloat vEmission[4] = { 0.80.50.01.0 }; //材质的发射光颜色
GLfloat vEmission2[4] = { 0.00.00.11.0 }; //材质的发射光颜色2
/*用户函数*/
void myInit();//初始化函数
/*回调函数*/
void display(void);//绘制函数
void myReshape(GLsizei wGLsizei h);
void myTimeFunc(int value);//定时器回调函数
void processNormalKeys(unsigned char key int x int y);//响应键盘输入,从而设定物体移近移远以及旋转的回调函数
int main(int argcchar * argv[])
{
glutInit(&argc argv);
/*1-设置显示模式*/
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
/*2-初始化窗口*/
glutInitWindowSize(windowWidthwindowHeight);
glutInitWindowPosition(100100);
/*3-创建窗口*/
glutCreateWindow(“LightSunEarthMonth“);
/*4-设置一系列回调函数*/
myInit();
glutKeyboardFunc(processNormalKeys);//键盘响应
glutTimerFunc(10myTimeFunc0);//使物体运动
glutReshapeFunc(myReshape);//窗口变化响应
glutDisplayFunc(display);
glutIdleFunc(display);
/*5-启动主循环*/
glutMainLoop();
return 0;
}
void display()
{
//设置清除屏幕的颜色,并清除屏幕和深度缓冲
glClearColor(0.0f 0.0f 0.0f 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gluLookAt(x y z 0 0 0 0 1.0 0);//改变视点,便于观察
//设置成模型矩阵模式
glMatrixMode(GL_MODELVIEW);
/***************绘图*******************/
//载入单位化矩阵
glLoadIdentity();
glTranslatef(0 0 distance);//后推distance距离,方便显示
/*太阳*/
glRotatef(sunEarthFai 0 0 1);//日地轨道倾斜
/*日地轨道线——轨道线要先画,如果在太阳自转之后画,则会让轨道线也发生旋转,光照打在旋转的轨道线上,会发生变色,另外可使用Disable关闭光照对其的效果*/
glDisable(GL_LIGHTING);//轨道线不受光照影响
glBegin(GL_LINE_LOOP);
glColor4f(0.0f 1.0f 1.0f 0.0f);
for (int i = 0; i < n; i++)
{
glVertex3f(dSunToEarth * cos(2 * pi * i / n) 0.0f dSunToEarth * sin(2 * pi * i / n));//定义顶点
}
glEnd();
glFlush();
glEnable(GL_LIGHTING);//开启
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-05-12 19:44 作业5-光照太阳系\
文件 2056581 2020-03-24 16:21 作业5-光照太阳系\LightSunEarthMonth.gif
文件 81 2020-03-24 16:32 作业5-光照太阳系\README.md
文件 491659 2020-03-24 16:34 作业5-光照太阳系\作业5-光照太阳系.pdf
目录 0 2020-03-24 16:31 作业5-光照太阳系\作业5-程序\
文件 7018 2020-03-24 16:14 作业5-光照太阳系\作业5-程序\main.cpp
文件 68608 2020-03-24 16:14 作业5-光照太阳系\作业5-程序\MyTask05-LightSunEarthMonth.exe
文件 1473 2020-03-23 15:47 作业5-光照太阳系\作业5-程序\MyTask05-LightSunEarthMonth.sln
文件 6676 2020-03-23 16:02 作业5-光照太阳系\作业5-程序\MyTask05-LightSunEarthMonth.vcxproj
文件 949 2020-03-23 16:02 作业5-光照太阳系\作业5-程序\MyTask05-LightSunEarthMonth.vcxproj.filters
文件 168 2020-03-23 15:47 作业5-光照太阳系\作业5-程序\MyTask05-LightSunEarthMonth.vcxproj.user
相关资源
- Gerber文件的编辑程序
- VS2012OpenGL配置所需要的全部libdllh文件
- 编译好的json_lib.lib 包含64位,32位,头
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- 招商银行信用卡中心2018春招IT笔试数
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- FFmpeg和SDL,读内存中的视频流,进行
- opengl——爆炸
- 是男人就下一百层
- vs2010 ffmpeg实时解码h264码流
- 图片-视频互换程序
- OpenGL三维地形建模
- linux系统的二级文件系统(QT实现了简
- 设计一个用于人事管理的“人员”类
- 基于ffmpeg将avi视频转换为mp4视频
- opengl游戏编程徐明亮版(含源码)
- Qt实现的简单的中国象棋程序
- 数据加密与数字签名系统
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- Kinect手势代替鼠标控制PC
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- 物业费管理系统源码超详细注释附文
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- 长整数的代数计算 算法
- 二进制方式打包和解包文件
- 个人银行账户管理系统
评论
共有 条评论