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获取屏幕上片段的位置_Opengl_Glsl_Shader - Fatal编程技术网

Opengl GLSL获取屏幕上片段的位置

Opengl GLSL获取屏幕上片段的位置,opengl,glsl,shader,Opengl,Glsl,Shader,我正在尝试使用GLSL 1.00在片段着色器中访问视口中的片段位置,使用3.30时,我可以通过将“vec2(gl_MultiTexCoord0);”作为从顶点着色器到片段着色器的变量来进行传递。有人知道这是否可行吗?这里有几点值得注意: 您可以使用与GLSL3.30相同的原理。用于在顶点和片段着色器之间通信的variable关键字已被更通用的in/outconcpet替换,您可以使用该关键字将值传递到下一个着色器阶段(在程序中) GLSL1.00实际上并不存在。第一个真实版本是1.10。如果指定

我正在尝试使用GLSL 1.00在片段着色器中访问视口中的片段位置,使用3.30时,我可以通过将“vec2(gl_MultiTexCoord0);”作为从顶点着色器到片段着色器的变量来进行传递。有人知道这是否可行吗?

这里有几点值得注意:

  • 您可以使用与GLSL3.30相同的原理。用于在顶点和片段着色器之间通信的
    variable
    关键字已被更通用的
    in
    /
    out
    concpet替换,您可以使用该关键字将值传递到下一个着色器阶段(在程序中)

  • GLSL1.00实际上并不存在。第一个真实版本是1.10。如果指定
    #version 100
    ,则会得到GLESSH 1.0(这是GLE2.0的本机版本)

  • gl\u MultiTexCoord0
    是一个不推荐使用的内置项,它在核心配置文件/核心版本着色器中不可用。您应该使用通用的顶点属性

  • 任何版本中的GLSL都支持内置的
    gl_FragCoord
    变量,该变量将允许您访问片段的屏幕空间坐标,因此这些东西都不是必需的。但是,您可能希望位置在[0,1]范围内(适用于纹理),因此使用一些texcoord属性可能仍然是一种方法。OTOH,仅将视口大小指定为
    统一的vec2
    可能更有效,特别是如果您在CPU上实际将其反转一次,那么这将归结为每个片段的一个向量乘法


  • 我不得不问。。。你需要这个做什么?GLSL 1.00?你确定吗?AFAIK它从版本1.10开始:@vesan它是用于iOS应用程序的。说不清它到底是干什么的。我可能试图用一种不太理想的方式来做这件事,尽管lol.@glampert glGetString(GL\u SHADING\u LANGUAGE\u版本);返回“OpenGL ES GLSL ES 1.00”。。。也许那只是因为它在iOS模拟器里?是的,没关系。您正在使用OpenGL ES。ES着色语言从1.0开始,正如@derhass在他的回复中所指出的。下面是指向
    gl_FragCoord
    文档的链接: