每天一个OpenGL程序 第五篇 四边形的绘制
2013-08-25 14:25
239 查看
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <math.h>
/* 练习5.1
* 四边形的绘制,转动的立方体
*/
//声明一个显示函数
void ghRender(void);
//声明一个初始化函数
void ghInitGL(void);
//屏幕宽高
int winWidth = 640;
int winHeight = 480;
int main(int argc,char ** argv)
{
//初始化glut库
glutInit(&argc,argv);
//初始化显示模式
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
//初始化窗口大小
glutInitWindowSize(winWidth,winHeight);
//初始化窗口位置
glutInitWindowPosition(100,150);
//初始化窗口
glutCreateWindow("圆锥的绘制");
//注册显示回调函数
glutDisplayFunc(ghRender);
//
glutIdleFunc(ghRender);
//初始化函数
ghInitGL();
//进入循环等待时间
glutMainLoop();
return 0;
}
void ghInitGL(void)
{
//黑色背景
glClearColor(0,0,0,1);
//画笔为绿色
glColor3f(0,1,0);
GLfloat nRange = 100.0f;
glViewport(0,0,winWidth,winHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-nRange * winWidth/winHeight,nRange * winWidth/winHeight,-nRange,nRange,-nRange,nRange);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
float xRot,yRot,zRot;
void ghRender(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
float x,y,z = y = x = 30;
glPushMatrix();
glRotatef(xRot,1,0,0);
glRotatef(yRot,0,1,0);
glRotatef(zRot,0,0,1);
glBegin(GL_QUADS);
//前面
glVertex3f(-x,-y,z);
glVertex3f(x,-y,z);
glVertex3f(x,y,z);
glVertex3f(-x,y,z);
//右面
glColor3f(0,0,1);
glVertex3f(x,-y,z);
glVertex3f(x,-y,-z);
glVertex3f(x,y,-z);
glVertex3f(x,y,z);
//底面
glColor3f(1,0,0);
glVertex3f(-x,-y,z);
glVertex3f(x,-y,z);
glVertex3f(x,-y,-z);
glVertex3f(-x,-y,-z);
//后面
glColor3f(1,1,0);
glVertex3f(x,-y,-z);
glVertex3f(x,y,-z);
glVertex3f(-x,y,-z);
glVertex3f(-x,-y,-z);
//左面
glColor3f(1,0,1);
glVertex3f(-x,-y,z);
glVertex3f(-x,-y,-z);
glVertex3f(-x,y,-z);
glVertex3f(-x,y,z);
//顶面
glColor3f(0,1,1);
glVertex3f(-x,y,z);
glVertex3f(x,y,z);
glVertex3f(x,y,-z);
glVertex3f(-x,y,-z);
glEnd();
glPopMatrix();
glutSwapBuffers();
glFlush();
xRot = yRot = zRot = zRot+1;
}
/*
四边形的两种模式
GL_GUADS:每次选四个顶点为一组,绘制一个四边形,如果一组不够四个点或不能构成四边形则不绘制
例如有八个点,则绘制两个四边形
GL_GUAD_STRIP:每次取当前点和当前点的下一个点和当前点的前两个个点绘制四边形,(注意点的顺序和绕法)
详细见图
*/
相关文章推荐
- 每天一个OpenGL程序 第四篇 三角形的绘制
- 每天一个OpenGL程序 第二篇 点的绘制
- 每天一个OpenGL程序 第六篇 图形的组合绘制
- 每天一个OpenGL程序 第三篇 线的绘制
- 编写一个基于OpenGL的程序,绘制一个三角形,并分别绘制这个三角形经旋转、平移、缩放后的结果
- OpenGL(一)二维图形的绘制:一个简单的绘制矩形程序
- 每天一个OpenGL程序,第一篇弹性的小矩形
- 一个简单的OpenGL程序,绘制一个白色正方形
- 每天一个java小程序-2
- java入门#每天一个小程序#全排列
- WIN32 opengl绘制一个点
- 每天一个java小程序-3
- Python 练习册,每天一个小程序
- 每天一个小程序——第 0001 题:生成200个验证码
- 每天一个小程序——冒泡排序的实现!
- 【程序17】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
- 每天一个小程序——第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数
- VS2012下基于Glut OpenGL绘制椎体示例程序:
- Python 练习册,每天一个小程序-第 0008-0009 题
- 在VC中,使用OpenGL绘制一个矩形、三角形、三个点和三条直线,由直线组成新的三角形