我在创建3D圆柱体时遇到问题(没有OpenGL)。据我所知,网格用于创建圆柱面,三角形扇形用于创建顶盖和底盖。我已经实现了网格而不是平面三角形风扇,所以目前我的3D对象看起来像没有底部和顶部盖子的圆柱体。
我认为这是我需要做的才能创建底部和顶部。首先,找到圆柱网格的中心点。其次,找到网格的顶点。第三,使用中心点和2个顶点,创建三角形。第四步,重复这些步骤,直到创建一个平面圆。
上述步骤是否足以创建大写字母,还是有更好的方法?如何找到网格的顶点,以便创建三角形扇形?
答案 0 :(得分:0)
首先注意一些事项:
所以我只能提供通用信息
轴对齐圆柱
选择粒度N
N=32
你需要BR(边界表示)
所以这些点可以用C ++定义:
const int N=32; // mesh complexity
double p0[N][3],p1[N][3]; // rings`
double a,da,c,s,r,h2; // some temp variables
int i;
r =50.0; // cylinder radius
h2=100.0*0.5; // half height of cyliner
da=M_PI/double(N-1);
for (a=0.0,i=0;i<N;i++,a+=da)
{
c=r*cos(a);
s=r*sin(a);
p0[i][0]=c;
p0[i][1]=s;
p0[i][2]=+h2;
p1[i][0]=c;
p1[i][1]=s;
p1[i][2]=-h2;
}
环点为闭环(p0[0]==p0[N-1])
现在如何绘制
QUAD_STRIP = { p0[0],p1[0],p0[1],p1[1],...p0[N-1],p1[N-1] };
TRIANGLE_FAN0 = { p0[0],p0[1],...p0[N-1] };
TRIANGLE_FAN1 = { p1[0],p1[1],...p1[N-1] };
TRIANGLE_FAN0 = { (0.0,0.0,+h2),p0[0],p0[1],...p0[N-1] };
TRIANGLE_FAN1 = { (0.0,0.0,-h2),p1[0],p1[1],...p1[N-1] };
非轴对齐的圆柱?
p0[],p1[]
点列表中使用转换矩阵即可转换/旋转到所需位置