是否有任何代码可以在 OpenGL 中计算和绘制 n 面棱镜?它应该像
void DrawPrism(long sides) {
glNormal3f( ...);
glTexCoord2f(..);
glVertex3f(...);
[...]
}
DrawPrism(5)
基本上我所需要的只是底座边缘的 x-y 位置。其余的计算由 GL 完成。
新答案:
要计算五边形顶点的坐标,请查看我为您制作的视频:http: //www.youtube.com/watch?v=qqu6LknbQsg
要计算五边形的高度,等式是: ^取自Wolfram Alpha
由 Kenobi 填充:如上面的视频中所述,A、B、C、D、E 是五边形的边缘。F,G,H,I,J 是第二个一起形成棱柱的五边形。Sin 和 cos 以度为单位。然后我们有以下顶点:
Ax = 0 ; Ay = h/2, ; Az = -1;
Bx = s/2 + s * sin(18) ; By = -h/2 + s*cos(18) ; Bz = -1;
Cx = s/2 ; Cy = -h/2 ; Cz = -1;
Dx = -s/2 ; Dy = -h/2 ; Dz = -1;
Ex = -s/2 - s * sin(18); Ey = -h/2 + s*cos(18) ; Ez = -1;
Fx = 0 ; Fy = h/2, ; Fz = 1;
Gx = s/2 + s * sin(18) ; Gy = -h/2 + s*cos(18) ; Gz = 1;
Hx = s/2 ; Hy = -h/2 ; Hz = 1;
Ix = -s/2 ; Iy = -h/2 ; Iz = 1;
Jx = -s/2 - s * sin(18); Jy = -h/2 + s*cos(18) ; Jz = 1;
然后你就做
glVertex3f(Ax,Ay,Az);
glVertex3f(Bx,By,Bz);
[...]
编辑:下面的先前答案(*对于所有多边形,而不仅仅是五边形):
这是我为您制作的关于如何生成任何 2D n-gon... 生成任何 3D 形状(n-hedron)的视频,您可以使用数学“网络”(骨架结构)将这些不同的 n-gons 组合成) 的 3D 对象并计算角度(所有这些公式都可以通过搜索 n-hedron 内角公式或 n-hedron _____ 找到)或者您可以按照我绘制这些 n-gons 的相同方式绘制它们(在视频)只是使用不同颜色的线条来模拟阴影(但你必须在 3D 空间中将它们打开,我知道你可以在 c++ 中做到这一点,所以你很好。
无论如何,这是我的视频:http ://www.youtube.com/watch?v=CWbTKm3a5Fw
这就是几何网络(前面提到的),以防您想知道:
这篇文章展示了用于计算诸如面的 n 面体内角之类的数学,可能非常有帮助:http ://www.kjmaclean.com/Geometry/IcosaDodeca.html
不,即使在 Glut 中也没有创建它的函数。可悲的是,您将不得不手动创建它。基本二次曲线不在基本 OpenGL 上。使用 GLUT 你有一些功能:
http://www.cs.csustan.edu/~rsc/SDSU/Modeling.GLU.GLUT.pdf
但仅此而已。