Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Directx 在PS_2_0着色器中模拟VFACE语义_Directx_Direct3d_Hlsl_Shader - Fatal编程技术网

Directx 在PS_2_0着色器中模拟VFACE语义

Directx 在PS_2_0着色器中模拟VFACE语义,directx,direct3d,hlsl,shader,Directx,Direct3d,Hlsl,Shader,我正在对我们的一些HLSL着色器做一些工作,试图让它们在SM2.0中工作。我几乎成功了,但我们的一个着色器接受了一个参数: float alignment : VFACE 我从MSDN的理解是,这是一个自动计算的var,以防我需要它,但SM2.0不支持它。。。那么,我该如何复制这个呢?我不是着色器程序员,所以任何(伪)代码都会非常有用。我了解VFACE的功能,但不了解我如何在像素着色器中或在VS中计算它并将其传递到PS。计算每个像素的值听起来很昂贵,因此可能有人可以在VS中显示一个骨架来计算它

我正在对我们的一些HLSL着色器做一些工作,试图让它们在SM2.0中工作。我几乎成功了,但我们的一个着色器接受了一个参数:

float alignment : VFACE

我从MSDN的理解是,这是一个自动计算的var,以防我需要它,但SM2.0不支持它。。。那么,我该如何复制这个呢?我不是着色器程序员,所以任何(伪)代码都会非常有用。我了解VFACE的功能,但不了解我如何在像素着色器中或在VS中计算它并将其传递到PS。计算每个像素的值听起来很昂贵,因此可能有人可以在VS中显示一个骨架来计算它并在PS中使用它?

你不能。因为
VFACE
表示三角形的方向(后面或前面),VS或PS级无法访问整个原语(如SM4/5 GS级)


唯一的方法是在两次过程中渲染几何体(一次使用背面消隐,另一次使用正面消隐),并将常量值传递给着色器匹配
VFACE
的意思。

您不能。因为
VFACE
表示三角形的方向(后面或前面),VS或PS级无法访问整个原语(如SM4/5 GS级)


唯一的方法是在两次过程中渲染几何体(一次使用背面消隐,另一次使用正面消隐),并将一个常量值传递给着色器匹配
VFACE
意思。

VS不会获得三角形的面法线,并访问摄影机位置/向量吗?我不知道它如何访问这些,甚至不知道VS是否可以将值传递给PS?当然,VS可以获得给定的面法线,也可以访问视向量(如果将其传递给VS)。VS也可以将值传递给PS。但这不会给你面子。至少不是很精确,因为在某些拐角处,tri的两条法线将被检测为前向,最后一条法线将被检测为后向(或者两条法线将被检测为后向,另一条法线将被检测为前向)。这会导致非常令人不快的人工制品(我猜您使用VFACE进行双面照明)。这是由于光栅化器中的属性插值造成的。唯一正确的方法是使用我在回答中提到的两个过程。面法线对于三角形的每个顶点都是相同的,我想你的意思是说VS可以访问顶点法线,或者插值面法线?这不是用于照明,但您的工件点仍然有效。。。不过,这可能值得一试。确切地说,我的意思是VS可以访问顶点法线(存储在VB中的法线)。只有PS可以访问插值法线或VS传递给PS的任何其他基本插值属性。VS不是获得三角形的面法线,并且可以访问摄影机位置/向量吗?我不知道它如何访问这些,甚至不知道VS是否可以将值传递给PS?当然,VS可以获得给定的面法线,也可以访问视向量(如果将其传递给VS)。VS也可以将值传递给PS。但这不会给你面子。至少不是很精确,因为在某些拐角处,tri的两条法线将被检测为前向,最后一条法线将被检测为后向(或者两条法线将被检测为后向,另一条法线将被检测为前向)。这会导致非常令人不快的人工制品(我猜您使用VFACE进行双面照明)。这是由于光栅化器中的属性插值造成的。唯一正确的方法是使用我在回答中提到的两个过程。面法线对于三角形的每个顶点都是相同的,我想你的意思是说VS可以访问顶点法线,或者插值面法线?这不是用于照明,但您的工件点仍然有效。。。不过,这可能值得一试。确切地说,我的意思是VS可以访问顶点法线(存储在VB中的法线)。只有PS可以访问插值法线或VS传递给PS的任何其他基本插值属性。