opengl实现任意两点间画圆柱体
来源:互联网 发布:淘宝网店认证照片 编辑:程序博客网 时间:2024/06/05 00:33
1,问题提出
两点间画线简单:
glBegin(GL_LINES); //注意是LINES不是LINE,这个错误一定要注意。
glVertexf(x1, y1, z1);
glVertexf(x2, y2, z2);
glEnd();
画线函数不会影响opengl的矩阵堆栈。
但是很多时候线条效果会比较差,比如我要做一个骨骼动画,关节点间的骨头用线条太难看,即使使用glLineWidth设置线宽,视觉效果还是一塌糊涂。还有利用分形绘制3D树的时候,树干用线条(宽线条)绘制效果也不佳。所以此时需要实现一个函数,3D空间中任意两点间用几何体绘制,我下面介绍一种思路。
2,原理介绍
要在A(x1,y1,z1), B(x2,y2,z2)之间绘制圆柱体,首先在原点处,沿着Y轴方向完成几何体绘制,然后旋转到AB向量方向,最后平移到A点处。关键在旋转矩阵的计算,使用向量叉乘:AB向量和Y轴单位向量叉乘计算出右手side向量,然后side单位化,side和AB叉乘计算出最终的up方向。
代码如下:
上面的代码绘制圆柱体使用了glu几何库,如果绘制其他几何体:比如四棱锥,或其它几何体,只需要修改下面的框架:
注意上面的renderGeometryInYAxis();必须是在Y轴上绘制几何体。
3,测试代码:
最终效果图:
- opengl实现任意两点间画圆柱体
- OpenGL: 任意两点间画圆柱体
- js实现任意两点之间画虚线
- 递归实现任意两点可达路径
- 任意两点间最短路径算法实现
- OpenGL函数封装:在任意两个三维点之间绘制给定半径的圆柱体管道
- opengl 绘制圆柱体
- opengl 绘制实心圆柱体
- 后缀数组,任意两点间LCP
- 任意两点间的最短路径
- 基础Floyd--任意两点间最短路
- openGL之glsl入门6--画三维图魔方、圆柱体
- ArcEngine获取曲线上任意两点间的距离
- 引入友元机制,求任意两点间的距离
- 求任意两点间的最短路径
- 运用MATLAB绘制任意两点间的直线路径
- hdu 4460 求所有任意两点间的最短路
- 任意两点间的最短路径---floyd_warshall算法
- 为什么你逃不脱打工被老板压榨的命运?
- 密码验证正则
- Bad owner or mode for /var/empty/sshd解决方法
- Meego上安装Wayland
- c/c++编译器的内存分配模式
- opengl实现任意两点间画圆柱体
- 从克隆到原型模式
- $formValidator为空或找不到对象
- 【转】把DLL文件打包进EXE的技巧(C#)
- VMware 安装Ubuntu 配置
- 新手学汉化的箴言—— 责任胜于能力
- 又说intent
- FrameBuffer 之 fb_fix_screeninfo 、fb_var_screeninfo
- ASP实现Excel导入Access数据库