C# GLSL和HLSL之间的Modelview差异?

C# GLSL和HLSL之间的Modelview差异?,c#,glsl,hlsl,sharpdx,model-view,C#,Glsl,Hlsl,Sharpdx,Model View,我想知道GLSL和HLSL数学之间是否有区别。 我使用的是一个自制的引擎,它与openTK配合使用。我的SharpDx实现每天都会更进一步。 我目前正在处理ModelviewProjection矩阵。 为了看看它是否有效,我使用了一个简单的项目,它可以与OpenTK配合使用。 因此,我将着色器代码从GLSL更改为HLSL,因为程序的其余部分使用引擎函数。程序不起作用,我看不到几何体,所以我将模型视图矩阵和投影矩阵更改为单位矩阵。工作之后,我看到了几何图形。所以我对GLSL做了一点修改,因为我想要

我想知道GLSL和HLSL数学之间是否有区别。 我使用的是一个自制的引擎,它与openTK配合使用。我的SharpDx实现每天都会更进一步。 我目前正在处理ModelviewProjection矩阵。 为了看看它是否有效,我使用了一个简单的项目,它可以与OpenTK配合使用。 因此,我将着色器代码从GLSL更改为HLSL,因为程序的其余部分使用引擎函数。程序不起作用,我看不到几何体,所以我将模型视图矩阵和投影矩阵更改为单位矩阵。工作之后,我看到了几何图形。所以我对GLSL做了一点修改,因为我想要一个与HLSL相似的GLSL代码,我还将矩阵修改为identity。后来我什么也没看到,没用。。。。所以我被卡住了。。。你们有什么想法吗? 总之,长话短说 我的HLSL着色器代码

public string Vs = @"cbuffer Variables : register(b0){
float4 Testfarbe;
float4x4 FUSEE_MVP;
} 
struct VS_IN
{
    float4 pos : POSITION;
    float4 tex : TEXCOORD;
    float4 normal : NORMAL;
};
struct PS_IN
{
    float4 pos : SV_POSITION;
    float4 col : COLOR;
    float4 tex : TEXCOORD;
    float4 normal : NORMAL;
};
PS_IN VS( VS_IN input )
{
    PS_IN output = (PS_IN)0;
    input.pos.w = 1.0f;
    output.pos = mul(input.pos,FUSEE_MVP);
    output.col = Testfarbe;
    /*output.col = FUSEE_MV._m00_m01_m02_m03;*/
/*    output.normal = input.normal;
    output.tex = input.tex;*/
 /*   if (FUSEE_MV._m00 == 4.0f)
        output.col = float4(1,0,0,1);
    else
        output.col = float4(0,0,1,1);*/

    return output;
}
";
string Ps = @"
SamplerState pictureSampler;
Texture2D imageFG;
struct PS_IN
{
    float4 pos : SV_POSITION;
    float4 col : COLOR;
    float4 tex : TEXCOORD;
    float4 normal : NORMAL;
};

float4 PS( PS_IN input ) : SV_Target
{
    return input.col;
    /*return  imageFG.Sample(pictureSampler,input.tex);*/
    }";
所以我改变了我以前的OpenTk项目,看看OpenTk和SharpDx在数学计算方面的区别在哪里

HLSL代码

 public string Vs = @"
            /* Copies incoming vertex color without change.
             * Applies the transformation matrix to vertex position.
             */

            attribute vec4 fuColor;
            attribute vec3 fuVertex;
            attribute vec3 fuNormal;
            attribute vec2 fuUV;

            varying vec4 vColor;
            varying vec3 vNormal;
            varying vec2 vUV;

            uniform mat4 FUSEE_MVP;
            uniform mat4 FUSEE_ITMV;

            void main()
            {
                gl_Position = FUSEE_MVP * vec4(fuVertex, 1.0);
                /*vNormal = mat3(FUSEE_ITMV[0].xyz, FUSEE_ITMV[1].xyz, FUSEE_ITMV[2].xyz) * fuNormal;*/
                vUV = fuUV;
            }";

        public string Ps = @"
            /* Copies incoming fragment color without change. */
            #ifdef GL_ES
                precision highp float;
            #endif

            uniform vec4 vColor;
            varying vec3 vNormal;

            void main()
            {
                gl_FragColor = vColor * dot(vNormal, vec3(0, 0, 1));
            }";
在主代码本身中,我只读取一个Obj文件并设置标识矩阵

    public override void Init()
        {
        Mesh = MeshReader.LoadMesh(@"Assets/Teapot.obj.model");



        //ShaderProgram sp = RC.CreateShader(Vs, Ps);
        sp = RC.CreateShader(Vs, Ps);
        _vTextureParam = sp.GetShaderParam("Testfarbe");//vColor
}
    public override void RenderAFrame()
        {
。。。 var mtxRot=float4x4.CreateRotationY(_angleHorz)*float4x4.CreateRotationX(_angleVert); var mtxCam=float4x4.LookAt(0,200500,0,0,0,0,1,0)

这两个项目并排进行

我还应该补充的是,只要ModelView标识的值大于1.5,我就不会在窗口中看到任何内容?有人知道这可能是什么原因吗

我编辑了帖子和图片,让你看到更大的不同。 我在这篇文章中有过身份矩阵。如果我在这个Obj文件中使用身份矩阵

v 0.0 0.5 0.5
v 0.5 0.0 0.5
v -0.5 0.0 0.5

vt 1 0 0
vt 0 1 0
vt 0 0 0

f 1/2 2/3 3/1
我在SharpDX项目中看到了三角形,在openTK中没有看到。但我认为茶壶的东西更好一点,以显示to项目中的差异,其中只有着色器代码是不同的!我的意思是,我可能会在这个引擎的SharpDX实现中出错,但让我们假设他们的一切都是正确的。至少我希望如此,如果你们告诉我ShaderCode是错误的;)


我希望我能清楚地描述我的问题,以便您理解。

好的,那么您必须转置矩阵…

v 0.0 0.5 0.5
v 0.5 0.0 0.5
v -0.5 0.0 0.5

vt 1 0 0
vt 0 1 0
vt 0 0 0

f 1/2 2/3 3/1