OpenGL编程轻松入门之二次几何体
这一章我们讲一下二次几何物体的绘制。二次几何物体的绘制有几种不同的方式,在本例中可以看出不同的绘制方式的不同效果,如图十五所示。
例13:本例使用GLU库函数绘制了四个几何物体,分别为圆柱体、球体、圆盘和部分圆盘。
#include <windows.h> #include <GL/glut.h> #include <math.h> /*声明四个二次曲面物体*/ static float light_ambient[] = {0.1,0.1,0.1,1.0}; static float front_mat_shininess[] = {60.0}; static float back_mat_shininess[] = {60.0}; static float Imodel_ambient[] = {1.0,1.0,1.0,1.0}; void myInit(void) glEnable(GL_DEPTH_TEST); /*设置光照*/ /*设置材质*/ glMaterialfv(GL_BACK,GL_DIFFUSE,back_mat_diffuse); /*设置光照模型参数*/ /*激活关照*/ void myDisplay(void) /*创建四个二次曲面物体*/ /*绘制一个圆柱体*/ glColor3f(1.0,1.0,0.0); /*绘制一个球体*/ /*绘制一个圆盘*/ /*绘制一个部分圆盘*/ /*删除四个二次曲面物体对象*/ void myReshape(int w,int h) int main(int argc,char ** argv) /*创建窗口*/ /*绘制与显示*/ glutMainLoop(); |
·gluNewQuadric创建一个二次对象。这个函数创建并返回一个指向新的二次对象的指针。当调用二次描述和控制函数是指向这个对象。如果返回值为0则表明没有足够的空间分配给该对象。
·glQuadricDrawStyle函数指定二次对象的绘制方式。本例中圆柱体的绘制方式为GLU_FILL。含义为用多边形原绘制本二次对象,多边形的绘制方式为逆时针。球体的绘制方式为GL_SILHOUETTE,即除边界外用一系列线来绘制二次对象。圆盘的绘制方式为GL_LINE,即用一系列线来绘制二次对象。部分圆盘的绘制方式为GL_POINT,即用一系列点来绘制二次对象。
·glQuadricNormals,指定二次对象使用的法向量类型。
·glQuadricOrientation,指定二次对象的内面或外面方位。GLU_OUTSIDE为缺省值,表明使用指向内面的法相量绘出二次对象,GLU_INSIDE表明使用指向外面的法相量绘出二次对象。
图十五:二次几何体 |
·glQuadricTexture指定二次对象是否使用纹理。GL_FALSE为缺省值。
·void gluCylinder(GLUquadricObj *qobj,GLdouble baseRadius,GLdouble topRadius,GLdouble height,Glint slices,Glint stacks)绘制一个圆柱体。
qobj指明是哪个二次对象。
baseRadius圆柱体在z=0时的半径。
topRadius圆柱体在z=height时的半径。
height圆柱体的高。
slices围绕着z轴分片的个数。
stacks顺着z轴分片的个数。stacks和slices垂直。
·void gluSphere(GLUquadricObj *qobj,GLdouble radius,Glint slices,Glint stacks)绘制一个球形。
qobj指明是哪个二次对象。
radius球体半径。
slices围绕着z轴分片的个数。
stacks顺着z轴分片的个数。
·void gluDisk(GLUquadricObj *qobj,GLdouble innerRadius,GLdouble outerRadius,Glint slices,Glint loops)绘制一个圆盘。
qobj指明是哪个二次对象。
innerRadius圆盘的内部半径,可能为0。
outerRadius圆盘的外部半径。
slices围绕着z轴分片的个数。
loops圆盘同心圆个数。
·void gluPartialDisk(GLUquadricObj *qobj,GLdouble innerRadius,GLdouble outerRadius,Glint slices,Glint loops,GLdouble startAngle,GLdouble sweepAngle)绘制一个圆盘的一部分。
startAngle起始角度,单位为度。
sweepAngle扫描角,单位为度。
转载于:https://blog.51cto.com/dxwang/686007
OpenGL编程轻松入门之二次几何体相关推荐
- OpenGL编程轻松入门(一)
OpenGL编程轻松入门(一) (由同事黄燕创作) 本文介绍了有关OpenGL的基本知识,主要涉及颜色.绘制几何体.坐标变换.堆栈操作.显示列表.光照和材质.纹理映射.特殊效果.曲面和曲线的绘制. ...
- OpenGL编程轻松入门(四)
1. 曲面和曲线 前面我们讲了如何绘制平面的图形,这一节我们学习如何绘制曲线和曲面. 例10:绘制一个曲面,本程序使用二维求值器绘制一个曲面.本例中也有一些特殊效果的操作. #incl ...
- OpenGL编程轻松入门之使用颜色
通过上一节的例子我们已经知道一些简单的使用颜色的方法.这一节我们进一步讲讲颜色的使用. 例2:本例子使用颜色引索模式绘制8个不同颜色的球体,如图二所示.阅读此例时,请主要关注函数palette和Dra ...
- OpenGL编程轻松入门之显示例表
利用显示列表,我们们可以减少重复的劳动.我们可以从例5中得到体会. 例5:绘制六个彩色的三角形,如图六. #include <windows.h> #include <GL/glut ...
- opengl编程从入门到精通-hello,window
窗口 程序中使用的glad.c和glad.h源码: 链接: https://pan.baidu.com/s/1TmtM7O8J4aTnfP6elIgs7g 密码: g5go github源码仓库 op ...
- C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
- Qt下的OpenGL 编程(3)绘制平面几何体
一. 提要 之前的一篇教程已经搭建好了Qt下的OpenGL的编程环境,几天要来学习的就是OpenGL的2D绘图. 2D作为绘图的基础,还是很值得去好好学习,比如迪卡尔坐标,透视设置等等,而所谓的3D, ...
- C++网络编程快速入门(二):Linux下使用select演示简单服务端程序
目录 select参数解释 select使用规范 select使用缺点 基本流程 实例代码 通信效果演示 往期文章 select参数解释 extern int select (int __nfds, ...
- 内核模块编程之入门(二)—必备知识
模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识. 1.应用程序与内核模块的比较 为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较. 表一 应用程序与 ...
最新文章
- zookeeper基础知识整理
- 学习 FPGA之前的基础知识
- Python中,我该如何切分字符串后保留分割符?
- 燃烧学往年精选真题解析
- OAuth 2.0初学者指南
- mysql获取当前时间的订单_mysql获取当前时间,及其相关操作
- Windows Server 2016-管理Active Directory复制任务
- android 根据名字获取资源,Android利用资源名称获取其ID(一)—getIdentifier()
- matlab液体湿润模拟,【水文模型】01 三水源新安江模型
- 【机器学习】 - 决策树(西瓜数据集)
- 丰巢刷脸取件被小学生破解,号称3D、深度学习加持的人脸识别究竟靠谱吗?...
- html中如何使图片边框隐藏,css怎么去除图片边框
- 终于!LeCun发文驳斥Gary Marcus:别把深度学习暂时的困难当撞墙
- 高数:第四章(同济大学第七版)
- 费率与利率的差别_费率是什么(利率和费率有啥区别?)
- statsmodels遇到的坑!!!
- 软件vmware获取ip地址失败
- excel高级筛选怎么用_EXCEL/WPS高级筛选使用
- Linux中 vim 实现代码补全
- this application requires.net framework4.0,please install the.net framework then run this installer
热门文章
- 2/3 常用符号:格式说明符
- echo count(“abc”); 输出什么?
- apt-get clean 清除 apt 的缓存
- Effective Java阅读笔记——引言
- IOS上 关于状态栏的相关设置(UIStatusBar)和preferredStatusBarStyle不执行问题
- python 连 mongodb
- 管理类软件设计“渔”之演化
- 坐标轴 日期格式_Excel图表技巧之不连续的日期坐标轴怎么显示
- python多线程并行编程,Python并行编程(二):基于线程的并行
- pfamscan 的使用_Hmmer安装与使用