OpenGL源代码之五绘制3D图形

更多精彩内容,请见:http://www.16boke.com


by zxy,编程交流QQ群:168424095

//在窗口和全屏模式下切换,按ESC退出。

#include <Windows.h> //Windows的头文件
#include <gl/glut.h> //包含OpenGL实用库


HGLRC hRC=NULL; //窗口着色描述表句柄
HDC hDC=NULL;//OpenGL渲染描述表句柄
HWND hWnd=NULL; //保存窗口句柄
HINSTANCE hInstance; //保存程序实例


bool keys[256];//保存键盘按键的数组
bool active=TRUE;//窗口的活动标志,缺省为TRUE
bool fullscreen=TRUE; //全屏标志缺省,缺省设定成全屏模式


GLfloat rtri;//用于三角形的角度
GLfloat rquad;//用于四边形的角度


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//WndProc的定义


//重置OpenGL窗口大小
GLvoid ResizeGLScene(GLsizei width,GLsizei height)
{
if (height == 0) //防止被零除
{
height =1;//将height设为1
}


glViewport(0,0,width,height);//重置当前的视口
glMatrixMode(GL_PROJECTION);//旋转投影矩阵
glLoadIdentity();//重置投影矩阵


//设置视口的大小
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);


glMatrixMode(GL_MODELVIEW);//选择模型观察矩阵
glLoadIdentity();//重置模型观察矩阵
}


int InitGL(GLvoid)//对OpenGL进行设置
{
glShadeModel(GL_SMOOTH);//启用阴影平滑
glClearColor(0.0f,0.0f,0.0f,0.0f);//黑色背景
glClearDepth(1.0f);//设置深度缓存
glEnable(GL_DEPTH_TEST);//启用深度测试
glDepthFunc(GL_LEQUAL);//所作深度测试的类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//告诉系统对透视进行修正


return TRUE;
}


//进行绘制
int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除屏幕和深度缓存
glLoadIdentity();//重置当前的模型观察矩阵
glTranslatef(-1.5f,0.0f,-6.0f);//左移1.5单位,并移入屏幕6.0


glRotatef(rtri,0.0f,1.0f,0.0f);//绕Y轴旋转金字塔
glBegin(GL_TRIANGLES); //绘制金字塔各面


glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(前侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(-1.0f,-1.0f,1.0f);//左下(前侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(1.0f,-1.0f,1.0f);//右下(前侧面)


glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(右侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(1.0f,-1.0f,1.0f);//左下(右侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(1.0f,-1.0f,-1.0f);//右下(右侧面)


glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(后侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(1.0f,-1.0f,-1.0f);//左下(后侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(-1.0f,-1.0f,-1.0f);//右下(后侧面)


glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(左侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(-1.0f,-1.0f,-1.0f);//左下(左侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(-1.0f,-1.0f,1.0f);//右下(左侧面)


glEnd();//三角形绘制结束


glLoadIdentity();//重置模型观察矩阵
glTranslatef(1.5f,0.0f,-7.0f);//先右移再移入屏幕
glRotatef(rquad,1.0f,1.0f,1.0f);//绕XYZ轴旋转立方体

glBegin(GL_QUADS); //绘制正方形
glColor3f(0.0f,1.0f,0.0f);//将当前色设置为绿色
//顶面
glVertex3f(1.0f,1.0f,-1.0f);//右上
glVertex3f(-1.0f,1.0f,-1.0f);//左上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值