每天一个OpenGL程序 第六篇 图形的组合绘制
2013-08-26 09:42
363 查看
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
#include <math.h>
// 练习6.1 基本图形的组合绘制
void render();
void initGL();
void main(int argc,char** argv)
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowPosition(100,150);
glutInitWindowSize(320,320);
glutCreateWindow("模拟时钟");
glutDisplayFunc(render);
glutIdleFunc(render);
initGL();
glutMainLoop();
}
void initGL()
{
glViewport(0,0,320,320);
glOrtho(-100,100,-100,100,-100,100);
glClearColor(0,0,0,1);
}
//根据长度创建表针
void createClockPointer(float size)
{
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(size,0);
glEnd();
}
GLfloat hR = 20; //时针长度
GLfloat mR = 30; //分针长度
GLfloat sR = 45; //秒针长度
GLfloat cR = 57; //表盘半径
GLfloat doublePI = 2 * 3.1415936; //2π
GLfloat step = doublePI/24; //绘制圆形的角度切分
GLfloat Hstep = doublePI/12; //小时刻度的角度切分
GLfloat Sstep = doublePI/60; //分秒刻度的角度切分
GLfloat Sangle; //秒针旋转的角度
GLfloat Mangle; //分针旋转的角度
GLfloat Hangle; //时针旋转的角度
void render()
{
glClear(GL_COLOR_BUFFER_BIT);
//绘制外盘
glBegin(GL_POLYGON);
for (GLfloat angle = 0.0; angle < doublePI + step; angle += step)
{
glColor3f(0.6f,0.4f,0.12f);
GLfloat y = cR * sin(angle);
GLfloat x = cR * cos(angle);
glVertex2f(x,y);
}
glEnd();
//绘制内盘
glBegin(GL_POLYGON);
for (angle = 0.0; angle < doublePI + step; angle += step)
{
glColor3f(0,0,0);
GLfloat y = (cR-2) * sin(angle);
GLfloat x = (cR-2) * cos(angle);
glVertex2f(x,y);
}
glEnd();
//绘制秒针刻度
glBegin(GL_LINES);
for (angle = 0.0; angle < doublePI + Sstep; angle += Sstep)
{
glColor3f(0.6f,0.4f,0.12f);
GLfloat y = (cR-2) * sin(angle);
GLfloat x = (cR-2) * cos(angle);
GLfloat y2 = (cR-4) * sin(angle);
GLfloat x2 = (cR-4) * cos(angle);
glVertex2f(x2,y2);
glVertex2f(x,y);
}
glEnd();
//绘制刻度
glBegin(GL_LINES);
for (angle = 0.0; angle < doublePI + Hstep; angle += Hstep)
{
glColor3f(0.6f,0.4f,0.12f);
GLfloat y = (cR-4) * sin(angle);
GLfloat x = (cR-4) * cos(angle);
GLfloat y2 = (cR-7) * sin(angle);
GLfloat x2 = (cR-7) * cos(angle);
glVertex2f(x2,y2);
glVertex2f(x,y);
}
glEnd();
//绘制秒针
glPushMatrix();
glRotatef(Sangle,0,0,1);
glColor3f(1.0f,0.0f,0.0f);
createClockPointer(sR);
glPopMatrix();
//绘制分针
glPushMatrix();
glRotatef(Mangle,0,0,1);
glColor3f(0.0f,1.0f,0.0f);
createClockPointer(mR);
glPopMatrix();
//绘制时针
glPushMatrix();
glRotatef(Hangle,0,0,1);
glColor3f(0.0f,0.0f,1.0f);
createClockPointer(hR);
glPopMatrix();
glutSwapBuffers();
glFlush();
Sangle -= 1.8;
Mangle -= 0.3;
Hangle -= 0.05;
}
相关文章推荐
- 每天一个OpenGL程序 第四篇 三角形的绘制
- 每天一个OpenGL程序 第五篇 四边形的绘制
- 每天一个OpenGL程序 第二篇 点的绘制
- 每天一个OpenGL程序 第三篇 线的绘制
- OpenGL(一)二维图形的绘制:一个简单的绘制矩形程序
- 编写一个基于OpenGL的程序,绘制一个三角形,并分别绘制这个三角形经旋转、平移、缩放后的结果
- 第二个程序opengl绘制图形
- 每天学习一算法系列(23)(写一个程序,要求功能,求出用1、2、5这三个数不同个数组合的和为100的组合数)
- 一个简单的OpenGL程序,绘制一个白色正方形
- 每天一个OpenGL程序,第一篇弹性的小矩形
- 简单一个opengl程序,2D图形移动
- (4)编写一个程序,输出三角形字符阵列图形
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 每天一个python小程序 3向Redis数据库中插入数据
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 每天一个小程序—0000题(python图像处理)
- 每天一个小程序(15)——交换排序之快速排序
- OpenGL学习程序,创建一个3D的三角椎体和正方体并旋转
- Python 练习册,每天一个小程序-第 0006题
- opengl es3.0学习篇七:使用opengl绘制一个立方体