opengl实现bezier、b曲线和曲面,16个控制点的4*4bezier块;最后可以看到茶壶teapot的实现

2023-10-31

1、你的工程可能还不能跑起来,一般的错误按照网页修改就可以了

可是还是会有个bug  。Error6error C2039: 'exit' : is not a member of '`global namespace,

解决方法,a这是编译器的问题,有时候看人品,所以可以换一个低版本的编译器  b直接把sstdlib中的using ::exit;直接隐掉;

                c添加#include“windows.h”中,放在这个cpp的第一行,

接着调试过去之后,就可以按照bug提示添加.h和.cpp。

教你在vc中命令行调试;打开vc,project->propreties之后;


 

在command Arguments 输入命令行即可;

2,添加完之后,现在可以画线了实现paint函数;

画线的步骤,我是这样做的,在spline里实现画点,在curve中实现画直线,在对应的bspline或bezierspline中实现画曲线;这是一个继承关系,C++的多态性质,你知道的;当然你还可以直接在bspline或bezierspline中直接实现paint();这个过程你还要考虑在那保存点和点的数量最好在spline类里面实现;

画线还是比较简单的,就是实现一个paint函数,可能你已经做出来四个控制点的曲线,那么多个控制点的,也就简单了

3实现Bezier曲线和BSplines曲线之间的转换

 Q(t) = Gbezier  Bbezier   T = Gbspline  Bbspline   T

例如;bezier 转b

这主要根据同样的曲线,去求另外同样曲线的控制点,这就要矩阵的运算了(T可以约去了,你知道吧,不知道看看线代)

Gbezier  bezier控制点矩阵 ;

而 Bbezier 、 Bbspline  是已经知道的;

那么你就可以求Gbspline ( b控制点矩阵了吧)

这简单的矩阵运算你会的

求的了控制点,画线你会吧,1中做过了。至于>4个控制点的,自己弄去吧

3,为了添加删除点,接着实现moveControlPoint(...), addControlPoint(...) 和 deleteControlPoint(...)函数来完成曲线编辑器

这比较简单,不说了

4旋转曲面实现,这时你需要实现OutputTriangles(...),在哪里实现,在对应的曲线,这里你会使用到TriangleNet类

里面的参数什么意思呢?这个是个问题,我也纠结了,不过我纠结了,你就不用纠结了;呵呵

 _u_tess代表了旋转的次数( -revolution_tessellation) ; _v_tess,旋转面的分割的个数(-curve_tessellation <n>,这里-curve_tessellation <n>的值可以直接使用吗?当然是不可以的,你要思考,算了我告诉你吧;比如是bezier,7个点控制的,那样就可以画2条bezier曲线,如果-curve_tessellation <n>=4,那样 _v_tess= ((7/4)+1)*4;你懂了吧)

5实现4*4的Bezier块,这个有了第四步的经验你就很好做了,先给你个公式;

  

 

公式都给了,会求点了吧

P代表了控制点,有了这个公式u、v都是从0到1变化的,怎么变和-patch_tessellation <n>有关的,假如-patch_tessellation <n>=4,那就是bezier分为4段,就是要5个点,这样就会计算出25个点了。

这些工作都做完了,好了你就可以看到teapot了,这是mit,图形学作业8。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opengl实现bezier、b曲线和曲面,16个控制点的4*4bezier块;最后可以看到茶壶teapot的实现 的相关文章

  • 对 VBO 中的特定三角形使用不同的纹理

    我有 9 个由三角形组成的四边形 如下所示 我在用着VBO存储有关它们的数据 它们的位置和纹理坐标 我的问题是 是否可以仅使用一个来使四边形 5 具有与其余四边形不同的纹理VBO and shader 绿色代表纹理 1 黄色代表纹理 2 到
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG
  • 使用 openGL、SOIL 加载图像

    我尝试了很多使用 SOIL 在 openGL 中加载和显示图像的示例 运行下面的源代码时 它仅显示一个没有图像的白色四边形 我尝试打开一个名为 foto 的图像 我将图像文件放在程序的文件夹中 bool keyStates new bool
  • 退出 glutFullScreen()

    我不明白为什么当我按 f 时它进入全屏但不退出全屏 在这个方法的开头我已经设置了bool fullscreen false 这是我的切换代码 case f toggle screenmode if fullscreen glutFullSc
  • 奇怪的问题,除非单击鼠标,否则按钮不会重新启用

    我的应用程序是使用 WPF 中的 MVVM 模式编写的 我的所有按钮都使用命令绑定来执行模型中的代码 所有命令在 CanExecute 中都有代码来确定绑定按钮的启用状态 该逻辑工作完美 但在所有情况下 GUI 都会保持禁用状态 除非我单击
  • (定义一个宏)方便OpenGL命令调试?

    有时插入条件打印和检查需要很长时间glGetError 使用二分搜索的形式来缩小范围 其中第一个函数调用是 OpenGL 首先报告错误 我认为如果有一种方法可以构建一个宏 我可以包装所有可能失败的 GL 调用 并有条件地调用 那就太酷了gl
  • 如何用opengl制作2D地形?

    我想制作一个简单的二维地形 只有一些颠簸和高度变化 我想过只使用随机数来描述某个顶点的高度 但我不知道如何从中制作一个网格 我正在寻找一种方法来查找地形的顶点和索引缓冲区 我该怎么做呢 您可以仅将 GL POLYGON 与所有顶点的列表一起
  • mifare 卡身份验证错误“6982:安全状态未满足”

    我有 pc sc 读卡器和非接触式卡 mifare 卡 我可以连接到该卡 并且我也成功执行 getdate 命令 但是当我想进行身份验证时 我看到此错误 6982 安全状态不满足 我已经尝试过这 3 个不同的身份验证命令 但所有这些命令都出
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • 即使在顶点着色器中使用,glGetUniformLocation()也会返回-1

    我正在尝试用法线渲染一个简单的立方体 我使用以下代码来初始化着色器 void initShader const char vertexShaderPath const char fragmentShaderPath cout lt lt I
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • 阻止 OpenGL.framework 在 Cocoa 应用程序中加载

    我的应用程序链接到这些框架 Cocoa Framework AppKit Framework CoreData Framework Foundation Framework 请注意 OpenGL Framework 是NOT已链接 但是 设
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • OpenGL 与 Eclipse CDT + MinGW + GLEW + GLFW:未定义的参考

    Edit 与此同时 我已经弄清楚了这一点 并在下面写了详细的答案 我刚刚尝试在 Win7 上从 Express 版本的 MSVC 10 切换到 Eclipse CDT 在配置时遇到了以下简单 OpenGL 代码的问题 在 Visual St
  • 如何阅读shell命令的源代码?

    我想阅读编写linux命令的实际源代码 我已经获得了一些使用它们的经验 现在我认为是时候与我的机器进行更深层次的交互了 我在这里找到了一些命令http directory fsf org wiki GNU http directory fs
  • 类unix系统中的python和python3命令有什么区别?

    我通读了每个命令的描述 但每个命令的描述都是完全相同的 所以我不明白这两个命令在类 Unix 系统中的工作方式有何不同 谁能解释其中的区别吗 Python3命令的引入是因为python命令指向了python2 从那时起 Python3 已成
  • 将四元数旋转转换为旋转矩阵?

    基本上 给定一个四元数 qx qy qz qw 我如何将其转换为OpenGL旋转矩阵 我也对哪个矩阵行是 向上 向右 向前 等感兴趣 我有一个四元数的相机旋转 我需要在向量中 以下代码基于四元数 qw qx qy qz 其中顺序基于 Boo
  • Glew+GLFW Win32 无依赖项 Visual Studio

    是否可以在不将文件复制到 C 的情况下构建并链接 Glew 和 GLFW 我找不到任何说明如何在不将 DLL 复制到 C 上的 Visual Studio 目录的情况下使用这些库的文档 我只想包含项目目录中所需的所有 dll 和 lib 文

随机推荐