之前实现了简单的细分曲线,即Chaikin细分算法,现在准备实现DooSabine细分曲面

我这里借助http://www.idav.ucdavis.edu/education/CAGDNotes/CAGDNotes/Doo-Sabin/Doo-Sabin.html

这篇文章中的例子,首先需要先绘制出实例中的这个图

两个小时过去了。。我终于画出这幅图来了。。给跪,其中一定要用到这里面的关于polygon模式的语句

void glPolygonMode(GLenum face, GLenum mode);

其中GL_FRONT for front-facing polygons, GL_BACK for back-facing polygons, or GL_FRONT_AND_BACK for front- and back-facing polygons
mode有GL_POINTGL_LINE, and GL_FILL三种,其中初始状态是GL_FILL,正反两面都是
#include<GL/GLUT.H>
#include <windows.h>
#include <math.h>
#include <gl/GL.h>       static const GLfloat vertex_list[2][8][3] = {{{ -0.1f, 0.5f, 0.3f }, { -0.1f, 0, 0.3f }, { -0.6f, 0, 0.3f }, { -0.6f, -0.5f, 0.3f }, { 0.6f, -0.5f, 0.3f }, { 0.6f, 0, 0.3f }, { 0.1f, 0, 0.3f }, { 0.1f, 0.5f, 0.3f } },{ { -0.1f, 0.5f, -0.3f }, { -0.1f, 0, -0.3f }, { -0.6f, 0, -0.3f }, { -0.6f, -0.5f, -0.3f }, { 0.6f, -0.5f, -0.3f }, { 0.6f, 0, -0.3f }, { 0.1f, 0, -0.3f }, { 0.1f, 0.5f, -0.3f } }
};void myDisplay(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glEnable(GL_DEPTH_TEST);glRotatef(60, 1, 1, 1);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(100.0f, 1.0f, 1.0f, 10.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, -0.8, 1.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);/*glRotatef(-60, -1, 1, 1);*/glColor3f(0, 0, 1);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glBegin(GL_POLYGON);for (int j = 0; j < 8; ++j)     // 每个面有八个顶点,循环八次    glVertex3fv(vertex_list[0][j]);glEnd();glBegin(GL_POLYGON);for (int j = 0; j < 8; ++j)     // 每个面有八个顶点,循环八次    glVertex3fv(vertex_list[1][j]);glEnd();//绘制侧面的面glColor3f(0, 0, 1);for (int i = 0; i < 8; i++)      // 有八个面,循环八次    {if (i == 7){glBegin(GL_QUADS);glVertex3fv(vertex_list[0][i]);glVertex3fv(vertex_list[0][0]);glVertex3fv(vertex_list[1][0]);glVertex3fv(vertex_list[1][i]);glEnd();}else{glBegin(GL_QUADS);glVertex3fv(vertex_list[0][i]);glVertex3fv(vertex_list[0][i + 1]);glVertex3fv(vertex_list[1][i + 1]);glVertex3fv(vertex_list[1][i]);glEnd();}}glFlush();
}int main(int argc, char *argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("opengl1");glutDisplayFunc(&myDisplay);glutMainLoop();return 0;
}

学到这里突然要发现需要学习好多数据结构的东西。。我觉得有必要专门写一篇关于数据结构和图形表示的博客。。那这一块的东西还是暂时放一放。马上搞定了回来补

#include<GL/GLUT.H>
#include <windows.h>
#include <math.h>
#include <gl/GL.h>       static const GLfloat vertex_list[2][8][3] = {{{ -0.1f, 0.5f, 0.3f }, { -0.1f, 0, 0.3f }, { -0.6f, 0, 0.3f }, { -0.6f, -0.5f, 0.3f }, { 0.6f, -0.5f, 0.3f }, { 0.6f, 0, 0.3f }, { 0.1f, 0, 0.3f }, { 0.1f, 0.5f, 0.3f } },{ { -0.1f, 0.5f, -0.3f }, { -0.1f, 0, -0.3f }, { -0.6f, 0, -0.3f }, { -0.6f, -0.5f, -0.3f }, { 0.6f, -0.5f, -0.3f }, { 0.6f, 0, -0.3f }, { 0.1f, 0, -0.3f }, { 0.1f, 0.5f, -0.3f } }
};void myDisplay(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glEnable(GL_DEPTH_TEST);glRotatef(60, 1, 1, 1);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(100.0f, 1.0f, 1.0f, 10.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, -0.8, 1.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);/*glRotatef(-60, -1, 1, 1);*/glColor3f(0, 0, 1);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glBegin(GL_POLYGON);for (int j = 0; j < 8; ++j)     // 每个面有八个顶点,循环八次    glVertex3fv(vertex_list[0][j]);glEnd();glBegin(GL_POLYGON);for (int j = 0; j < 8; ++j)     // 每个面有八个顶点,循环八次    glVertex3fv(vertex_list[1][j]);glEnd();//绘制侧面的面glColor3f(0, 0, 1);for (int i = 0; i < 8; i++)      // 有八个面,循环八次    {if (i == 7){glBegin(GL_QUADS);glVertex3fv(vertex_list[0][i]);glVertex3fv(vertex_list[0][0]);glVertex3fv(vertex_list[1][0]);glVertex3fv(vertex_list[1][i]);glEnd();}else{glBegin(GL_QUADS);glVertex3fv(vertex_list[0][i]);glVertex3fv(vertex_list[0][i + 1]);glVertex3fv(vertex_list[1][i + 1]);glVertex3fv(vertex_list[1][i]);glEnd();}}glFlush();
}int main(int argc, char *argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("opengl1");glutDisplayFunc(&myDisplay);glutMainLoop();return 0;
}

这篇博文没有写完。。突然发现要去补数据结构的课。。,好了不多说了,去补课了

DOO-SABIN 细分曲面(编辑中)相关推荐

  1. OpenGL 4.0的Tessellation Shader(细分曲面着色器)

    细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:Rendering Pipeline Overview - Op ...

  2. Tessellation Shader(细分曲面着色器)

    Tessellation Shader)是OpenGLES4.0引入的,处于顶点着色器阶段的下一个阶段,它是由ATI在2001年率先设计出来的. 细分曲面着色器 直到这个阶段,对于操作几何图元而言,只 ...

  3. SketchUp中的细分曲面椅子建模教程

    作者:TutorialsUp 今天分享的是关于 SketchUp 细分曲面椅子建模教程 作者根据椅子设计的正.侧.俯三视图,在SketchUp中进行3D建模. 复杂的曲面与异形对象并不是SketchU ...

  4. Q79:怎么用三角形网格(Triangle Mesh)细分曲面

    79.1 思路分析 我们先以球心在原点的单位球面为例来说明细分过程. 79.2 C++代码实现 79.2.1 tessellate_flat_sphere()的实现 其实,实现起来还挺简单.只需要根据 ...

  5. 7.物体的几何表示——细分曲面

    ♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥ ...

  6. maya多边形建模怎样做曲面_maya细分曲面到多边形,MAYA

    修改 > 转化 > 细分曲面到多边形(Modify > Convert > Subdiv to Polygons) 细分方法(Tessellation Method) 选择以下 ...

  7. alter table add column多个字段_WordPress 在文章列表快速编辑中编辑自定义字段

    在快速编辑中添加自定义字段,通常我们不需要在 WordPress 后台文章列表的"快速编辑"菜单中进行更改,但有的时候如果可以把常用的设置添加到"快速编辑"菜单 ...

  8. OpenGL Tessellation细分曲面的实例

    OpenGL Tessellation细分曲面的实例 先上图,再解答. 正常显示,细分之前 按下M键,细分之后 完整主要的源代码 源代码剖析 先上图,再解答. 正常显示,细分之前 按下M键,细分之后 ...

  9. 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...

最新文章

  1. public medical image database
  2. C/C++ ini配置文件的格式及如何读写ini配置文件
  3. spring depends-on 不起作用
  4. 为什么需要建设中台?
  5. INTERSPEECH2020 语音情感分析论文之我见
  6. docker 安装_Docker-安装
  7. Thinkphp列表搜索排序-----查
  8. Css/Js推荐类库
  9. Django:MySQL查询结果为datetime.date无法转换为JSON
  10. 3850x5服务器装系统,IBM X3850 X5服务器ESXi 5安装配置全过程——安装
  11. Laravel 教程 - 实战 果酱社区 开源电商 API 系统
  12. 微博 用户画像_新浪微博数据采集方法以及数据分析(用户画像) - 八爪鱼采集器...
  13. 飞鱼星路由器配置端口映射
  14. 运行tomcat 时报错,提示无法找到相关的jar包 Publishing failed with multiple errors Error reading file
  15. Matplotlib:设置坐标轴范围,刻度,位置,自定义刻度名称,添加数据标签
  16. 小米会成为三星没落的因素吗?
  17. 将Android布局转成图片,并保存到本地(解决JPEG图片因透明度变黑问题)
  18. 由旋转矩阵求旋转中心
  19. 计算机谣言之网线的做法
  20. unity+opencv实时检测人脸及眼睛区域检测

热门文章

  1. 如何用三个月时间获得三年经验
  2. Civil 纵断面 profile 标签样式ProfileLabelStyleSet 异常处理
  3. android学音标软件,英语音标学习助手
  4. K210 Mx-yolov3模型训练和物体识别
  5. 亲和数c语言,亲和数C语言..
  6. 又发闪电贷价格操纵攻击?—— welnance.finance事件分析
  7. Jedis的使用示范
  8. 数字电路与C语言基础
  9. 黑客入侵微软邮件服务器、Windows零日漏洞可获管理员权限|11月23日全球网络安全热点
  10. 两小球冲突,仿优信,拖动小球