资源简介
vc控制台程序 OpenGL太阳、地球、月亮纹理实现。
请大家多多指教。
代码片段和文件信息
#include “LoadBMP.h“
void myinit(void)
{
glClearColor (0.0 0.0 0.0 0.0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D); //启用二维纹理
GLfloat light0_ambient[] = {1 1 1 1}; //环境光
GLfloat light0_diffuse[] = {1 1 1 1}; //散射光
GLfloat light0_position[] = {0 0 0 1}; //光源位置
glLightfv(GL_LIGHT0GL_AMBIENTlight0_ambient);
glLightfv(GL_LIGHT0GL_DIFFUSElight0_diffuse);
glLightfv(GL_LIGHT0GL_POSITIONlight0_position);
LoadAllTextures(); //调入纹理
}
void myidle()
{
day+=angle;
glutPostRedisplay();
}
void mymouse(int buttonint stateint xint y)
{
if(state==GLUT_DOWN && button==GLUT_LEFT_BUTTON){
if(first)
{
glutIdleFunc(myidle);
first=!first;
}
else
{
glutIdleFunc(0);
first=!first;
}
}
}
void mykeyboard(unsigned char key int x int y)
{
if (key == 27)
exit(0);
}
void mydisplay(void)
{
year=day/365;
month=day/30;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloat mat_ambient1[] = {1001};
GLfloat mat_emission[] = {1110};
GLfloat mat_ambient2[] = {0.40.40.81};
GLfloat no_emission[] = {0001};
glPushMatrix();
glBindTexture(GL_TEXTURE_2Dsun->texID);
glRotatef (month 0.0 1.0 0.0); //太阳自转
glMaterialfv(GL_FRONT GL_AMBIENT mat_ambient1);
glMaterialfv(GL_FRONT GL_EMISSION mat_emission);
glRotatef (90 -1 0 0);
gltDrawSphere(1.0 40 40); //绘制太阳
glPopMatrix();
glPushMatrix();
glRotatef (year 0.0 1.0 0.0); //月亮与地球一起绕太阳转(地球公转)
glPushMatrix();
glBindTexture(GL_TEXTURE_2Dearth->texID);
glTranslatef (3.0 0.0 0.0);
glRotatef (month 0.0 1.0 0.0); //地球自转
glMaterialfv(GL_FRONT GL_AMBIENT mat_ambient2);
glMaterialfv(GL_FRONT GL_EMISSION no_emission);
glRotatef (90 -1 0 0);
gltDrawSphere(0.4 40 40); //绘制地球
glPopMatrix();
glPushMatrix();
glBindTexture(GL_TEXTURE_2Dmoon->texID);
glTranslatef (3.0 0.0 0.0);
glRotatef (60 -1 1 0);
glRotatef (month 0 1.0 0); //月球绕地球转
glTranslatef (0.6 0.0 0.0);
glRotatef (90 -1 0 0);
gltDrawSphere(0.07 20 20); //绘制月球
glPopMatrix();
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void myreshape (int w int h)
{
glViewport (0 0 (GLsizei) w (GLsizei) h); //指定视口大小
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0 (GLfloat) w/(GLfloat) h 1 20); //透视投影
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0 0.0 5.0 0.0 0.0 0.0 0.0 1.0 0.0); //指定照相机的位置
}
int main(int argc char** argv)
{
glutInit(&argc argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (1000 600);
glutInitWindowPosition (100 100);
glutCreateWindow (argv[0]);
myinit ();
glutDisplayFunc(mydisplay);
glutReshapeFunc(myreshape);
glutIdleFunc(myidle);
glutMouseFunc(mymou
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-04-05 19:44 太阳系模型__沈敢 计科094\
目录 0 2012-04-05 19:44 太阳系模型__沈敢 计科094\Debug\
文件 515576 2007-08-18 01:43 太阳系模型__沈敢 计科094\Debug\earth.bmp
文件 43256 2007-08-18 01:33 太阳系模型__沈敢 计科094\Debug\moon.bmp
文件 28920 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\solar.obj
文件 172856 2007-08-18 01:29 太阳系模型__沈敢 计科094\Debug\sun.bmp
文件 140288 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\vc60.idb
文件 77824 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\vc60.pdb
文件 217181 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\太阳系模型.exe
文件 259856 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\太阳系模型.ilk
文件 3709072 2012-03-19 20:53 太阳系模型__沈敢 计科094\Debug\太阳系模型.pch
文件 418816 2012-03-19 21:16 太阳系模型__沈敢 计科094\Debug\太阳系模型.pdb
文件 515576 2007-08-18 01:43 太阳系模型__沈敢 计科094\earth.bmp
文件 5489 2012-03-19 20:53 太阳系模型__沈敢 计科094\LoadBMP.h
文件 43256 2007-08-18 01:33 太阳系模型__沈敢 计科094\moon.bmp
文件 3156 2012-03-19 21:16 太阳系模型__沈敢 计科094\solar.cpp
文件 172856 2007-08-18 01:29 太阳系模型__沈敢 计科094\sun.bmp
文件 4389 2012-03-19 20:31 太阳系模型__沈敢 计科094\太阳系模型.dsp
文件 545 2012-03-19 20:21 太阳系模型__沈敢 计科094\太阳系模型.dsw
文件 50176 2012-03-19 21:16 太阳系模型__沈敢 计科094\太阳系模型.ncb
文件 48640 2012-03-19 21:16 太阳系模型__沈敢 计科094\太阳系模型.opt
文件 904 2012-03-19 21:16 太阳系模型__沈敢 计科094\太阳系模型.plg
评论
共有 条评论