OpenGL 使用GL_QUADS绘制四边形示例程序,显示效果如下所示。 GL_QUADS连续点生成四边形的规则如下图所示:

源代码如下:

// GlutQuadsDemo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <gl/glut.h>
#include <math.h>//圆周率宏
#define GL_PI 3.1415f
//获取屏幕的宽度
GLint SCREEN_WIDTH=0;
GLint SCREEN_HEIGHT=0;
//设置程序的窗口大小
GLint windowWidth=400;
GLint windowHeight=300;
//绕x轴旋转角度
GLfloat xRotAngle=0.0f;
//绕y轴旋转角度
GLfloat yRotAngle=0.0f;//是否打开不显示背面功能
GLint cullFace=0;
//是否打开深度测试功能
GLint depthTest=0;
//背面是采用线条描外框还是使用单色填充 
GLint outLine=0;
//菜单回调函数
void processMenu(int value){switch(value){case 1:depthTest=!depthTest;break;case 2:cullFace=!cullFace;case 3:outLine=!outLine;break;default:break;}//重新绘制glutPostRedisplay();
}
//显示回调函数
void renderScreen(void){GLfloat x,y,z,angle;//把整个窗口清理为当前清理颜色:黑色glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//将当前Matrix状态入栈glPushMatrix();//坐标系绕x轴旋转xRotAngleglRotatef(xRotAngle,1.0f,0.0f,0.0f);//坐标系绕y轴旋转yRotAngleglRotatef(yRotAngle,0.0f,1.0f,0.0f);if(depthTest)glEnable(GL_DEPTH_TEST);//打开深度测试功能elseglDisable(GL_DEPTH_TEST);//关闭深度测试功能if(cullFace)glEnable(GL_CULL_FACE);//打开不显示背面功能elseglDisable(GL_CULL_FACE);//关闭不显示背面功能if(outLine)glPolygonMode(GL_BACK,GL_LINE);//多边形背部使用线条描框elseglPolygonMode(GL_BACK,GL_FILL);//多边形背部使用单色填充x=0.0f;y=0.0f;z=0.0f;//进行平滑处理 glEnable(GL_LINE_SMOOTH);glHint(GL_LINE_SMOOTH,GL_NICEST);//绘制坐标系glColor3f(1.0f,1.0f,1.0f);glBegin(GL_LINES);glVertex3f(-80.0f,0.0f,0.0f);glVertex3f(80.0f,0.0f,0.0f);glVertex3f(0.0f,-80.0f,0.0f);glVertex3f(0.0f,80.0f,0.0f);glVertex3f(0.0f,0.0f,-80.0f);glVertex3f(0.0f,0.0f,80.0f);glEnd();glPushMatrix();glTranslatef(80.0f,0.0f,0.0f);glRotatef(90.0f,0.0f,1.0f,0.0f);glutWireCone(3,6,10,10);glPopMatrix();glPushMatrix();glTranslatef(0.0f,80.0f,0.0f);glRotatef(-90.0f,1.0f,0.0f,0.0f);glutWireCone(3,6,10,10);glPopMatrix();glPushMatrix();glTranslatef(0.0f,0.0f,80.0f);glRotatef(90.0f,0.0f,0.0f,1.0f);glutWireCone(3,6,10,10);glPopMatrix();//开始绘制两个四边形glBegin(GL_QUADS);//红色绘制第一个四边形glColor3f(1.0f,0.0f,0.0f);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(25.0f,0.0f,0.0f);glVertex3f(30.0f,30.0f,0.0f);glVertex3f(0.0f,25.0f,0.0f);//红色绘制第二个四边形glColor3f(0.0f,1.0f,0.0f);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(-25.0f,0.0f,0.0f);glVertex3f(-30.0f,-30.0f,0.0f);glVertex3f(0.0f,-25.0f,0.0f);//结束绘四边形glEnd();//恢复压入栈的MatrixglPopMatrix();//交换两个缓冲区的指针glutSwapBuffers();
}
//设置Redering State
void setupRederingState(void){//设置清理颜色为黑色glClearColor(0.0f,0.0,0.0,1.0f);//设置绘画颜色为绿色glColor3f(0.0f,1.0f,0.0f);
}
//窗口大小变化回调函数
void changSize(GLint w,GLint h){//横宽比率GLfloat ratio;//设置坐标系为x(-100.0f,100.0f)、y(-100.0f,100.0f)、z(-100.0f,100.0f)GLfloat coordinatesize=100.0f;//窗口宽高为零直接返回if((w==0)||(h==0))return;//设置视口和窗口大小一致glViewport(0,0,w,h);//对投影矩阵应用随后的矩阵操作glMatrixMode(GL_PROJECTION);//重置当前指定的矩阵为单位矩阵 glLoadIdentity();ratio=(GLfloat)w/(GLfloat)h;//正交投影if(w<h)glOrtho(-coordinatesize,coordinatesize,-coordinatesize/ratio,coordinatesize/ratio,-coordinatesize,coordinatesize);elseglOrtho(-coordinatesize*ratio,coordinatesize*ratio,-coordinatesize,coordinatesize,-coordinatesize,coordinatesize);//对模型视图矩阵堆栈应用随后的矩阵操作glMatrixMode(GL_MODELVIEW);//重置当前指定的矩阵为单位矩阵 glLoadIdentity();
}//按键输入处理回调函数
void specialKey(int key,int x,int y){if(key==GLUT_KEY_UP){xRotAngle-=5.0f;}else if(key==GLUT_KEY_DOWN){xRotAngle+=5.0f;}else if(key==GLUT_KEY_LEFT){yRotAngle-=5.0f;}else if(key==GLUT_KEY_RIGHT){yRotAngle+=5.0f;}//重新绘制glutPostRedisplay();
}int main(int argc, char* argv[])
{//初始化glut glutInit(&argc,argv);//使用双缓冲区模式glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);//获取系统的宽像素SCREEN_WIDTH=glutGet(GLUT_SCREEN_WIDTH);//获取系统的高像素SCREEN_HEIGHT=glutGet(GLUT_SCREEN_HEIGHT);//创建窗口,窗口名字为OpenGL TriAngle DemoglutCreateWindow("OpenGL Quads Demo");//菜单回调函数glutCreateMenu(processMenu);//添加菜单glutAddMenuEntry("Toggle depth test",1);glutAddMenuEntry("Toggle cull face",2);glutAddMenuEntry("Toggle back outline",3);//将菜单榜定到鼠标右键上glutAttachMenu(GLUT_RIGHT_BUTTON);//设置窗口大小glutReshapeWindow(windowWidth,windowHeight);//窗口居中显示glutPositionWindow((SCREEN_WIDTH-windowWidth)/2,(SCREEN_HEIGHT-windowHeight)/2);//窗口大小变化时的处理函数glutReshapeFunc(changSize);//设置显示回调函数 glutDisplayFunc(renderScreen);//设置按键输入处理回调函数glutSpecialFunc(specialKey);//设置全局渲染参数setupRederingState();glutMainLoop();return 0;
}

VS2012下基于Glut OpenGL GL_QUADS示例程序:相关推荐

  1. VS2012下基于Glut OpenGL GL_STENCIL_TEST示例程序:

    模板测试是把像素存储在模板缓冲区的值与一个参考值进行比较.根据测试的结果,对模板缓冲区中得这个值进行相应的修改. Note:模板测试只有在存在模板缓冲区的情况下才会执行,如果不存在模板缓冲区,模板测试 ...

  2. VS2012下基于Glut OpenGL GL_POLYGON示例程序:

    很多书介绍GL_POLYGON连续点生成多边形时这下点必须是凸多边形的,规则如下图所示.写个Demo验证了下似乎不是凸多边形的也可以. Demo的正面与背面显示效果: 源代码如下所示: // Glut ...

  3. VS2012下基于Glut OpenGL glScissor示例程序:

    剪裁测试用于限制绘制区域.我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃.换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改.有的朋友可能 ...

  4. VS2012下基于Glut OpenGL glDepthMask示例程序:

    glDepthMask (GLboolean flag)函数可以决定将他之后的数据不写入深度缓冲区.当flag为GL_TRUE时之后的数据不写入深度缓冲区,即使启用了深度缓冲区测试功能. 使用上一个D ...

  5. VS2012下基于Glut OpenGL glEdgeFlag示例程序:

    glEdgeFlag (GLboolean flag)表示一个顶点是否应该被认为是多边形的一条边界边的起点.flag为GL_TRUE后面的点都被认为是边界上的点,flag为GL_FALSE则之后的点不 ...

  6. VS2012下基于Glut OpenGL GL_POLYGON_STIPPLE示例程序:

    直线可以被画成虚线,而多边形则可以进行镂空. 首先,使用glEnable(GL_POLYGON_STIPPLE);来启动镂空模式(使用glDisable(GL_POLYGON_STIPPLE)可以关闭 ...

  7. VS2012下基于Glut OpenGL GL_QUAD_STRIP示例程序:

    OpenGL连续点通过GL_QUAD_STRIP生成四边形规则如下图所示: 演示程序效果如下图所示: 源代码如下所示: // GlutQuadStripDemo.cpp : 定义控制台应用程序的入口点 ...

  8. VS2012下基于Glut 绘制立方体示例程序:

    使用glBegin(GL_QUADS)绘制六个侧面来组成一个立方体:并使用glFrontFace(GL_CW).glFrontFace(GL_CCW)来设置每个面的正面:使用glColor3ub来设置 ...

  9. VS2012下基于Glut glRotatef glTranslatef示例程序:

    Demo使用glRotatef ,glTranslatef来实现一个太阳.地球.月亮运动的3D图形. 1.glTranslatef() --模型变换函数移动 voidglTranslatef(GLfl ...

最新文章

  1. intellij打开工程在每个java文件上有个红色的无效符的解决办法
  2. dnf用虚拟机会被制裁吗_差点把DNF搞关服的私服,这次终于被大话西游手游拿下了...
  3. 初试牛客网PAT练习之数素数
  4. 查看修改Linux隐藏文件的四种简便方法
  5. python怎么整体缩进_写python代码时怎么快速的给大量代码加上缩进?
  6. 列表合并变种题,map()函数扩展
  7. POJ3259-负权回路判定
  8. ADMT3.2域迁移之Server2003至Server2012系列(五)添加域管理员权限
  9. ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
  10. pubmed 影响因子_如何在Pubmed利用影响因子筛选文献?
  11. 为什么我的眼里常含泪水,因为Mysql让我变的深沉(2021最新版mysql安装)
  12. 途牛旅游系统架构的优化实践
  13. 使用xadmin更新数据时,报错expected string or bytes-like object
  14. matplotlib.pyplot中API介绍
  15. sql if语句实例
  16. MindManager2022注册码-激活码-序列号相关问题解答
  17. simulink 调整系统采样时间 示波器显示时间
  18. (79)【按键】[独立按键] - 1: 单击,双击,三击以及N击
  19. ae合成设置快捷键_ae技巧,使用ae实用小技巧
  20. 教师计算机考核有啥用,教师计算机使用管理制度和考核方案

热门文章

  1. axure手机端原型:提示弹窗组件
  2. 二级计算机小知识,【学习小知识】--计算机二级office如何考优秀?
  3. Day03顺序表的结构设计2.0
  4. cvte2019校园招聘提前批嵌入式编程题2
  5. Mac使用Sequel Pro技巧
  6. qt实现一个MP4视频播放器
  7. 计算机毕业设计Java高校教学资源共享平台(源码+系统+mysql数据库+lw文档)
  8. 【界面设计】Pixso设计雾霾系统页面
  9. Numpy choice采样函数
  10. python画圣诞帽_用Python给头像加上圣诞帽或圣诞老人小图标