OpenGL运用辅佐库创立规矩几许目标

辅佐类分类: 1)窗口初始化函数 2)窗口处置和工作处置函数 3)定义场景制造循环函数 4)三围物体制造函数 5)颜色索引表装入函数 6)空闲工作处置函数 下面描写了一个程序,该程序尽可以包含辅佐库的全部函数。该程序完结的功用是:定义键盘的功用,0~9及a分别标明选择11种底子 形体的一种进行制造;定义鼠标的功用为:左键按下标明选择实心闪现方式,右键按下标明选择网状闪现方式;空闲工作的功用定义 为 http://www.fpnanchang.com/linked/20130422.do :重复的对形体进行扩展或减小。程序顶用到了列出的除颜色索引装入函数以外的其他全部函数。 代码如下: #include
#include	//为了让下面的头文件编译的时分经过
#include
#include
#include
using namespace std;void MyInit(void);
void DrawScene(int,int);
void CALLBACK Display(void);
void CALLBACK MyReshape(GLsizei w, GLsizei h);
void CALLBACK SetSolid(AUX_EVENTREC *);
void CALLBACK SetWire(AUX_EVENTREC *);
void CALLBACK SetScale();
void CALLBACK Key_0(void);
void CALLBACK Key_1(void);
void CALLBACK Key_2(void);
void CALLBACK Key_3(void);
void CALLBACK Key_4(void);
void CALLBACK Key_5(void);
void CALLBACK Key_6(void);
void CALLBACK Key_7(void);
void CALLBACK Key_8(void);
void CALLBACK Key_9(void);
void CALLBACK Key_a(void);/*全局变量*/
GLint Width = 0;						//窗口宽度
GLint Height = 0;						//窗口高度
GLint ShapeType, Solid = 1;				//形体类型及能否实心
GLfloat Scale = 1.0f;					//形体缩放比例/*初始化函数:定义质料与光照*/
void MyInit(void)
{GLfloat diffuse[] = {0.3f, 0.6f, 0.9f, 1.0f};GLfloat specular[] = {0.8f, 0.8f, 0.8f, 1.0f};GLfloat position_one[] = {1.0f, 1.0f, 1.0f, 0.0f};GLfloat position_two[] = {-1.0f, 1.0f, 1.0f, 0.0f};//定义质料glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 64.0f);//定义linght0,linght1glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, specular);glLightfv(GL_LIGHT0, GL_POSITION, position_one);glLightfv(GL_LIGHT1, GL_POSITION, position_two);//运用双面光照glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);//激活光照与深度勘探glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glEnable(GL_LIGHTING);glEnable(GL_DEPTH_TEST);
}/*闪现相应函数:调用集结形体制造,程序会循环的调用该函数进行制造,因此当其他程序中修改了以下制造程序中的一些参数时,无需调用该函数,程序会自动地用该函数从头进行制造。以下程序中先指定视口、根除缓存,经过一系列坐标转换后,在制造集结形体,然后沟通前后缓存,将制造的内容闪现到屏幕上。
*/void CALLBACK Display(void)
{glViewport(0, 9, Width, Height);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();glRotatef(30.0f, 1.0f, 0.0f, 0.0f);glRotatef(30.0f, 0.0f, 1.0f, 0.0f);glScalef(Scale, Scale, Scale);DrawScene(ShapeType,Solid);glFlush();glPopMatrix();auxSwapBuffers();
}/*当窗口大小发生变化时,相应地调整坐标系*/
void CALLBACK MyReshape(GLsizei w, GLsizei h)
{Width = w;Height = h;if(w <= h)glOrtho(-2.0f, 2.0f, -2.0f * (GLfloat)h / (GLfloat)w, 2.0f * (GLfloat)h / (GLfloat)w, -2.0f, 2.0f);elseglOrtho(-2.0f * (GLfloat)w / (GLfloat)h, 2.0f * (GLfloat)w / (GLfloat)h, -2.0f, 2.0f, -2.0f, 2.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}/*场景制造函数该函数制造辅佐库中的全部底子几何体。其间ShapeType参数抉择制造何种形体,Solid参数抉择能否制造实心体。这里调用了当时辅佐库中的供应全部形体制造函数。细心的用户或许会发现,程序工作的效果中可以碰到了辅佐库中的一个小错误,即当制造圆柱和圆锥时,从实心到网状或从网状的圆柱或圆锥,同一帧画面中也无法一同闪现实心和网状的圆柱或圆锥。辅佐库并不常用,因此并不必担忧,不过仍是希望OpenGL的下一个版别中能改掉这个小错误。
*/
void DrawScene(int ShapeType,int Solid)
{switch(ShapeType){case 0:if(Solid)auxSolidSphere(1.0);elseauxWireSphere(1.0);break;case 1:if(Solid)auxSolidCube(1.0);elseauxWireCube(1.0);break;case 2:if(Solid)auxSolidBox(1.5, 1.0, 1.0);elseauxWireBox(1.5, 1.0, 1.0);break;case 3:if(Solid)auxSolidTorus(1.0, 1.0);elseauxWireTorus(1.0, 1.0);break;case 4:if(Solid)auxSolidCylinder(1.0, 2.0);elseauxWireCylinder(1.0, 2.0);break;case 5:if(Solid)auxSolidIcosahedron(1.0);elseauxWireIcosahedron(1.0);break;case 6:if(Solid)auxSolidOctahedron(1.0);elseauxWireOctahedron(1.0);break;case 7:if(Solid)auxSolidTetrahedron(1.0);elseauxWireTetrahedron(1.0);break;case 8:if(Solid)auxSolidDodecahedron(1.0);elseauxWireDodecahedron(1.0);break;case 9:if(Solid)auxSolidCone(1.0, 1.0);elseauxWireCone(1.0, 1.0);break;case 10:if(Solid)auxSolidTeapot(1.0);elseauxWireTeapot(1.0);break;}
}/*鼠标工作处置函数鼠标时辰处置函数定义得非常简略,单机
*/
void CALLBACK SetSolid(AUX_EVENTREC *)
{Solid= 1;
}void CALLBACK SetWire(AUX_EVENTREC *)
{Solid = 0;
}/*空闲时辰处置函数:空闲时辰处置函数的功用为:先对所制造的形体进行减小,当减小到一定程度(此处为0.1倍原大小)后,再对形体进行扩展,当扩展到一定程度(此处为原大小)后,又初步进行减小,如此重复。程序中运用了一个静态变量来标明扩展减小的情况。
*/
void CALLBACK SetScale()
{static int ZoomIn = 0;if(ZoomIn  http://www.dalian2001.com/linked/20130422.do 

转载于:https://www.cnblogs.com/fpqqchao/archive/2013/04/23/3036949.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

input子系统详解2——应用层代码实践

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、编程步骤总结 步骤1&#xff1a;确定设备文件名字 步骤2&#xff1a;使用标准接口打开与读取设备文件 步骤3&#xff1a;解析struct input_event 二、编程步骤分析 1、确定设备文件名 应用层操作…

构造函数初始化器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 {class Program{static void Main(string[] args){cat c new cat("萌萌");//先执行cat(string s,int i)构造…

oracle中的视图详解

1.视图的概述 视图其实就是一条查询sql语句&#xff0c;用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用&#xff0c;因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表&#xff0c;所有对视图数据的修改最终都会被反映到视图的基…

input子系统详解3——input子系统框架核心层分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 一、前言 由input子系统简介可知&#xff0c;input子系统分为三层&#xff1a; 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件&#xff0c;分别对应…

java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中

把spring-boot项目按照平常的web项目一样发布到tomcat容器下一、修改打包形式在pom.xml里设置 war二、移除嵌入式tomcat插件在pom.xml里找到spring-boot-starter-web依赖节点&#xff0c;在其中添加如下代码&#xff0c;org.springframework.bootspring-boot-starter-weborg.sp…

Gitlab Merge Request Builder Plugin 配置小记

2019独角兽企业重金招聘Python工程师标准>>> 以前在给一些开源项目贡献代码的时候&#xff0c;在github上一提交pull request或者提交的分支代码更新了的时候&#xff0c;jenkins就会自动把代码进行merge并且运行单元测试&#xff0c;当时看了心里就2个字&#xff1…

IOS:屏幕旋转与Transform

IOS&#xff1a;屏幕旋转与Transform iTouch&#xff0c;iPhone&#xff0c;iPad设置都是支持旋转的&#xff0c;如果我们的程序能够根据不同的方向做出不同的布局&#xff0c;体验会更好。 如何设置程序支持旋转呢&#xff0c;通常我们会在程序的info.plist中进行设置Supporte…

input子系统详解4——输入事件驱动层源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 由input子系统简介可知&#xff0c;input子系统分为三层&#xff1a; ​ 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件&#xff0…

前端翻译:Activating Browser Modes with Doctype

一、前言                         原本备份&#xff1a; http://www.cnblogs.com/fsjohnhuang/p/3830623.html 由于本人英语能力有限&#xff0c;译本内容难免有误&#xff0c;望各位指正&#xff01; 本译文不含附录部分&#xff0c;请知悉。 二、译…

java公钥加密私钥解密过程_GPG加密解密过程

GPG加密解密过程一、Linux系统下1.安装yum安装[rootPOC-ORACLE ~]# yum install gnupg下载安装包安装https://www.gnupg.org/download/index.en.html查看gpg帮助[rootPOC-ORACLE ~]# gpg --helpgpg (GnuPG) 2.0.14libgcrypt 1.4.5Copyright (C) 2009 Free Software Foundation,…

魔兽世界客户端数据研究(三)

终于决定&#xff0c;还是通过wow model viewer起手&#xff0c;研究一下WOW的数据类型&#xff0c;从另一个角度&#xff0c;体验一把这个唯一让我充过值的游戏。 这将是一系列随笔&#xff0c;即在读代码的时候&#xff0c;顺便记录&#xff0c;以理清思路和加深映象。 其中…

input子系统详解5——参考驱动模板编写按键驱动

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、input类设备驱动的开发 &#xff08;1&#xff09;输入事件驱动层和框架核心层不需要动&#xff0c;只需要编写具体硬件驱动层代码。 &#xff08;2&#xff09;具体硬件驱动层的编程接口与调用…

java很多魔法数判断_可别在代码中写那么多魔法值了,脑壳疼!

1. 前言重构老代码中遇到了不少类似下面这种写法&#xff1a;public void attend(String value) {if ("0".equals(value)) {//todo} else if ("1".equals(value)) {//todo} else {//todo}}脑壳疼&#xff01;从 Java 语法上无懈可击&#xff0c;但是从业务…

十分钟让你明白Objective-C的语法(和Java、C++的对比)

2019独角兽企业重金招聘Python工程师标准>>> 很多想开发iOS&#xff0c;或者正在开发iOS的程序员以前都做过Java或者C&#xff0c;当第一次看到Objective-C的代码时都会头疼&#xff0c;Objective-C的代码在语法上和Java, C有着很大的区别&#xff0c;有的同学会感觉…

稀疏多项式的运算

问题描述&#xff1a; 已知稀疏多项式Pn(X)c1x^e1c2x^e2....cmx^em,其中nem>em-1>....>e1>0; ci!0,m>1.试采用存储量同多项式项数m成正比的顺序存储结构&#xff0c;编写求Pn(x0)的算法&#xff08;x0为给定值&#xff09;&#xff0c;并分析你的算法的时间复杂…

I2C子系统详解1——I2C总线设备的驱动框架

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 I2C总线驱动框架详解 linux内核I2C子系统详解 一、I2C总线的物理特征 这部分内容的简介可见博客&#xff1a;SPI、I2C、UART&#xff08;即串口&#xff09;三种串行总线详解。 &#x…

sqlite4java下载_使用sqlite4java的UnsatisfiedLinkError,没有sqlite4java-osx-amd64

我对这个问题有类似的问题&#xff1a;我正在运行一个使用sqlite的脚本,虽然我能够通过命令行成功运行sqlite3,但是当我尝试运行脚本时,我总是遇到这个错误&#xff1a;SEVERE: [sqlite] sqliteQueue[master.catalog]: error running job queuecom.almworks.sqlite4java.sqlite…

神经网络编程入门

本文主要内容包括&#xff1a; (1) 介绍神经网络基本原理&#xff0c; (2) AForge.NET实现前向神经网络的方法&#xff0c; (3) Matlab实现前向神经网络的方法 。 第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris数据集可以在http://en.wikipedia.or…

I2C子系统详解2——I2C核心层源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 由I2C总线设备的驱动框架可知&#xff0c;I2C总线设备驱动框架涉及的文件如下&#xff1a; &#xff08;1&#xff09;I2C设备驱动层相关的文件 x210开发板的电容触摸屏gslX680采用I2C接口…

软考复习之路—组成原理

计算机系统的基础知识应该是作为一个编程人员必备的一门课程&#xff0c;仅仅有了解了计算机的组成&#xff0c;程序在计算 机中的存储状态&#xff0c;运算等基本内容&#xff0c;我们才干继续对计算机有更深层次的认识&#xff0c;更easy学习与上手。比方说要 想学习操作系统…