OPENGL中绘制圆的方法及其函数体

eagle_hgz 2007-05-13 10:01:41
小弟跪求OPENGL中绘制圆形的方法及其函数体,前提是用三角形逼近,并且是给定一个圆心,而不是以原点为圆心,请各位大虾赐教!
...全文
693 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
没遇到过这种情况.
chai2010 2007-07-31
  • 打赏
  • 举报
回复
是不是以原点为圆心有关系吗?

OpenGL本来就可以使用局部坐标系的。

glPushMatrix();// 保存当前的坐标系
glTranslatef(x, y, 0);// 将坐标系移动到圆心位置

// 现在就是在以原点为圆心绘制圆了

glPopMatrix();//恢复以前的坐标系
lovecreak 2007-07-30
  • 打赏
  • 举报
回复

float radious = 5.0f; //半径
float step = 0.1f; //步长
float x,y;

glBegin(GL_LINE_STRIP);
for(float angle = 0.0; angle <= (2.0f*3.1415f)*radious; angle += step)
{
x = 50.0f*sin(angle);
y = 50.0f*cos(angle);

glVertex3f(x, y, -50.0f);
}

glEnd();
myseven 2007-05-13
  • 打赏
  • 举报
回复
任何一本图形学的书上都有,圆的生成算法
创建一个OpenGL窗口: 在这个教程里,我将教你在Windows环境创建OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架. 理解OpenGL如何工作非常重要,你可以在教程的末尾下载源程序,但我强烈建议你至少读一遍教程,然后再开始编程. 2.你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何在空间放置模型,并且会知道深度缓存的概念。 3.添加颜色: 作为第二课的扩展,我将叫你如何使用颜色。你将理解两种着色模式,在左图,三角形用的是光滑着色,四边形用的是平面着色。 注意三角形上的颜色是如何混合的。 颜色为OpenGlL 工程增加很多。通过理解平面着色(flat coloring)和平滑着色(smooth coloring),你能显著的改善你的OpenGL Demo的样子。 4.旋转: 在这一课里,我将教会你如何旋转三角形和四边形。左图的三角形沿Y轴旋转,四边形沿着X 轴旋转。 这一章将引入两个变量, rtri 被用来存储三角形的角度, rquad存储四边形的角度。 和容易创建一个多边形组成的场景。让这些物动起来是整个场景变得生动起来。在后面的课程钟我将教给你如何绕屏幕上的一个点旋转物,使得物绕屏幕而不是它的轴转动。 5.3D形: 既然我们已经领会到多边形,方形,色彩和旋转。现在该建立3D物了。我将使用多边形和矩形c创建3D物。这次我们将扩展上一章的教程,并且将三角形转换成一个彩色的棱锥,把正方形变为一个实心正方。棱锥使用混合色,正方每个面使用一种颜色。在3D空间创建物可能很费时间,但是所获得的结果(收获)值得这样做。充分发挥你的想象力吧。 6.纹理映射: 你想要它,它现在就在这里了,那就是 ... 纹理映射!!!在这一章我将教会你如何将一幅位图(bitmap)映射到正方的六个面上去。我们将使用第一章的OpenGL代码来创建工程。创建一个空的窗口比修改上一课的代码更容易。 你将会发现第一章的代码在对于快速创建工程来说是及其有价值的。第一章的代码为你设置好了一切,你所需要做的只是集精力为效果编程。 7.纹理滤波, 光照和键盘控制: 好的,我希望到现在你已经理解了所有的东西,因为这是一个巨大的教程。我想教给你两个新的方法来过滤(filter)你的纹理,简单的光照,键盘控制并且还可能更多 :) .如果你对到这一课为止你所学的东西并不充满信心,那就回头复习一下。玩一下其它课程的代码,不要操之过急。最好专心把每一课学好,而不是蜻蜓点水,只知道如何把东西做出来。 8.混合 有理由等一下,一个来自很酷的Hypercosm的程序员伙伴问(我)他是否可以写一章关于混合的教程。第八课通常正是讲混合的,所以太巧了。这一章教程扩展了第七章。混合是一项很酷的技术 .. 我希望你们能好好享受这一章教程。这一章的作者是Tom Stanis他在这制作一章上花费了很多精力,所以让他知道你觉得怎么样。混合可不是一个好讲的话题。 9.在3D空间移动位图: 这一章覆盖了一些你们要求的主题,你想知道如何移动你在3D屏幕空间上创造的物。你想要知道如何在屏幕上绘制一幅位图,并且位图的黑色部分不会覆盖它后面的东西。你想要简单的动画,想要更多的混合的应用,这一章将教会你所有这些。You'll notice there's no spinning boxes(yaker:很惭愧这一句我不是很明白)。前面的课程覆盖了OpenGL的基础,每一章都基于前面的内容。前面的课程涵盖了基础的OpenGL,每一课都是在前一课的基础上创建的。这一课是前面几课知识的综合,当你学习这课时,请确保你已经掌握了前面几课的知识。 10.加载3D世界,并在其漫游: 你一直期待的教程来了!这一章友一个叫Lionel Brites的伙伴制作。这一课里你讲学到如何导入一个3D世界。代码仍然使用第一章的,但是,课程页面只是解释了新的部分,包括导入3D场景,在3D世界移动。下载VC++代码并且在你阅读教程的同时阅读代码。按[B]键控制混合,[F]键控制滤波,[L]键控制光照(但光并不随场景移动),还有[Page UP]和[Page Down]键。我希望你能喜欢Lionel对网站的贡献。我有空的时候我会让这个教程更容易学习。 11.旗帜效果
第1篇 系统开发基础   包括第1章三维图形世界、第2章OpenGL概述和第3章Oracle与 OCI技术及编程基础。   第1章 介绍了计算机三维图形技术的发展、科学计算可视化技术、三维可视化工程设计的基本概念和发展现状。   第2章 主要对OpenGL的基本概念、OpenGL编程基础和在Visual C++环境下OpenGL基本程序框架的建立进行了讲解,并给出了一个简单的旋转立方程序示例。通过这一章,使读者对OpenGL有初步的概念和了解,对于纹理、显示列表等更深入的编程,我们将通过后续章节进行更详细的讲解和学习。   第3章 主要对Oracle数据库及其特点进行简要的介绍和说明。以Oracle 9i为例,介绍了Oracle数据库的安装步骤和Oracle支持的数据类型。在此基础上,介绍了ADO、Pro*C/C++和OCI三个主要Oracle编程接口,对它们的各自功能和特点进行了详细说明,从功能方面、性能方面、开发难度方面进行了详细分析和比较。重点介绍OCI编程基础、OCI的数据结构、OCI程序的基本结构、OCI执行的步骤,最后给出了在Visual C++6.0环境下开发OCI应用程序的示例。   第2篇 大规模地形三维可视化系统设计与实现   包括第4章地形三维可视化系统框架与OCI类模块设计、第5章地形三维可视化系统的地形渲染实现和第6章地形三维可视化系统项目管理与辅助功能设计。   第4章 在第2章的基础上,完成了基于OpenGL的地形三维可视化系统程序框架的建立,为后续的功能模块开发提供了基础平台;在第3章的基础上,设计了OCI公共类,将所有与OCI有关的数据库操作、数据读取等功能函数实现全部封装在该类,并定义了公共类的全局变量myOci。   第5章 本章对地形三维可视化进行了基本概述,介绍了目前地形三维可视化的主要算法。主要介绍了海量地形与影像纹理数据的常用获取方法,给出了海量地形自分块与影像纹理分块原则和程序实现,以及地形与影像子块调度的程序实现,在此基础上实现了地形的三维可视化;还介绍了真三维立的实现算法和数学模型,在此基础上给出了基于OpenGL的真三维立的程序实现。   第6章 主要讲解了新建项目、打开项目、背景天空的绘制、绘图模式控制的实现方法和程序设计。介绍了基于OpenGL深度缓存的二维屏幕坐标向三维空间坐标的转换算法,实现了对三维空间坐标和空间距离查询,以及查询标识设置的程序设计;最后讲解了基于键盘和鼠标联合控制的三维场景照相机程序模块的实现,实现三维场景的前、后、左、右移动和任意方向的旋转。   第3篇 线路三维可视化系统设计与实现   包括第7章三维交互技术与三维线路数据结构、第8章三维线路设计实现、第9章道路整三维建模和第10章三维漫游的实现。   第7章 主要对三维交互环境进行了介绍,详细讲解了正射投影模式的实现、正射投影模式下场景控制方法和程序设计,以及透视投影模式的实现方法;还讲解了正射投影模式和透视投影模式下三维地面坐标的获取原理、方法,在此基础上,设计了边坡数据结构、桥梁数据结构、隧道数据结构、水沟数据结构及线路数据结构,为实现三维线路设计做好了前期准备。   第8章 主要对线路方案的主要参数设计方法和程序实现、设计交点信息输入实现、线路心线定位方法、设计方案的保存、平面方案的自动生成和程序设计、纵断面设计模块的实现、边坡模型的生成算法、线路路基三维建模方法和实现、隧道三维建模和参数控制、桥梁三维建模和参数控制的程序设计进行了详细讲解。   第9章 主要讲解了道路整三维模型实现,对其的线路封闭区域确定与分割算法、地形块综合数据点计算、分块TIN模型的构网实现、封闭区域内数据点的剔除、整构网的程序实现都进行了详细说明;在纹理管理部分,详细讲解了边坡纹理、路肩纹理、桥梁护坡面纹理、隧道内墙纹理、隧道洞门纹理的程序设计和实现。   第10章 从多个方面对三维漫游的基本概念、程序实现、参数调整和控制进行了讲解,帮助读者学会在三维可视化系统三维漫游模块的程序设计方法;对飞行路径的基本概念、设置方法、插值算法、保存和打开的程序设计,沿飞行路径实现三维漫游的程序设计,沿线路方案漫游的固定高度和相对高度两种模式的程序设计,三维漫游控制和调整的程序设计,以及三维漫游的相关计算都进行了详细的讲解,每一部分都给出了完整的程序代码。   第4篇 线路三维可视化系统辅助功能实现   包括第11章显示模式控制及实现、第12章3D模型载入与应用、第13章系统输出接口与动画录制实现和第14章系统简介与运行实例。   第11章 本章主要对双目立方式、正射投影方式和透视投影方式的显示模型模式控制和实现、时钟指北针的程序设计和实现、缩略图的实现方法和程序设计进行了详细的讲解和说明。   第12章 本章主要对目前常用的3DS、AES、OBJ、MD2、MD3、MS3D等3D模型进行了介绍和说明,并给出了每种3D模型的示例,在此基础上,详细介绍了在OpenGL应用3DS模型的两种主要方法:通过第三方软件对3DS模型进行转换和直接通过程序读取3DS模型;以桥墩3DS模型为例,给出了3DS模型在线路三维场景的应用方法和程序设计实现。   第13章 介绍了DXF文件格式,详细讲解了DXF输出模块的程序设计,实现了线路三维模型输出到DXF文件,可以在AutoCAD打开线路三维模型进行观察;设计了动画录制类,实现将OpenGL动画录制到AVI文件;设计了屏幕图形打印类,实现了对OpenGL屏幕图形的打印,在此基础上,设计录制屏幕图像模块,实现了将OpenGL动画录制为一系列图像并保存到硬盘。   第14章 主要对所建立的三维可视化设计系统的主要特点和功能进行了介绍,对线路可视化设计系统加以总结,并对相应的功能模块进行集说明,使读者能够对整个三维可视化设计有更加清晰的思路和概念,最后给出系统运行实例。   附录   包括附录A:相关数学程序模块;附录B:OpenGL核心函数库和应用函数库;附录C:OpenGL常用编程技巧;附录D:OpenGL资源网站。
OpenGL(Graphics Library,GL图形库)图形系统是图形硬件的一个软件接口,它允许我们创建交互性的程序,产生移动三维物的彩色图像。使用OpenGL,我们可以对计算机图形技术进行控制,产生逼真的图像或者虚构出现实世界没有的图像。本书解释了如何使用OpenGL图形系统进行编程,实现所需要的视觉效果。   本书内容   本书共分15章。前5章描述了一些基本信息,读者需要理解这些内容,才能在场景绘制正确着色和光照的三维物。   ·第1章对OpenGL可以实现的功能进行简要的介绍。该章还提供了一个简单的OpenGL程序,并介绍需要了解的一些基本编程细节,有助于学习后续章节的内容。   ·第2章解释如何创建一个物的三维几何图形描述,并最终把它绘制到屏幕上。   ·第3章描述三维模型在绘制到二维屏幕之前如何进行变换。我们可以控制这些变换,显示模型的特定视图。   ·第4章描述如何指定颜色以及用于绘制的着色方法。   ·第5章解释如何控制围绕一个物的光照条件,以及这个物如何对光照作出反应(也就是说,它是如何反射或吸收光线的)。光照是一个重要的主题,因为物在没有光照的情况下看上去往往没有立感。   接下来的几章说明如何对三维场景进行优化以及如何添加一些高级特性。在没有精通OpenGL之前,读者可以选择不使用这些高级特性。有些特别高级的主题在出现时会有特殊的标记。   ·第6章描述创建逼真场景所需要的一些基本技巧:alpha混合(创建透明物)、抗锯齿(消除锯齿状边缘)、大气效果(模拟雾和烟雾)以及多边形偏移(在着重显示填充多边形的边框时消除不良视觉效果)。   ·第7章讨论如何存储一系列的OpenGL命令,用于在以后执行。我们可以使用这个特性来提高OpenGL程序的性能。   ·第8章讨论如何操作表示位图或图像的二维数据。位图的一种常见用途就是描述字的字符。   ·第9章解释如何把称为纹理的一维、二维和三维图像映射到三维物表面。纹理贴图可以实现许多非常精彩的效果。   ·第10章描述OpenGL实现可能存在的所有缓冲区,并解释如何对它们进行控制。我们可以使用这些缓冲区实现诸如隐藏表面消除、模板、屏蔽、运动模糊和景深聚焦等效果。   ·第11章显示了如何使用GLU(OpenGL Utility Library,OpenGL工具函数库)的分格化和二次方程函数。   ·第12章介绍生成曲线和表面的高级技巧。   ·第13章说明如何使用OpenGL的选择机制来选择屏幕上的一个物。此外,该章还解释了反馈机制,它允许我们收集OpenGL所产生的绘图信息,而不是在屏幕上绘制。   ·第14章描述如何用巧妙的或意想不到的方法来使用OpenGL,产生一些有趣的结果。这些技巧是通过对OpenGL及其技术前驱Silicon Graphics IRIS图形函数库的多年应用和实践总结出来的。   ·第15章讨论OpenGL 2.0所引入的变化,包括对OpenGL着色语言的介绍。OpenGL着色语言通常又称为GLSL,它允许对OpenGL的顶点和片断处理阶段进行控制。这个特性可以极大地提高图像的质量,充分OpenGL的计算威力。   另外,本书还包括几个非常实用的附录:

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧