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 GLSL 4.1和gl_ModelViewProjectionMatrix_Opengl_Glsl_Maya - Fatal编程技术网

Opengl GLSL 4.1和gl_ModelViewProjectionMatrix

Opengl GLSL 4.1和gl_ModelViewProjectionMatrix,opengl,glsl,maya,Opengl,Glsl,Maya,我正在开发一个glsl着色器程序,作为在“封闭源代码”应用程序中运行的插件的一部分。应用程序(maya)是使用opengl 2.1编写的,但我们的图形卡支持opengl/glsl 4.1,我希望在程序中使用细分和几何体着色器。该应用程序设置opengl视口和传统的模型/视图矩阵堆栈,我无法控制这部分代码 我的通过顶点着色器使用GLSL 1.2,工作正常: // GLSL VERTEX SHADER #version 120 void main () { gl_Position = gl

我正在开发一个glsl着色器程序,作为在“封闭源代码”应用程序中运行的插件的一部分。应用程序(maya)是使用opengl 2.1编写的,但我们的图形卡支持opengl/glsl 4.1,我希望在程序中使用细分和几何体着色器。该应用程序设置opengl视口和传统的模型/视图矩阵堆栈,我无法控制这部分代码

我的通过顶点着色器使用GLSL 1.2,工作正常:

// GLSL VERTEX SHADER
#version 120

void main ()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
“我的穿越几何体”着色器使用glsl 4.1,并且在应用程序中也可以正常工作:

// GLSL GEOMETRY SHADER
#version 410

layout (lines_adjacency) in;
layout (line_strip, max_vertices = 2) out;

void main ()
{
    gl_Position = gl_in[1].gl_Position;
    EmitVertex();
    gl_Position = gl_in[2].gl_Position;
    EmitVertex();
    EndPrimitive();
}

但这只是一个通过测试。在我的真实几何体着色器中,我需要在世界空间中进行一些计算,但几何体着色器点位于视图空间中我的问题是:我可以在4.1几何体着色器中访问gl_ModelViewProjectionMatrix吗?我知道传统的矩阵堆栈在glsl 4.1中已被弃用,取而代之的是统一变量,但我无法更改应用程序。我无法在几何体着色器中使用glsl 1.2,因为我需要lines_邻接输入类型。我需要在我的插件的C++源中把矩阵复制成一个统一的变量吗?还是有一个“后门”可以直接从glsl 4.1获取?或者其他我没有想到的东西?

您可以使用兼容模式(如果您的GL实现支持),方法是:

#version 410 compatibility
在着色器中。这将重新启用所有不推荐的全局统一状态(除其他外)