博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用opengl进行球体的建模
阅读量:6977 次
发布时间:2019-06-27

本文共 1561 字,大约阅读时间需要 5 分钟。

  今天用opengl建模了一个球体,接下来简单的介绍一下自己的实现方法。

    先用一张比较容易理解的图来说明。

如图所示,假设要建模一个单位球体,球上任意一点的坐标都可由图中所示公式表示。

接下来的代码将生成15层,每层33个顶点。

for (float phi = phi_start+ step_size; phi < phi_end-1e-5; phi += step_size)    {        float cos_phi = cosf(phi);                float sin_phi = sinf(phi);        for (float theta = 0.f; theta < theta_end+1e-5f; theta += step_size)        {            float cos_theta = cosf(theta);            float sin_theta = sinf(theta);            vec_ver.push_back(Vertex(Vector3f
(cos_theta*cos_phi, sin_phi, sin_theta*cos_phi),Vector2f
(theta*pi2_inverse, phi*pi_inverse + 0.5f))); } }

以上代码生成了所有顶点,暂且忽略纹理坐标

注意浮点数的比较需要特殊处理

 

接下来需要生成索引坐标

i表示该点的位置,i+1为在该点右边的位置,i+33为在该点上面的位置,i+33+1,为在右上边的位置

for (int hlevel = 0; hlevel < 14; hlevel++)    {        int index = (hlevel << 5)+hlevel; //hlevel * 33;        for (int rlevel = 0; rlevel < 32; rlevel++)        {            int now_index = index + rlevel;            int now_index_right = now_index + 1;                        int now_index_up = index + rlevel + 33;            int now_index_right_up = now_index_right + 33;            vec_index.push_back(now_index);            vec_index.push_back(now_index_up);            vec_index.push_back(now_index_right_up);            vec_index.push_back(now_index);            vec_index.push_back(now_index_right_up);            vec_index.push_back(now_index_right);        }    }

以上代码就可以生成所有的索引上,注意我们采用的是左手坐标系。

 

接下来思考一个问题,纹理坐标要如何表示,实际上这并没有一个固定的表示方法,根据需求变化。

我采用的方法是

——

转载于:https://www.cnblogs.com/creativityroom/p/6704900.html

你可能感兴趣的文章
WCF学习笔记之地址(Address)
查看>>
strtus2.0实现下载
查看>>
驱动调试(一)-printk
查看>>
第七章
查看>>
郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.3 岭回归...
查看>>
Lifting the Stone(多边形重心)
查看>>
【floyed】【HDU1217】【Arbitrage】
查看>>
Java 06
查看>>
13 SELECT 以外的内容
查看>>
vue2.0 keep-alive最佳实践
查看>>
百度地图API详解之地图坐标系统
查看>>
Linux 源码阅读工具----------Source Insight 经典教程
查看>>
Android之Service
查看>>
调制信号
查看>>
python网络爬虫笔记(八)
查看>>
判断CPU是大端还是小端
查看>>
.htaccess的应用实例
查看>>
使用 Apache OpenJPA 开发 EJB 3.0 应用,第 5 部分: 实体标识的自动生成
查看>>
elasticsearch(1) 安装和使用
查看>>
Windows 平台下局域网劫持测试工具 – EvilFoca
查看>>