C++ OpenGL中n面棱镜的代码
有没有代码可以在OpenGL中计算和绘制n面棱镜?它应该像这样工作C++ OpenGL中n面棱镜的代码,c++,math,opengl,C++,Math,Opengl,有没有代码可以在OpenGL中计算和绘制n面棱镜?它应该像这样工作 void DrawPrism(long sides) { glNormal3f( ...); glTexCoord2f(..); glVertex3f(...); [...] } DrawPrism(5) 基本上我所需要的就是底部边缘的x-y位置。其余的计算由德国劳埃德船级社完成。否。即使在Glut中,也没有创建它的函数。遗憾的是,你将不得不手工创建它。 基本二次曲面不在基本OpenGL上。使用GLUT可以实
void DrawPrism(long sides) {
glNormal3f( ...);
glTexCoord2f(..);
glVertex3f(...);
[...]
}
DrawPrism(5)
基本上我所需要的就是底部边缘的x-y位置。其余的计算由德国劳埃德船级社完成。否。即使在Glut中,也没有创建它的函数。遗憾的是,你将不得不手工创建它。 基本二次曲面不在基本OpenGL上。使用GLUT可以实现以下功能: 没什么了。新答案: 要计算五角大楼顶点的坐标,请查看我在此处为您制作的视频: 要计算五边形的高度,方程式为: ^从
由克诺比填写: 如上视频所述,A、B、C、D、E是五角大楼的边缘。F、 G,H,I,J是第二个一起形成棱镜的五角大楼。正弦波和余弦波以度为单位。然后我们有以下顶点:
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形的视频吗。。。要生成任何3D形状(n面体),您可以使用3D对象的数学“网络”(骨架结构)将这些不同的n面体组合起来,并计算角度(所有这些公式都可以通过搜索n面体内角公式或n面体来找到),也可以使用与我绘制这些n面体相同的方式来绘制它们(在视频中)只使用不同的彩色线来模拟阴影(但是你必须在3D空间中打开它们,我知道你可以在C++中完成,所以你很好。 无论如何,这是我的视频:
这就是几何网(前面提到过)的含义,如果你想知道:
这篇文章展示了计算n面内角之类的东西时用到的数学,可能会很有帮助:你是说自动完成它?还是你要求完整的代码来完成它?如果是第二个,这是一个很糟糕的问题。这里只供提问,而不是让人们免费为你做事:-)你的意思是n边形还是n面体?(2D或3D)?嗨,这是自动工作的。也许有人可以为他已经编写的5面或6面体贡献代码,我们可以一起转换。这是3D的。@darkgaze我真的希望有人这样做,因为这不是GL的标准函数…哦:-(那么,我不知道。SorryHello@albert renshaw,非常感谢你的工作!我看完了整个视频。我为你(和所有其他人)制作了一张解释性图片,让你了解这个挑战。我只需要边的位置作为一个点(x | y)-把它想象成一个从一条边跳到另一条边的恢复函数,给我们坐标,直到它到达开始的位置。填充和纹理是由OpenGL自动完成的-我们不担心这个部分;-)哦,所以你只需要任意给定n边形顶点的x,y坐标,你正在制作一个n边形的棱柱体,所以你不是在寻找一个n面体(就像我上面提到的网络),而是在寻找一个n棱柱体……所以在视频中,我讨论的解n边形的方法仍然有效(即使只是得到顶点的x,y坐标,也只是计算。)然后你可以在3d空间中向上移动并填充边。酷!祝你好运,伙计!因此任何n边形(多边形)顶点的x,y坐标只是圆上3个最均匀分布的位置(因为所有n边形都可以外接)看这里:嘿@Albert Renshaw,这似乎是个窍门!我们只需要加上“h”的方程,根据互联网,它是边长*(cos(18)+sin(36))(没有验证,但听起来正确),然后完成了顶点位置的查找!(基本上,把高度作为第三维度添加到它是微不足道的).如果你把这些都写在下面的答案中,我可以将其标记为已接受。嗨@Albert Renshaw,我们终于结束了!但与你共事是一件愉快的事:-)