是否可以在Android应用程序中使用顶点或像素着色器?请举例说明如何设置着色器.
在像素着色器中实现卷积对于非常大量的纹理提取而言有些代价.
实现卷积滤波器的直接方法是对每个片段进行N×N个查找,每个片段使用两个循环.一个简单的计算表明,使用4x4高斯内核模糊的1024x1024图像需要1024 x 1024 x 4 x 4 = 16M查找.
人们可以做些什么呢?
谢谢!
我使用以下代码在HTML文件中声明我的GLSL ES着色器程序:
<script id="shader-fs" type="x-shader/x-fragment">..shader-code..</script>
Run Code Online (Sandbox Code Playgroud)
正如在学习WebGL示例中看到的那样.一切正常,但我不明白为什么我应该使用脚本标签的type属性.我想知道指定"x-shader/x-fragment"值的位置.是谁... W3C,Khronos集团或浏览器开发商?有谁能够帮我?Tahnk你.
例如.在FragmentShader中: -
struct LightSource
{
int Type;
vec3 Position;
vec3 Attenuation;
vec3 Direction;
vec3 Color;
};
uniform LightSource Light[4];
main(){
//somecode
}
Run Code Online (Sandbox Code Playgroud)
现在我该如何发送值Light[4].
我试图让本教程工作,但我遇到了两个问题,其中一个是以下问题.
当我按原样运行代码时,我在片段着色器中得到一个错误:THREE.WebGLShader: gl.getShaderInfoLog() ERROR: 0:2: '' : No precision specified for (float).所以我所做的是为我定义的每个浮点数/向量指定精度varying highp vec3 vNormal.这消除了错误,但我不明白为什么?我找不到任何其他将精度值添加到变量声明的示例.任何人都能解释为什么会这样吗?它与我的浏览器(Chrome 38)有关吗?
此着色器(末尾的代码)使用光线匹配来渲染过程几何:
但是,在图像(上图)中,背景中的立方体应该部分遮挡粉红色的固体; 不是因为这个:
struct fragmentOutput {
float4 color : SV_Target;
float zvalue : SV_Depth;
};
fragmentOutput frag(fragmentInput i) {
fragmentOutput o;
...
o.zvalue = IF(output[1] > 0, 0, 1);
}
Run Code Online (Sandbox Code Playgroud)
但是,我不能在我的生活中弄清楚如何在这里正确生成深度值,正确地允许光线移动的实体隐藏/不掩盖场景中的其他几何体.
我知道这是可能的,因为这里有一个有效的例子:https://github.com/i-saint/RaymarchingOnUnity5(相关的日语博客http://i-saint.hatenablog.com/)
然而,它是日语,很大程度上没有文档,而且非常复杂.
我正在寻找同样的东西的极简化版本,从中可以构建.
在着色器中我正在使用片段程序行:
float2 output = march_raycast(i.worldpos, i.viewdir, _far, _step);
Run Code Online (Sandbox Code Playgroud)
将四边形上的输入点p映射到需要相机(此着色器附加到其上)的输出浮点2(密度,距离),其中距离是从程序表面上的四边形到"点"的距离.
问题是,如何以任何有用的方式将其映射到深度缓冲区?
完整的着色器在这里,使用它,创建一个球体在0,0,0,大小至少为50的新场景,并为其指定着色器:
Shader "Shaders/Raymarching/BasicMarch" {
Properties {
_sun ("Sun", Vector) = (0, 0, 0, 0)
_far ("Far Depth Value", Float) = 20
_edgeFuzz ("Edge fuzziness", Range(1, 20)) = 1.0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试为团结编写着色器,以突出网格的重叠片段.它应该适用于一个重叠自身的对象以及多个对象.
首先,我试图通过碰撞检测来实现这一点,但我认为最好的方法是编写着色器.
我对着色器不太熟悉,所以如果有人能帮助我,我将不胜感激.
我认为它可以通过使用类似http://docs.unity3d.com/Manual/SL-Stencil.html的模板着色器来完成, 但是此着色器仅渲染两个对象的交集而不渲染整个对象.
我还发现基于深度的着色器(https://chrismflynn.wordpress.com/2012/09/06/fun-with-shaders-and-the-depth-buffer/)但这也适用于两个对象而不是在一个自身重叠的网格上工作
关于@Zze评论关于两个Pass的想法我现在有两个着色器.当一个具有一个着色器而另一个具有第二个着色器时,它适用于两个对象.
也许任何人都可以帮助我如何将它组合成一个着色器,它也可以在自身重叠的对象中工作?
ShaderOne
Shader "Custom/ShaderOne"
{
SubShader {
Tags { "RenderType"="Opaque" "Queue"="Geometry"}
Pass {
Stencil {
Ref 2
Comp always
Pass keep
Fail decrWrap
ZFail keep
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata {
float4 vertex : POSITION;
};
struct v2f {
float4 pos : SV_POSITION;
};
v2f vert(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
half4 frag(v2f i) : SV_Target { …Run Code Online (Sandbox Code Playgroud) 我最近一直在做一些DirectX 10工作,我正在寻求转向DirectX 11和Shader Model 5.0.我过去曾写过一些非常简单的着色器,我正在寻求拓宽视野,开拓更复杂的着色器.我的问题有点多重:
什么是编程着色器的最佳工具?我只使用了visual studio和SOME FX作曲家 - 阅读:足以打开它并查看它.
gfx卡的品牌是否会影响您可以编程的着色器类型?
排序与#1相同的问题,但如果您打算编写DirectX着色器而非特定于供应商,是否可以使用跨供应商工具?
我一直在寻找OpenGL着色器的例子,我看到了一些不同的风格.一些着色器专门使用内置类型(即gl_Vertex)与应用程序代码和着色器之间传输数据.
一些着色器使用变化类型将数据从顶点传输到片段着色器而不是gl_Position和gl_FragColor.
一些着色器使用前缀'in'和'out'来指定数据传输:
in vec3 vertex;
void main() {
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
...而其他人使用属性:
attribute vec4 vertex_attrib;
attribute vec4 tex_coord_attrib;
attribute vec4 color_attrib;
uniform mat4 mvp_matrix;
uniform mat4 texture_matrix;
varying vec4 frag_color;
varying vec2 tex_coord;
void main(void)
{
gl_Position = mvp_matrix * vertex_attrib;
vec4 transformed_tex_coord = texture_matrix * tex_coord_attrib;
tex_coord = transformed_tex_coord.st / transformed_tex_coord.q;
frag_color = color_attrib;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,GLES 2.0中编写着色器的首选方法是什么?有最佳实践指南吗?有人可以提供一个顶点和片段着色器的例子,它是"怎样做"的光辉榜样?
谢谢.
我已经看到在QML中有一个Bezier曲线的示例实现,但我正在寻找一个如何实现虚线或点状贝塞尔曲线的提示.据我所知,Bezier曲线示例的作者QSGGeometryNode用于存储内部,QSGGeometry并QSGFlatColorMaterial在其上应用了材料.然后,他们只需创建点列表并在它们之间绘制段.
是否有可能写一个shader,并把它应用到QSGFlatColorMaterial(以显示线dashed,dotted等等)?
最终,是否可以存储多个QSGGeometry内部QSGGeometryNode?
UPDATE
我想在"纯QtQuick"中实现它- 而不是在"旧"接口(例如QPainter etc)中 - 因为我不想使用切换上下文(openGL和CPU)的东西.我更喜欢使用自定义着色器的解决方案(如果它可行) - 因为我将有更多的可能性来实现自定义外观(虚线,溺爱,彩色,可能是动画等).
如果不可能,我会用QPainter.