Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Opengl 半角矢量与屏幕变换_Opengl_Graphics - Fatal编程技术网

Opengl 半角矢量与屏幕变换

Opengl 半角矢量与屏幕变换,opengl,graphics,Opengl,Graphics,比如说,我在3D模型空间中给出了两条光线,从同一个中心p开始,但方向D和E不同: A=(p,D) B=(p,E) 我从这两个角度形成半角度光线: H=(p,(D+E)/2) 现在假设A'和B'是相同的光线,但转换为屏幕空间(MVP矩阵乘法、透视分割、视口缩放等)。光线H'分别指屏幕空间中这些光线的半角矢量 现在我的问题是: 向量H’可以通过上述运算从向量H中导出吗,或者我必须计算A’和B’并从中计算H’吗 关于你必须计算A'和B'并从中计算H'。原因是3D空间中两点的中点不一定是这些点的2D投影

比如说,我在3D模型空间中给出了两条光线,从同一个中心p开始,但方向D和E不同:

A=(p,D)

B=(p,E)

我从这两个角度形成半角度光线:

H=(p,(D+E)/2)

现在假设A'和B'是相同的光线,但转换为屏幕空间(MVP矩阵乘法、透视分割、视口缩放等)。光线H'分别指屏幕空间中这些光线的半角矢量

现在我的问题是: 向量H’可以通过上述运算从向量H中导出吗,或者我必须计算A’和B’并从中计算H’吗


关于

你必须计算A'和B'并从中计算H'。原因是3D空间中两点的中点不一定是这些点的2D投影之间的中点(2D)。半角射线是根据D和E的中点定义的


例如,将A和B向量想象为画在你站在旁边向下看的墙上的V的两侧。由于透视的原因,当投影到2D时,V的两个尖端的3D中点将更接近另一个尖端。

我明白了。然后我有一个后续问题:要将方向单位向量从模型空间转换到屏幕空间,只需应用常规变换(MVP矩阵乘法、透视分割、视口缩放等),但在齐次坐标中w坐标为0,对吗?@user5024425:你最好描述一下你试图解决的真正问题是什么。我实际上想做的是从线条条渲染一个四边形条带,这意味着我想将每个线段变成一个四边形,然后在顶点着色器中移动顶点,这样我就有了一个闭合的四边形序列。我的计划是使用索引渲染为一条线段创建六个顶点,然后移动顶点以形成看起来像粗线段的梯形。为了正确移动顶点,我需要在顶点着色器中以像素坐标计算它们的坐标。半角向量旨在移动角点顶点,以在四边形之间创建平滑过渡。请查看此问题的答案:此答案仅提出使用几何体和碎片着色器的解决方案,而不是顶点着色器。不过,原来的问题已获答覆,所以我会将其标记为已完成。谢谢大家。