DOO-SABIN 细分曲面(编辑中)
之前实现了简单的细分曲线,即Chaikin细分算法,现在准备实现DooSabine细分曲面
我这里借助http://www.idav.ucdavis.edu/education/CAGDNotes/CAGDNotes/Doo-Sabin/Doo-Sabin.html
这篇文章中的例子,首先需要先绘制出实例中的这个图
两个小时过去了。。我终于画出这幅图来了。。给跪,其中一定要用到这里面的关于polygon模式的语句
void glPolygonMode(
GLenum face, GLenum mode)
;
GL_POINT
, GL_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 细分曲面(编辑中)相关推荐
- OpenGL 4.0的Tessellation Shader(细分曲面着色器)
细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:Rendering Pipeline Overview - Op ...
- Tessellation Shader(细分曲面着色器)
Tessellation Shader)是OpenGLES4.0引入的,处于顶点着色器阶段的下一个阶段,它是由ATI在2001年率先设计出来的. 细分曲面着色器 直到这个阶段,对于操作几何图元而言,只 ...
- SketchUp中的细分曲面椅子建模教程
作者:TutorialsUp 今天分享的是关于 SketchUp 细分曲面椅子建模教程 作者根据椅子设计的正.侧.俯三视图,在SketchUp中进行3D建模. 复杂的曲面与异形对象并不是SketchU ...
- Q79:怎么用三角形网格(Triangle Mesh)细分曲面
79.1 思路分析 我们先以球心在原点的单位球面为例来说明细分过程. 79.2 C++代码实现 79.2.1 tessellate_flat_sphere()的实现 其实,实现起来还挺简单.只需要根据 ...
- 7.物体的几何表示——细分曲面
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥ ...
- maya多边形建模怎样做曲面_maya细分曲面到多边形,MAYA
修改 > 转化 > 细分曲面到多边形(Modify > Convert > Subdiv to Polygons) 细分方法(Tessellation Method) 选择以下 ...
- alter table add column多个字段_WordPress 在文章列表快速编辑中编辑自定义字段
在快速编辑中添加自定义字段,通常我们不需要在 WordPress 后台文章列表的"快速编辑"菜单中进行更改,但有的时候如果可以把常用的设置添加到"快速编辑"菜单 ...
- OpenGL Tessellation细分曲面的实例
OpenGL Tessellation细分曲面的实例 先上图,再解答. 正常显示,细分之前 按下M键,细分之后 完整主要的源代码 源代码剖析 先上图,再解答. 正常显示,细分之前 按下M键,细分之后 ...
- 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...
最新文章
- public medical image database
- C/C++ ini配置文件的格式及如何读写ini配置文件
- spring depends-on 不起作用
- 为什么需要建设中台?
- INTERSPEECH2020 语音情感分析论文之我见
- docker 安装_Docker-安装
- Thinkphp列表搜索排序-----查
- Css/Js推荐类库
- Django:MySQL查询结果为datetime.date无法转换为JSON
- 3850x5服务器装系统,IBM X3850 X5服务器ESXi 5安装配置全过程——安装
- Laravel 教程 - 实战 果酱社区 开源电商 API 系统
- 微博 用户画像_新浪微博数据采集方法以及数据分析(用户画像) - 八爪鱼采集器...
- 飞鱼星路由器配置端口映射
- 运行tomcat 时报错,提示无法找到相关的jar包 Publishing failed with multiple errors Error reading file
- Matplotlib:设置坐标轴范围,刻度,位置,自定义刻度名称,添加数据标签
- 小米会成为三星没落的因素吗?
- 将Android布局转成图片,并保存到本地(解决JPEG图片因透明度变黑问题)
- 由旋转矩阵求旋转中心
- 计算机谣言之网线的做法
- unity+opencv实时检测人脸及眼睛区域检测