Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL中n面棱镜的代码_C++_Math_Opengl - Fatal编程技术网

C++ 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可以实

有没有代码可以在OpenGL中计算和绘制n面棱镜?它应该像这样工作

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,我们终于结束了!但与你共事是一件愉快的事:-)