• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: opengl  

资源简介

opengl绘制两个行星以及一个恒星,利用键盘和鼠标来进行互动,入门级的代码。

资源截图

代码片段和文件信息

#include   
#include
#include
#include
#include   

static int year = 0 day = 0 time = 0 day2 = 0 year2 = 0 time2 = 0;
/*
初始化操作
*/
void init() {
//设置清屏色  
glClearColor(0.0f 0.0f 0.0f 0.0f);
//设置着色模式,填充色与顶点一致  
glShadeModel(GL_FLAT);
}

void sun() {

glColor3f(1.0 1.0 0.0);

//复制当前矩阵并保存到栈顶  
glPushMatrix();
glRotatef((GLfloat)time 0.0f 1.0f 0.0f);
//渲染一个太阳,半径1.0f  
glutWireSphere(1.0f 20.0f 16.0f);
glPopMatrix();
}

void planet1() {
glColor3f(0.0 0.5 1.0);
glPushMatrix();
//绕y轴旋转year度,此时地球的局部坐标系统与全局坐标系统不一致,表现出公转  
glRotatef((GLfloat)year 0.0f 1.0f 0.0f);
//沿x轴方向移动2个单位长度,此时地球的局部坐标系统已经与全局的坐标系统偏移  
glTranslatef(2.0f 0.0f 0.0f);
//沿y轴旋转day度,此时地球的局部坐标系统与全局坐标系统一致,表现出自转  
glRotatef((GLfloat)day 0.0f 1.0f 0.0f);
glutWireSphere(0.2f 10.0f 8.0f);
//弹出栈顶矩阵  
glPopMatrix();
}

void planet2() {
glColor3f(1.0 0.5 1.0);
glPushMatrix();
glRotatef((GLfloat)year2 0.0f 1.0f 0.0f);

glTranslatef(4.0f 0.0f 0.0f);

glRotatef((GLfloat)day2 0.0f 1.0f 0.0f);

//绘制第二个地球,半径0.2f  
glutWireSphere(0.2f 10.0f 8.0f);
glPopMatrix();
}

/*
展示绘制效果
*/
void display() {

//清理颜色缓冲区  
glClear(GL_COLOR_BUFFER_BIT);
//设置绘制颜色  

sun();
planet1();
planet2();


//弹出栈顶矩阵  
glPopMatrix();

//交换缓冲区数据  
glutSwapBuffers();

//强制完成绘制指令  
glFlush();
}//第一个行星和恒星

 /*
 调整窗口尺寸
 */
void reshape(int width int height) {
//设置视口矩形区域,在默认情况下,视口被设置为占据打开窗口的整个像素矩形  
//glViewport(0 0 (GLsizei)width (GLsizei)height);
//之后的矩阵操作定义为投影矩阵操作  
glMatrixMode(GL_PROJECTION);
//等于是将之前矩阵变换导致变化过的栈顶矩阵重新归位,置为单位矩阵!等于是之前的矩阵变换带来的影响到此为止了!  
glLoadIdentity();

//创建一个表示对称透视视图平截头体的矩阵  
//设置眼睛睁开的角度,视景体的宽高比,近截面的距离,远截面的距离  
gluPerspective(60.0f (GLfloat)width / (GLfloat)height 1.0f 20.0f);

//之后的矩阵操作定义为模型视图矩阵操作  
glMatrix

评论

共有 条评论