shader 相关问题

着色器是用于对计算机图形中的几何或像素数据执行计算的程序。

是否可以使用 OpenGL 将像素着色器投影到类似纹理的表面?

我想知道是否可以将片段着色器的示例投影(以像纹理这样简单的方式)到像立方体这样的表面。 我在 ShaderToy 上看到了一些有趣的例子(光栅化...

回答 1 投票 0

计算片段着色器中像素的方向以用于程序天空着色器?

(所以我在我的准系统 C++ Vulkan 游戏引擎中,我想制作一个像 Godot 4 中那样的程序天空着色器,到目前为止它非常简单,它不是一个天空盒而是一个单一的三角形......

回答 1 投票 0

如何在Shader属性中定义浮点数组?

我想在我的着色器中定义一个浮点数组,如下所示: 特性 { _TilesX(“瓷砖X”,Int)= 10 _TilesY(“瓷砖 Y”,Int)= 10 _TileData1("平铺数据", Float[]) = {...

回答 3 投票 0

OpenGL - 如何访问深度缓冲区值? - 或者:gl_FragCoord.z 与渲染纹理深度

我想访问像素着色器中当前处理的像素处的深度缓冲区值。 我们怎样才能实现这个目标呢?基本上,似乎有两种选择: 渲染纹理的深度。怎么会...

回答 3 投票 0

OpenGL 纹理显示纹理的纯色,而不是整个纹理

main.cpp #包括 #包括 #包括 #包括 #include“glheader.h” #定义STB_IMAGE_IMPLMENTATION #包括“

回答 1 投票 0

将 PlaneGeometry 与 ShaderMaterila 一起使用时,我的浏览器会抛出“程序信息日志:片段着色器未编译。”

我是 Three.js 的新手,运行在 Three.js 的 0.167.0 版本上。 我正在尝试使用 ShaderMaterial 创建 PlaneGeometry,但出现错误并且场景中没有任何渲染。 这是我的代码片段...

回答 1 投票 0

投影在球体上的盒子的 Sdf

在添加的图像中,您可以看到映射在球体上的 uv 四边形,我需要一种方法以类似的方式将盒子映射到球体上,如果投影仅适用于 < 180 degrees. UV on Sphere Exampl...

回答 1 投票 0

Godot 着色器在 Android 上的渲染方式与编辑器中不同

使用Godot4并针对Android设备。 我在图形渲染领域仍然是一个初学者,所以如果问题很明显,我深表歉意。 我将一个简单的模糊着色器应用于 colorRect ...

回答 1 投票 0

球体上的顶点位移破坏了网格

我正在尝试使用着色器在球体上制作简单的噪音效果。 我尝试使用 ashima 的 perlin 噪声,但效果达不到我的预期,因此我基于 Phong 创建了自己的着色器。 这就是...

回答 2 投票 0

自定义 SkSL 着色器使用 SkiaSharp 的 SKCanvasView 使 .NET MAUI 应用程序崩溃

我正在构建一个 .NET MAUI 应用程序,该应用程序设计为在 iOS 上运行,特别是在 iPad Pro 上。在其中,我需要能够根据多个参数对图像的各个部分进行采样,并将其显示在

回答 1 投票 0

1 个画布的 WebGPU 多个渲染通道

我是 WebGPU 的初学者,想要在单独的着色器模块中处理具有多个处理阶段的图像: 去饱和度 边缘检测 压缩 然后第 4 步计算压缩后的纹理...

回答 1 投票 0

GLSL 弹跳球问题

#ifdef GL_ES 精密中型浮子; #万一 统一 vec2 u_分辨率; 统一 vec2 u_mouse; 统一浮动u_time; vec3 color_bg = vec3(1.0); vec3 圆颜色 = vec3(0.0, 0.0, 0.0); 无效循环...

回答 1 投票 0

GLSL片段着色器正弦波改变方向和颜色

我有glsl片段着色器代码需要更改线条颜色,背景颜色和正弦波的方向 精密中型浮点; #万一 统一 vec2 u_分辨率; 统一 vec2 u_mouse; 你...

回答 1 投票 0

在 GLSL 中读取噪声纹理时出现问题

我正在使用 p5js 编写一个 Perlin 噪声地形生成器,遵循本教程。该应用程序运行不佳,因此我决定使用着色器重写它,这是我以前从未使用过的东西。我从生成开始...

回答 1 投票 0

具有多种材质的对象中的轮廓着色器

我是着色器新手,我正在观看向模型添加轮廓的教程。 教程很完美,但我遇到了问题。 该着色器适用于具有一种材质的对象,就我而言,我有一个

回答 1 投票 0

如何将着色器的唯一实例添加到场景中的多个节点?戈多 4

我的游戏中有多个“可交互”对象,它们都扩展了 InteractableBody 类,该类设置了一些内容,以便玩家可以与该对象进行交互。我正在尝试添加轮廓...

回答 1 投票 0

如何处理顶点动画纹理 (VAT) 的旋转纹理?

我有由Houdini 中的实验室顶点动画纹理ROP 导出的顶点动画纹理。 现在我想在我自己用 Bevy(一个用 Rust 编写的游戏引擎)制作的游戏中使用它,而不是 Unity 或 UE。 我妈...

回答 1 投票 0

着色器中的持久数据 - GLSL

是否可以在同一个着色器中拥有持久数据? 类似于制服,只不过着色器本身可以设置它。 我想做的是将一个顶点嵌入到我的顶点流中......

回答 2 投票 0

在ThreeJS中使用点时,如果使用深度书写,每个点上都有黑色背景

我有一个使用点的场景,就像这样 我有一个使用点的场景,就像这样 <points ref={gPoints} position={position}> <bufferGeometry attach="geometry"> <bufferAttribute attach="attributes-position" count={positions.length / 3} array={positions} itemSize={3} usage={THREE.DynamicDrawUsage} /> // ... bunch of attributes </bufferGeometry> <shaderMaterial depthWrite={false} depthTest={false} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} /> </points> 我使用片段着色器来提供模糊效果 uniform float uResolutionWidth; uniform float uResolutionHeight; varying vec3 vColor; varying vec4 vRealPosition; varying float vDistance; void main() { float d = length(gl_PointCoord.xy - 0.5); float alpha = smoothstep(0.5, 0.15, d); gl_FragColor = vec4( vColor, alpha ); } 在顶点着色器中,我主要更新位置,但这是我设置的方式vColor #define PI 3.14159265358979323846 uniform float uTime; uniform float uRadius; attribute float pointSizes; attribute float randomX; attribute float randomY; attribute float randomZ; attribute float randomW; varying vec3 vColor; void main() { // set the vertex color float d = length(abs(position) / vec3(96.0, 22.0, 96.0)); d = clamp(d, 0.0, 1.0); float d2 = abs(position.y); vColor = mix(vec3(244.0, 131.0, 12.0), vec3(82.0, 27.0, 255.0), d2/22.0) / 255.; } 这是没有深度写作的情况下的样子的图片 但是当我像这样启用深度写作时 <shaderMaterial depthWrite={true} depthTest={true} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} transparent={true} // I also tried with and without transparent setting /> 现在每个点都有一个矩形黑色背景 然后我尝试丢弃 alpha 太低的点 uniform float uResolutionWidth; uniform float uResolutionHeight; varying vec3 vColor; varying vec4 vRealPosition; varying float vDistance; void main() { float d = length(gl_PointCoord.xy - 0.5); float alpha = smoothstep(0.5, 0.15, d); // Discard fragments that are fully transparent if (alpha < 0.001) { discard; } gl_FragColor = vec4(vColor * alpha, alpha); } 这就是它的样子 有谁知道黑色背景的原因是什么以及如何解决它?如果使用深度写作,这只是一个问题,任何帮助都值得赞赏<3 最终对我有用的是禁用 ThreeJS 中的深度写入 <shaderMaterial transparent={true} depthWrite={false} depthTest={true} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} /> 在片段着色器中我更改了 smoothstep 计算 void main() { vec2 cxy = 2.0 * gl_PointCoord - 1.0; float r = dot(cxy, cxy); float alpha = 1.0 - smoothstep(0.0, 1.0, r); vec3 brightColor = vColor * alpha; gl_FragColor = vec4(brightColor, alpha); }

回答 1 投票 0

在 ThreeJS 中使用点时,如果使用深度书写,每个点上都会有黑色背景

我有一个使用点的场景,就像这样 我有一个使用点的场景,就像这样 <points ref={gPoints} position={position}> <bufferGeometry attach="geometry"> <bufferAttribute attach="attributes-position" count={positions.length / 3} array={positions} itemSize={3} usage={THREE.DynamicDrawUsage} /> // ... bunch of attributes </bufferGeometry> <shaderMaterial depthWrite={false} depthTest={false} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} /> </points> 我使用片段着色器来提供模糊效果 uniform float uResolutionWidth; uniform float uResolutionHeight; varying vec3 vColor; varying vec4 vRealPosition; varying float vDistance; void main() { float d = length(gl_PointCoord.xy - 0.5); float alpha = smoothstep(0.5, 0.15, d); gl_FragColor = vec4( vColor, alpha ); } 在顶点着色器中,我主要更新位置,但这是我设置的方式vColor #define PI 3.14159265358979323846 uniform float uTime; uniform float uRadius; attribute float pointSizes; attribute float randomX; attribute float randomY; attribute float randomZ; attribute float randomW; varying vec3 vColor; void main() { // set the vertex color float d = length(abs(position) / vec3(96.0, 22.0, 96.0)); d = clamp(d, 0.0, 1.0); float d2 = abs(position.y); vColor = mix(vec3(244.0, 131.0, 12.0), vec3(82.0, 27.0, 255.0), d2/22.0) / 255.; } 这是没有深度写作的情况下的样子的图片 但是当我像这样启用深度写作时 <shaderMaterial depthWrite={true} depthTest={true} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} transparent={true} // I also tried with and without transparent setting /> 现在每个点都有一个矩形黑色背景 然后我尝试丢弃 alpha 太低的点 uniform float uResolutionWidth; uniform float uResolutionHeight; varying vec3 vColor; varying vec4 vRealPosition; varying float vDistance; void main() { float d = length(gl_PointCoord.xy - 0.5); float alpha = smoothstep(0.5, 0.15, d); // Discard fragments that are fully transparent if (alpha < 0.001) { discard; } gl_FragColor = vec4(vColor * alpha, alpha); } 这就是它的样子 有谁知道黑色背景的原因是什么以及如何解决它?如果使用深度写作,这只是一个问题,任何帮助都值得赞赏<3 最终对我有用的是禁用 ThreeJS 中的深度写入 <shaderMaterial transparent={true} depthWrite={false} depthTest={true} fragmentShader={fragmentShader} vertexShader={vertexShader} uniforms={uniforms} blending={THREE.AdditiveBlending} /> 在片段着色器中我更改了 smoothstep 计算 void main() { vec2 cxy = 2.0 * gl_PointCoord - 1.0; float r = dot(cxy, cxy); float alpha = 1.0 - smoothstep(0.0, 1.0, r); vec3 brightColor = vColor * alpha; gl_FragColor = vec4(brightColor, alpha); }

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.