【问题标题】:keydown event not working in opngl langaugekeydown 事件在 opengl 语言中不起作用
【发布时间】:2022-10-14 03:37:26
【问题描述】:

我如何在opengl语言中使用keydown事件,在这里我粘贴了一些部分代码但它不起作用,任何人都可以帮助修复此代码。

bool keypress(int key) {
          return texelFetch(texture2D, ivec2(key,2),0).x != 0.0;  }

// in above code texture2D was iChannel0 so i change to texture2D according to my script but i think i mistake is this line

const int k = 17;      // 17 for CTRL

void main()
{ 
        vec2 p = gl_FragCoord.xy;
        vec2 uv = p / resolution.xy;
    
    float blend = 1.9-pow(1.5*cos(time/8.0),5.0);
    
        vec3 cul = texture2D(media, uv).rgb;
        vec3 col = texture2D(media, uv).rgb;
         
          if (keypress(k)) col = mix(cul,col,blend); 
         gl_FragColor = vec4(col, 1.0);
}

当我按 CTRL 键时,它不会执行此 ==>> col = mix(cul,col,blend);
我不知道我错在哪里。

【问题讨论】:

    标签: javascript java html css


    【解决方案1】:

    着色器不会在“按键”发生的任何地方执行。着色器不像 Javascript 中的 HTML 或 CSS 属性,更改属性会更新视图。你渲染了一些东西,而那个渲染会导致着色器被执行。如果你想改变事物的渲染方式,你必须明确的再次渲染它们。

    如果您希望基于按键以不同方式呈现某些内容,那么您的按键 Javascript 例程需要设置一些状态并告诉您的代码重新渲染场景。渲染代码将使用此状态来调整着色器制服或渲染系统可访问的其他数据,然后再次绘制所有内容。

    例如:

    const int k = 17;
    

    那是一个常数;因此关键字const。它没有改变。曾经。它总是 17。如果你想将一个值传递给代表一个键的着色器,你需要一个统一的、UBO 或类似的东西。当然不是一个持续的.

    【讨论】:

    • 脚本已经在运行和渲染,但我希望当我按下 CTRL 键时,我会将两种纹理与混合混合,所以问题是按键事件不起作用。否则,如果我使用此代码 [ col = mix(cul,col,blend); ] 没有按键它可以完美地工作,但我希望它可以在按键上工作
    • @smallbee:我想我已经说清楚了,着色器对键一无所知。他们只知道你告诉他们什么。我在您的着色器中看不到任何可以通知它任何按键的信息(当然,没有任何代码可以通知它,因为您没有发布任何信息)。
    • 是的,我没有发布完整的代码,我只是发布了按键功能的部分代码,但它不起作用,我从这里复制了几行按键事件/函数的代码shadertoy.com/view/4dKyzm ...然后将其添加到我的代码。但它仍然无法正常工作。
    • @smallbee 检查您的按键贴图纹理是否在按键点击时发生变化...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多