#include<Windows.h>
#include<osg/Node>
#include<osg/Geode>
#include<osg/Group>
#include <osg/Geometry>
#include<osgUtil/Optimizer>
#include <cmath>
#include<iostream>
#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
#include<osgDB/WriteFile>
#define PI 3.1415926
osg::Vec3 pointSet[100000];
#define N 301
int main()
{
float phi = (sqrt(5) + 1) / 2 - 1;
//float phi = 0.617;
float xTemp,yTemp,zTemp;
for (int i=1;i<= N;i++)
{
zTemp = (2*(float)i-1)/ N -1;
xTemp = sqrt(1 - zTemp*zTemp)*cos(2 * PI*(float)i*phi);
yTemp = sqrt(1 - zTemp*zTemp)*sin(2 * PI*(float)i*phi);
pointSet[i - 1].set(xTemp, yTemp, zTemp);
pointSet[i - 1].normalize();
}
std::ofstream outf;
outf.open("shotEye.txt", std::ios::trunc);
for (int i = 0; i < N; i++)
{ outf << pointSet[i]._v[0] << "\t" << pointSet[i]._v[1] << "\t" << pointSet[i]._v[2] << std::endl; } outf.close(); osg::ref_ptr<osg::Vec3Array> vertex = new osg::Vec3Array;
osg::ref_ptr<osg::Vec3Array> normal = new osg::Vec3Array;
for (int i=0;i<N;i++)
{
vertex->push_back(pointSet[i]);
normal->push_back(pointSet[i]);
}
osg::ref_ptr<osg::Vec4Array> colorArray = new osg::Vec4Array;
colorArray->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ref_ptr<osg::Group> node = new osg::Group;
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry; geometry->setVertexArray(vertex.get());
geometry->setNormalArray(normal.get());
geometry->setColorArray(colorArray.get());
geometry->setColorBinding(osg::Geometry::BIND_OVERALL);
geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS, 0, N));
geode->addDrawable(geometry);
node->addChild(geode);
osgUtil::Optimizer optimizer;
optimizer.optimize(node.get()); viewer->setSceneData(node.get());
viewer->realize();
viewer->run();
return 0;
}

 效果图:

 实现原理来自:

https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere/26127012#26127012

https://zhuanlan.zhihu.com/p/25988652

https://zhuanlan.zhihu.com/p/25998937

OSG实现利用菲波那契网格(Fibonacci lattice 或 Fibonacci grid)均分球面的更多相关文章

  1. 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据

    /*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0 ...

  2. e8_4输出菲波拉契数列的前10项

    program fbnq;{输出菲波拉契数列的前10项} var a:..] of integer; i:integer; begin a[]:=; a[]:=; do a[i]:=a[i-]+a[i ...

  3. OpenJudge 2753 菲波那契数列

    1.链接地址: http://bailian.openjudge.cn/practice/2753 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 菲波那契数列是指这样的数列 ...

  4. Contest20140906 ProblemC 菲波拉契数制 DP

    C.菲波拉契数制时间:2s   内存:65536KB我们定义如下数列为菲波拉契数列:                    F (1) = 1                    F (2) = 2 ...

  5. UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>

    L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  6. UESTC_菲波拉契数制 2015 UESTC Training for Dynamic Programming<Problem E>

    E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. js获取菲波那契数列的第N个元素

    菲波那契数列,大致可以描叙为a(n) = a(n-1) + a(n-2) (a >=2).类似于这样[1, 1, 2, 3, 5, 8, 13 ...]. 具体大家可以百度一下.下面我们来用js ...

  8. 递推-练习1--noi1760 菲波那契数列(2)

    递推-练习1--noi1760 菲波那契数列(2) 一.心得 二.题目 1760:菲波那契数列(2) 总时间限制:  1000ms 内存限制:  65536kB 描述 菲波那契数列是指这样的数列: 数 ...

  9. 递归--练习6--noi1755菲波那契数列

    递归--练习6--noi1755菲波那契数列 一.心得 二.题目 1755:菲波那契数列 总时间限制:  1000ms 内存限制:  65536kB 描述 菲波那契数列是指这样的数列: 数列的第一个和 ...

随机推荐

  1. Android开发 AAC的ADTS头解析[转载]

    原文地址:https://www.jianshu.com/p/b5ca697535bd 1. ADTS(Audio Data Transport Stream)头之于AAC AAC音频文件的每一帧都由 ...

  2. 钉钉小程序----使用阿里的F2图表

    在钉钉小程序中使用F2的图表遇见很多问题 不能点击或者点击错乱的问题还没有解决,因为我解决不了........................... ------------------------- ...

  3. flask 使用hashlib加密

    flask 使用hashlib加密 import hashlib #引入hashlib #使用方法: password = ' sha1 = hashlib.sha1() #使用sha1加密方法,你还 ...

  4. Iview+Vue CDN NetMvC 简单demo

    1.引用相关js文件 2.菜单采用静态数据加载 3.效果展示 4.代码下载 https://github.com/sulin888/NetVueAdmin.git

  5. BZOJ 1089 (SCOI 2003) 严格n元树

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...

  6. 同步异步,异步回调,线程队列,线程时间Event

    同步异步-阻塞非阻塞 阻塞-非阻塞 指的是程序的运行状态 阻塞:当程序执行过程中遇到了IO操作,在执行IO操作时,程序无法继续执行其他代码,称为阻塞. 非阻塞:程序在正常运行没有遇到IO操作,或者通过 ...

  7. icon 的前生今世 & iconfont 的晋级之路

      布吉岛为啥起了个这么文(dou)艺(bi)的名字,话不多说,开始总结

  8. 20.multi_case03

    # 多线程 import threading import time class myThread(threading.Thread): def __init__(self, threadID, na ...

  9. <scrapy爬虫>爬取360妹子图存入mysql(mongoDB还没学会,学会后加上去)

    1.创建scrapy项目 dos窗口输入: scrapy startproject images360 cd images360 2.编写item.py文件(相当于编写模板,需要爬取的数据在这里定义) ...

  10. google浏览器插件开发

    官方开发文档 随便找个文件夹新建插件所需文件 目录结构 pluginName manifest.json(必须)                          一个manifest文件 *.htm ...