Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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对象拉伸_C++_Opengl - Fatal编程技术网

C++ Opengl对象拉伸

C++ Opengl对象拉伸,c++,opengl,C++,Opengl,我在opengl中绘制了一个3d框,有人能解释一下如何在opengl中挤出对象吗?我只是在z轴上为每个框进一步向后平移吗?这种方法可能有效,但您必须对每个步骤的平移量进行一些计算。不过,我建议以更智能的方式生成拉伸几何体 例如,您不应该为中间的框绘制盒盖(地板和天花板)。您还必须确保侧面完全接触,否则会出现瑕疵 我建议使用路径来确定每组顶点所在的平面。路径应由一系列点和每个点的方向向量组成,方向向量确定围绕方向向量旋转的程度。这样,您就可以非常轻松地计算4个环顶点,只需使用基本的向量数学 因此,

我在opengl中绘制了一个3d框,有人能解释一下如何在opengl中挤出对象吗?我只是在z轴上为每个框进一步向后平移吗?

这种方法可能有效,但您必须对每个步骤的平移量进行一些计算。不过,我建议以更智能的方式生成拉伸几何体

例如,您不应该为中间的框绘制盒盖(地板和天花板)。您还必须确保侧面完全接触,否则会出现瑕疵

我建议使用路径来确定每组顶点所在的平面。路径应由一系列点和每个点的方向向量组成,方向向量确定围绕方向向量旋转的程度。这样,您就可以非常轻松地计算4个环顶点,只需使用基本的向量数学

因此,例如,您从cap[(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0),(0.5,-0.5,0)]开始,沿着路径移动它(第一个是中心点,第二个是右向量)[(0,0,0,0),(1,0,0)],[(0,5,10),(1,0)],[(10,5,12),(0,1,0)]

现在,首先计算所有三个方向向量。法线是当前点和下一点之间的差值,因此(0,5,10)-(0,0,0)=(0,5,10)。右向量必须投影到法线定义的平面上,因此我们首先使用叉积:(0,5,10)x(1,0,0)=(0,10,-5)计算上向量。作为最后一步,我们计算投影的右向量,它是法线和向上:(0,5,10)x(-2,4,-2)=(-125,0,0)之间的叉积。所有三个向量都必须规格化,如果将它们并排放置,将得到一个很好的变换矩阵,应用于cap向量,从而为当前步骤生成4个顶点:

|-1 0 0 | |0.5| |-0.5 | | 0 0.894427 0.447214| * |0.5| = | 0.447213| etc. | 0 -0.447214 0.894427| |0 | | 0.223607| |-1 0 0 | |0.5| |-0.5 | |0.894427 0.447214 |*| 0.5 |=| 0.447213 |等。 | 0 -0.447214 0.894427| |0 | | 0.223607| (我可能把符号弄乱了一点,你可能需要交换叉积因子才能得到正确的结果)


然后,对路径上的每一步重复相同的过程,每次绘制4个环形四边形。

这种方法可行,但必须计算每一步的平移量。不过,我建议以更智能的方式生成拉伸几何体

例如,您不应该为中间的框绘制盒盖(地板和天花板)。您还必须确保侧面完全接触,否则会出现瑕疵

我建议使用路径来确定每组顶点所在的平面。路径应由一系列点和每个点的方向向量组成,方向向量确定围绕方向向量旋转的程度。这样,您就可以非常轻松地计算4个环顶点,只需使用基本的向量数学

因此,例如,您从cap[(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0),(0.5,-0.5,0)]开始,沿着路径移动它(第一个是中心点,第二个是右向量)[(0,0,0,0),(1,0,0)],[(0,5,10),(1,0)],[(10,5,12),(0,1,0)]

现在,首先计算所有三个方向向量。法线是当前点和下一点之间的差值,因此(0,5,10)-(0,0,0)=(0,5,10)。右向量必须投影到法线定义的平面上,因此我们首先使用叉积:(0,5,10)x(1,0,0)=(0,10,-5)计算上向量。作为最后一步,我们计算投影的右向量,它是法线和向上:(0,5,10)x(-2,4,-2)=(-125,0,0)之间的叉积。所有三个向量都必须规格化,如果将它们并排放置,将得到一个很好的变换矩阵,应用于cap向量,从而为当前步骤生成4个顶点:

|-1 0 0 | |0.5| |-0.5 | | 0 0.894427 0.447214| * |0.5| = | 0.447213| etc. | 0 -0.447214 0.894427| |0 | | 0.223607| |-1 0 0 | |0.5| |-0.5 | |0.894427 0.447214 |*| 0.5 |=| 0.447213 |等。 | 0 -0.447214 0.894427| |0 | | 0.223607| (我可能把符号弄乱了一点,你可能需要交换叉积因子才能得到正确的结果)

然后对路径上的每一步重复相同的步骤,每次绘制4个环形四边形

如何在opengl中挤出对象

你没有。OpenGL是一个绘图API,而不是一个几何图形处理库。看看像GTS这样的库

如何在opengl中挤出对象


你没有。OpenGL是一个绘图API,而不是一个几何图形处理库。看看GTS之类的库,这不是OpenGL的问题。您只能将OpenGL用于绘图。你必须自己编写几何体上的任何操作。这不是OpenGL的问题。您只能将OpenGL用于绘图。您必须自己在几何体上编写任何操作。