gpt4 book ai didi

Three.js/GLSL - 将像素坐标转换为世界坐标

转载 作者:行者123 更新时间:2023-12-02 04:38:59 27 4
gpt4 key购买 nike

我的 Three.js 应用程序中有一个简单的着色器,可以将屏幕着色为红色。但是,我想将给定世界位置右侧的所有像素着色为不同的颜色。

我见过some answers建议使用 variing vec4 worldCoord = gl_ModelViewMatrix * gl_Vertex;,但由于 WebGL 使用 GLSLES,所以像 gl_Vertex 这样的变量对我来说不可用。

<小时/>

顶点着色器

<script type="x-shader/x-vertex" id="vertexshader">
#ifdef GL_ES
precision highp float;
#endif

void main()
{
gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
}
</script>
<小时/>

片段着色器

<script type="x-shader/x-fragment" id="fragmentshader">
#ifdef GL_ES
precision highp float;
#endif

float worldX = 10.0; //Or some other position in the WebGL world

void main()
{
if(gl_FragCoord.x > worldX) //FragCoord gives me coordinates relative to the screen
{
gl_FragColor = vec4(0.0, 1.0, 0.0, 1);
}

else
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1);
}
}
</script>
<小时/>

问:如何使用 Three.js 将像素位置转换为 WebGL 中的世界位置?

<小时/>

最佳答案

来自 WestLangley's Fiddle 的答案:http://jsfiddle.net/ST4aM/2/ .

<小时/>

顶点着色器

<script type="x-shader/x-vertex" id="vertexshader">
#ifdef GL_ES
precision highp float;
#endif

varying float x;
varying float y;
void main()
{
gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
x = position.x;
y = position.y;
}
</script>
<小时/>

片段着色器

<script type="x-shader/x-fragment" id="fragmentshader">
#ifdef GL_ES
precision highp float;
#endif

varying float x;
varying float y;

void main()
{
if(x > somePosition)
{
gl_FragColor = vec4(0.0, 1.0, 0.0, 1);
}

else
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1);
}
}
</script>
<小时/>

关于Three.js/GLSL - 将像素坐标转换为世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com