从头开始绘制一个圆锥体

opengl帮助库glu里有一个对象叫做二次几何体,可以用来给球体圆锥体建模,然而在opengles中不能使用glu库,那么我们只能自己写方法替代它了,上次给球体建了模,这次应该给圆锥体建模了.

圆锥体是平面上的一个圆以及它的所有切线和平面外一点确定的平面围成的几何体,圆被称为底面,顶点被称为尖端,定义听上去有些复杂,那么看图:


嗯,懂了吧.其实它是一种特殊情况,如果尖端是一个圆面的话那么它就是一个截头圆锥体,顶面半径为0的截头圆锥体就是圆锥体了.

先来看下头文件是怎么定义的吧:

class Cone {
private:
	GLuint* vboId;
	GLuint vert,texcoord,norm;
	GLfloat* verts;
	GLfloat* texcoords;
	GLfloat* norms;
	int vertNum,topVertNum,sideVertNum;
	float radiusTop,radiusBottom,yHeight;//顶面半径,底面半径,高度
	void calculateSideNormal(float& x,float& y,float& z);//计算侧面法线
public:
	Cone(float rt,float rb,int m,float height);
	~Cone();
	void render();
};

侧面法线的计算方法,先取底面任意一点,求得圆心到该点的向量,然后沿着此向量把该截头圆锥体劈开,如图所示


然后把红色的向量沿着它的方向平移到圆周上的点,如图所示:


利用相似三角形即可求出紫色的法线N,具体代码如下:

void Cone::calculateSideNormal(float& x,float& y,float& z) {
	y=(radiusBottom-radiusTop)/yHeight*sqrtf(x*x+z*z);
	if(x=&
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值