Opengl GLSL获取屏幕上片段的位置
我正在尝试使用GLSL 1.00在片段着色器中访问视口中的片段位置,使用3.30时,我可以通过将“vec2(gl_MultiTexCoord0);”作为从顶点着色器到片段着色器的变量来进行传递。有人知道这是否可行吗?这里有几点值得注意: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。如果指定
variable
关键字已被更通用的in
/out
concpet替换,您可以使用该关键字将值传递到下一个着色器阶段(在程序中)#version 100
,则会得到GLESSH 1.0(这是GLE2.0的本机版本)gl\u MultiTexCoord0
是一个不推荐使用的内置项,它在核心配置文件/核心版本着色器中不可用。您应该使用通用的顶点属性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
文档的链接: