目录
简单的框架,也就是每一个开发的程序公用的代码。下面以绘制一个四边形带为例。
#include <gl/glut.h>
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, -10, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void Display() //显示
{
glShadeModel(GL_FLAT);
//绘图
glClear(GL_COLOR_BUFFER_BIT); //清空颜色缓冲
glBegin(GL_QUAD_STRIP); //图元
glColor3f(1, 0, 0);
glVertex2f( -0.3, 0.5);
glVertex2f(-0.2,-0.5);
glVertex2f(0.2, 0.5);
glVertex2f(0.2,-0.5);
glColor3f(0, 1, 0);
glVertex2f(0.6, 0.5);
glVertex2f(0.7, -0.5);
glColor3f(0, 0, 1);
glVertex2f(1.2, 0.5);
glVertex2f(0.9, -0.5);
glColor3f(0, 1, 1);
glVertex2f(1.8, 0.5);
glVertex2f(1.3, -0.5);
glEnd();
glFlush(); //清空并执行缓冲区指令
}
int main(int argc, char** argv)
{
//glut初始化
glutInit(&argc, argv); //对命令行参数进行处理
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化窗口显示模式为单缓冲和RGB颜色模式
glutInitWindowSize(700, 700); //初始化窗口大小为700px*700px
glutInitWindowPosition(200, 100); //初始化窗口显示位置
glutCreateWindow("显示页面"); //创建窗口
glutDisplayFunc(Display); //设置显示回调函数
glutReshapeFunc(reshape);
glutMainLoop(); //循环
return 0;
}
运行结果
图元的类型
下面提供几种图元绘制的代码,只用替换display()函数中glBegin()和glEnd()函数之间的内容就可以了。
//点的绘制
glPointSize(5.0f); //设置点的大小
glBegin(GL_POINTS); //图元
glColor3f(1, 1, 0);
glVertex2f(1,1);
glVertex2f(0.5, 0.5);
glVertex2f(0.3, 0.3);
glColor3f(1, 0, 1);
glVertex2f(-1,1);
glVertex2f(-0.5, 0.5);
glVertex2f(-0.3, 0.3);
glVertex2f(-1,-1);
glColor3f(1,1,1);
glVertex2f(1,-1);
glVertex2f(0.5, -0.5);
glVertex2f(0.3, -0.3);
glEnd();
//线的绘制
glLineWidth(0.5f); //设置线的宽度
glBegin(GL_LINES); //图元
glColor3f(1, 1, 0);
glVertex2f(0.2,0.4);
glVertex2f(0, 0);
glColor3f(1, 0, 0);
glVertex2f(0.3, 0.5);
glVertex2f(0.5,0.33);
glEnd();
//点划线
glLineWidth(4.0f); //设置线的宽度
glEnable(GL_LINE_STIPPLE); //控制开始
glLineStipple(2, 0xff00);
glColor3f(1, 1, 0);
glBegin(GL_LINES); //图元
//glColor3f(1, 1, 0);
glVertex2f(0.5, 0.5);
glVertex2f(-0.5, 0.5);
//glColor3f(1, 0, 0);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
//三角形带的绘制
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1, 1, 0);
glVertex2f(0,0.5);
glVertex2f(0, 0);
glVertex2f(0.1, 0.7);
glColor3f(1, 0, 0);
glVertex2f(0.3, 0);
glColor3f(1, 0, 1);
glVertex2f(0.6,0.8);
glColor3f(0,1,1);
glVertex2f(0.7,-0.1);
glColor3f(1, 1, 0);
glVertex2f(1, 0.7);
glColor3f(0, 1, 0);
glVertex2f(1.1, 0.1);
glColor3f(0, 1, 1);
glVertex2f(1.3, 0.6);
glEnd();
//画线段
glLineWidth(4.0f);
glBegin(GL_LINE_STRIP);
glColor3f(1,1,0);
glVertex2f(0,0);
glVertex2f(0, 0.5);
glColor3f(1, 0, 1);
glVertex2f(0.2, 0.4);
glColor3f(0,1,1);
glVertex2f(0.3,0);
glEnd();
//GL_LINE_LOOP
glBegin(GL_LINE_LOOP);
glLineWidth(4.0f);
glColor3f(1, 1, 0);
glVertex2f(0,0);
glVertex2f(0.5,-0.5);
glVertex2f(0.6, 0.4);
glVertex2f(0.2, 0.3);
glEnd();
//GL_TRIANGLE_FAN
glBegin(GL_TRIANGLE_FAN);
glColor3f(1, 1, 0);
glVertex2f(0,0);
glVertex2f(0.6, 0.1);
glVertex2f(0.5, 0.3);
glColor3f(1, 0, 1);
glVertex2f(0.4, 0.4);
glColor3f(0, 1, 0);
glVertex2f(-0.1,0.3);
glColor3f(0, 0, 1);
glVertex2f(-0.2, 0.2);
glColor3f(0, 1, 1);
glVertex2f(-0.1, -0.1);
glEnd();
//GL_POLYGON
glBegin(GL_POLYGON);
glColor3f(1, 1,0);
glVertex2f(0, 0);
glVertex2f(0.3,-0.2);
glVertex2f(0.5, -0.1);
glVertex2f(0.6, 0.7);
glVertex2f(0.4, 0.6);
glVertex2f(0.2, 0.5);
glEnd();
为了模拟光滑表面,OpenGL在渲染时根据顶点颜色通过插值计算各片元的颜色;为了模拟平面,可调用glShadeModel(GL_FLAT)将默认着色器从GL_SMOOTH改为GL_FLAT。
void glShadeModel(GL_SMOOTH); //平滑着色
void glShadeModel(GL_FLAT); //恒定着色
GL_FLAT导致OpenGL渲染后续图元的时候,使用最后一个顶点的颜色给图元着色。
如果片元alpha值未通过应用程序指定的比较测试,alpha测试特性将其丢弃。要使用alpha测试,应用程序必须启用它并指定比较测试。要启用和禁用alpha测试,可使用参数GL_ALPHA_TEST调用相应函数。
glEnable(GL_ALPHA_TEST); //启用alpha测试
glAlphaFunc(GL_GREATER, 0.f); //大于接受
还有以下参数
GL_ALWAYS(始终通过),
GL_NEVER(始终不通过),
GL_LESS(小于则通过),
GL_LEQUAL(小于等于则通过),
GL_EQUAL(等于则通过),
GL_GEQUAL(大于等于则通过),
GL_NOTEQUAL(不等于则通过)
例子
//alpha测试
glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_FALSE);
glEnable(GL_ALPHA_TEST); //启用alpha测试
glAlphaFunc(GL_GREATER, 0.4); //大于接受
glBegin(GL_QUAD_STRIP); //图元
glColor4f(1, 1, 0,0.3);
glVertex2f(-0.2, 0.5);
glVertex2f(-0.2, -0.5);
glColor4f(1, 0, 0,0.5);
glVertex2f(0.2, 0.5);
glVertex2f(0.2, -0.5);
glEnd();
//定义裁剪平面数组
GLdouble equn[4] = { 1,-1,0,0 };
//设置裁剪平面
glEnable(GL_CLIP_PLANE0);
glClipPlane(GL_CLIP_PLANE0, equn);
Ax+By+Cz+D>=0 部分会被保留。
文章浏览阅读2.8k次,点赞3次,收藏7次。在MATLAB中,ones函数用于创建一个指定大小的由1组成的矩阵或数组。_matlab中ones函数
文章浏览阅读3.9w次,点赞2次,收藏9次。 在使用电脑办公过程中,安装应用程序时难免遇到无法安装或者无法正常启动的问题,这对我们使用电脑带来了诸多不便。那遇到应用程序无法正常启动的问题要如何解决呢?相信大家肯定都是十分疑问的,每次都是只能忍痛重新安装软件。今天,小编就和大家探讨下应用程序无法正常启动的解决方法,帮助大家排忧解难。0xc000007b电脑图解1 第一种方案:SFC检查系统完整性来尝试修复丢失文件 1、打开电脑搜索输入cmd.exe,选择以管理员身份运行,跳出提示框时选择继续。0xc000007b电脑图解2_photoshop应用程序无法正常启动0xc000007b。请单击“确认”关闭应用程序。
文章浏览阅读396次。1、概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制。实际上REDO LOG的存在是为两种场景准备的:实例恢复(INSTANCE RECOVERY);介质恢复(MEDIA RECOVERY)。 实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的..._oracle 实例恢复和介质恢复
文章浏览阅读7k次。HashMap map1=new HashMap(); HashMap map2 = new HashMap();map2.putAll(map1)上面的代码的意思是将map1中所有的<key,value>插入到map2中去。具体参考: HashMap map1=new HashMap(); map1.put("..._java map putall
文章浏览阅读1w次,点赞8次,收藏60次。网上购物商城系统以弥补传统购物方式的弊端。在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力。随着WLAN技术的普及,一些规模较大的商城开始考虑利用这种最为先进、最具时尚潮流的网络技术来建设一套灵活、快捷的信息管理系统,以优化管理流程,使网上的服务和管理得到实质性的提升,提高品牌形象和行业核心竞争力。 本课题是实现了网上购物系统的功能,如:商品分类、订单管理等功能。本设计采用安装 JAVA JDK 、安装 IDEA_基于java web的网店管理系统的设计与实现
文章浏览阅读10w+次,点赞9k次,收藏2.4w次。关于Python爬虫的超详细讲解,用例子来给大家一步步分析爬虫的代码原理,由浅入深,老年人来了,我也给你整明白。_python爬取数据
文章浏览阅读3.1k次。例一:import { Injectable } from '@angular/core';import { Observable } from 'rxjs';import { User } from "./model/User";import { map } from 'rxjs/operators';import { Http, Response, Headers, RequestOp..._angular6,requestoptions改成了什么
文章浏览阅读7.9k次,点赞17次,收藏110次。C++读取XML文件_c++ xml解析
文章浏览阅读235次。R语言使用caret包的train函数构建多元自适应回归样条(MARS)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标、tuneLength参数和tuneGrid参数超参数调优_多元自适应回归样条 r
文章浏览阅读5.8k次。Android中ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。程序效果是实现一个显示联系人的简单信息。使用ListView控件,数据有姓名,和照片,并加入点击事件响应。布局文件:
文章浏览阅读535次。《2016最新二级C语言考试题库及答案(程序改错专项练习 精华版)》由会员分享,可在线阅读,更多相关《2016最新二级C语言考试题库及答案(程序改错专项练习 精华版)(4页珍藏版)》请在人人文库网上搜索。1、程序改错题(共15题)1、在考生文件夹下,给定程序MODI.C的功能是:求一维数组a中所有元素的平均值,结果保留两位小数。例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5..._安徽二级python考试有程序改错题吗?
文章浏览阅读2.2k次。 UMLChina第十三期专家交流实录返回首页 返回目录北京时间2002年1月10日(星期四)晚上21:30-23:30 嘉宾:Roser S.Pressman博士是软件工程领域国际知名的咨询专家和作者,R.S. Pressman & Associates, Inc的创始人,已有超过30年的产业经验,主要从事工程产品软件和系统软件的开发技术工