本文介绍了使用两种方法opengl画一个球体,一个是一个球形点位置计算,然后绘制出,还有一个glut套件自带功能。

一、直接绘制法

直接贴代码,解释都写在凝视里了。绘制时先移动好坐标系。然后调用这方法画即可。

<span style="font-family:SimSun;font-size:12px;">//球心坐标为(x。y。z),球的半径为radius,M,N分别表示球体的横纵向被分成多少份
void drawSphere(GLfloat xx, GLfloat yy, GLfloat zz, GLfloat radius, GLfloat M, GLfloat N)
{
float step_z = PI/M; <span style="white-space: pre;"> </span>//z方向每次步进的角度
float step_xy = 2*PI/N; <span style="white-space: pre;"> </span>//x,y平面每次步进的角度
float x[4],y[4],z[4]; <span style="white-space: pre;"> </span>//用来存坐标 float angle_z = 0.0; <span style="white-space: pre;"> </span>//起始角度
float angle_xy = 0.0;
int i=0, j=0;
glBegin(GL_QUADS);
for(i=0; i<M; i++)
{
angle_z = i * step_z; <span style="white-space: pre;"> </span>//每次步进step_z for(j=0; j<N; j++)
{
angle_xy = j * step_xy; <span style="white-space: pre;"> </span>//每次步进step_xy
<span style="white-space: pre;"> </span>//整个的过程能够想象3D打印机,一层一层的画出来
x[0] = radius * sin(angle_z) * cos(angle_xy); <span style="white-space: pre;"> </span>//第一个小平面的第一个顶点坐标
y[0] = radius * sin(angle_z) * sin(angle_xy);
z[0] = radius * cos(angle_z); x[1] = radius * sin(angle_z + step_z) * cos(angle_xy); <span style="white-space: pre;"> </span>//第一个小平面的第二个顶点坐标,以下相似
y[1] = radius * sin(angle_z + step_z) * sin(angle_xy);
z[1] = radius * cos(angle_z + step_z); x[2] = radius*sin(angle_z + step_z)*cos(angle_xy + step_xy);
y[2] = radius*sin(angle_z + step_z)*sin(angle_xy + step_xy);
z[2] = radius*cos(angle_z + step_z); x[3] = radius * sin(angle_z) * cos(angle_xy + step_xy);
y[3] = radius * sin(angle_z) * sin(angle_xy + step_xy);
z[3] = radius * cos(angle_z);
<span style="white-space: pre;"> </span>//至此得到一个平面的4个顶点
for(int k=0; k<4; k++)
{
glVertex3f(xx+x[k], yy+y[k],zz+z[k]); <span style="white-space: pre;"> </span>//画出这个平面
} <span style="white-space: pre;"> </span>
} <span style="white-space: pre;"> </span>//循环画出这一层的平面,组成一个环
} <span style="white-space: pre;"> </span>//z轴++,画出剩余层
glEnd(); <span style="white-space: pre;"> </span>//OK
}</span>

二、glut工具箱函数

void glutWireSphere(GLdouble radius, GLint slices,
GLint stacks);  丝状球

void glutSolidSphere(GLdouble radius, GLint slices,
GLint stacks); 实心球

我们以丝状球为例。

函数原型:

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

參数介绍:

radius

球体的半径

slices

以Z轴上线段为直径分布的圆周线的条数(将Z轴看成地球的地轴。类似于经线)

stacks

环绕在Z轴周围的线的条数(类似于地球上纬线)

相对于半径,后两个參数赋予较大的值。 渲染出来的球体表面看不出来线条。

此时众多线条已经构成比較紧密的球面。

在vs2012等高版本号的IDE中执行会出现安全性错误“error LNK2026 模块对于 SAFESEH 映像是不安全的”

解决方法:http://jingyan.baidu.com/article/47a29f24334312c01423992e.html

版权声明:本文博主原创文章,博客,未经同意不得转载。

opengl 扳回一球的更多相关文章

  1. 【OpenGL(SharpGL)】支持任意相机可平移缩放的轨迹球实现

    [OpenGL(SharpGL)]支持任意相机可平移缩放的轨迹球 (本文PDF版在这里.) 在3D程序中,轨迹球(ArcBall)可以让你只用鼠标来控制模型(旋转),便于观察.在这里(http://w ...

  2. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. 【转】OPENGL基本API概述

    本文信息资源来源于网络,欢迎转载!转载时请保留本文链接(http://www.shopliyang.com.cn/)! OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库. gl是核 ...

  4. OpenGL阴影,Shadow Volumes(附源程序,使用 VCGlib )

    实验平台:Win7,VS2010 先上结果截图:    本文是我前一篇博客:OpenGL阴影,Shadow Mapping(附源程序)的下篇,描述两个最常用的阴影技术中的第二个,Shadow Volu ...

  5. OpenGL管线(用经典管线代说着色器内部)

    图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性.OpenGL作为图形硬件标准,是最通用的图形管线版本.本文用自顶向下的思路来简单总结OpenGL图形管 ...

  6. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  7. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  8. opengl纹理映射总结

    大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...

  9. SharpGL学习笔记(十四) 材质:十二个材质球

    材质颜色 OpenGL用材料对光的红.绿.蓝三原色的反射率来近似定义材料的颜色.象光源一样,材料颜色也分成环境.漫反射和镜面反射成分,它们决定了材料对环境光.漫反射光和镜面反射光的反射程度.在进行光照 ...

随机推荐

  1. 使用require.js和backbone实现简单单页应用实践

    前言 最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成Web App.看到了叶大(http://www.cnblogs.com/yexiaochai/)对backbone的描述和 ...

  2. 使用 Cordova+Visual Studio 创建跨平台移动应用(2)

    目前开发移动应用有三种模式:Native.Hybird.Web,若要开发跨平台的移动应用,又希望与本地API交互,那么Hybird是一个非常好的选择.       作为一个.Net程序员,可以使用熟悉 ...

  3. 客户端上显示csdn上的各类别下的的文章列表 (制作csdn app 三)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23597229 今天将在Android 使用Fragment,ViewPagerI ...

  4. 【程序员联盟】官网上线啦!coderunity.com

    内容简介 欢天喜地,[程序员联盟]官网上线咯(此处应该有鸡蛋丢过来...) [程序员联盟]官网 大家也许会问:“这几天小编都没出文章,跑哪里happy去啦?是不是偷懒去了?” 小编:“臣妾冤枉啊.” ...

  5. 【Linux探索之旅】第二部分第四课:文件操纵,鼓掌之中

    内容简介 1.第二部分第四课:文件操纵,鼓掌之中 2.第二部分第五课预告:用户和权限 文件操纵,鼓掌之中 既然上一课我们学习了Linux中的文件组织方式,那么现在就该是玩弄,啊不,是操纵它们的时候了. ...

  6. 数据结构 - 双链表(C++)

    // ------DoublyLinkedList.h------ template <class T> class DNode { private: // 指向左.右结点的指针 DNod ...

  7. HDU 4359 Easy Tree DP? 带权二叉树的构造方法 dp

    题意: 给定n deep 1.构造一个n个节点的带权树,且最大深度为deep,每一个节点最多仅仅能有2个儿子 2.每一个节点的值为2^0, 2^1 ··· 2^(n-1)  随意两个节点值不能同样 3 ...

  8. 使用JavaScript检测浏览器

    假设你真的需要检测浏览器的类型,使用JavaScript非常easy达到. View Demo Download Source from GitHub JavaScript有一个navigator的标 ...

  9. MVC 使用IBatis.net

    IBatis.net在asp.net MVC下的使用 IBatis.net 是2001年发起的开源项目,它是一个轻量级的ORM框架,现在IBatisNET已经是属于Apache下的一个子项目了,最新版 ...

  10. Hybrid app 发展历程

    距离上一篇<基于微信 js-sdk 的简单应用>已经快一年了,说来真是惭愧.上次不久之后便换了工作,一直处于比较忙的状态.其次后面酣畅一段时间都没有从事移动相关的工作.直到今年3月份开始, ...