Articles of 着色器

如何在GLSL中使用缓冲区来执行LUT查找?

我目前正在一个医疗应用程序,需要不同的种类(高达完全个人)的查询表(LUT)图像显示。 这完成了10bit。 所以大部分时间需要使用16位灰度像素。 我select使用现代的OpenGL,因此我希望查找发生在GLSL着色器程序中。 我试着用sampler1D上传一个1D-Tedture(R16) 来做这样的查找: uniform sampler2D tex; uniform sampler1D lutData; in vec2 fragTexCoord; out vec4 finalColor; void main() { float primaryLvl = texture(tex, fragTexCoord); // index image 'color' in Lut-Texture float red = texture(lutData, primaryLvl); finalColor = vec4(red, red, red, 1.0); } 它的工作原理和预期的一样 – 然而纹理(也是一维的)仅限于8192的大小(在我的机器上)。 所以不满足全范围16位图像的要求。 对于上述testing,我上传我的图像为R16(对我来说是灰色的) – 标准化浮点数0-1.0。 上传缓冲区(任意数据)并在那里查找是否可行? 我怎么做这个(语法)? 而且我现在的像素格式会干扰我的想法,所以我必须把它作为R16_INT上传。 或者可以(也应该)我把它在从Normalized到Int的着色器(这是如何完成的)? […]

将着色器仅应用于精灵的一部分

我正在尝试在透明图像覆盖图像时使图像模糊,我只希望模糊正在覆盖的部分。 所以如果一半的原始图像没有被重叠,那么这一半并不模糊,其余的是。 不模糊 – 不重叠http://img.ufgame.com/xna/B7618pc.png 完全模糊 – 部分重叠http://img.ufgame.com/xna/vx4Tq4b.png Game1.cs namespace NewShaderTutorial { /// <summary> /// This is the main type for your game /// </summary> public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Effect blur; Texture2D surge; Rectangle surgeRectangle; Texture2D bubble; Rectangle bubbleRectangle; private bool overlapping; public Game1() { graphics = new GraphicsDeviceManager(this); […]

像素着色器创建捕食者效果

我学习着色器,我想我会尝试使用它们来创造一种捕食者的效果。 我已经达到了将我的关卡渲染到渲染目标的程度,并将其传递给着色器文件,并试图从中获取颜色。 据我的理解,这应该使玩家完全看不到我所拥有的代码。 我已经包含了我的代码的相关部分。 着色器代码: float4x4 World; float4x4 View; float4x4 Projection; sampler s0; texture land; sampler land_sample = sampler_state{ Texture = land; }; float4 PixelShaderFunction(float2 coords: TEXCOORD0) : COLOR0 { float4 color = tex2D(s0, coords); float4 land_color = tex2D(land_sample, coords); if (color.a) return land_color; return color; } 主要绘制方法: protected override void Draw(GameTime gameTime) { //First […]

3D GUI着色器问题

所以我想在我的directX11项目中创建其中的一个。 那里的小轴向你展示了方向。 我为我的世界几何graphicsdevise了一个很好的3d着色器,我从Frank D. Luna(他在directX上写了书籍)和另外一个用于我的2D UI,所以我想看看那些,看看我能够想出什么,因为我一开始对shaders一点也不了解。 但这是我想出来的。 float4x4 gWorldViewProj; struct VertexIn { float3 PosL : POSITION; float3 NormalL : NORMAL; float2 Tex : TEXCOORD; }; struct VertexOut { float4 PosH : SV_POSITION; float2 Tex : TEXCOORD; }; VertexOut VS(VertexIn vin) { VertexOut vout; // Transform to homogeneous clip space. vout.PosH = mul(float4(vin.PosL, 1.0f), gWorldViewProj); // […]

统一如何在运行时更改材料属性

我正在做一个统一游戏,我想从脚本中改变材质的颜色。 材质适用于线条渲染器。 我目前有以下脚本: using UnityEngine; using System.Collections; public class LaserProperties : MonoBehaviour { public Vector3 RGBStrengths; public LineRenderer lineRenderer; /* * returns the color in RGB. */ Color getColor(){ Color c = new Color (0, 0, 0, 1); float highest = Mathf.Max (RGBStrengths.x, RGBStrengths.y, RGBStrengths.z); cr = RGBStrengths.x / highest; cg = RGBStrengths.y / highest; […]

如何在SM 2.0中采样具有指定LOD的纹理?

这是我的问题,在SM 3.0中有HLSL intrasic函数tex2Dlod在指定的坐标和指定的详细程度上选取纹理2d上的颜色。 但经过长时间的网上search,我没有find等同于SM 2.0(ps_4_0_level_9_3)…

片段着色器编译在webGL中,但不是在OpenGL中

我在Haxe编程(语言编译到多个平台),我写了一些着色器。 我的片段着色器在html5中运行良好,但是当我尝试为本机(OS X和/或Neko,Haxe的VM)编译时,出现着色器编译错误,但没有详细信息(我正在使用平台抽象为我做这些事情)。 这是着色器: precision mediump float; varying vec4 v_color; void main() { gl_FragColor = v_color; } 非常简单,你可以看到。 它在webGL中运行良好,但似乎不会在OpenGL中编译。 我不是着色器方面的专家,所以我不知道什么可能是错的。 我使用一些只存在于webGL中的语法? 还有,以防万一,这里是我的顶点着色器(编译好): attribute vec3 a_position; attribute vec4 a_color; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 v_color; void main() { gl_Position = uMVMatrix * vec4(a_position, 1); v_color = a_color; }

在unity3d的CG Shader里面的两遍之间共享一个函数

我正在为Unity3d编写CG语言的着色器。 在制作透明对象时,您需要在SubShader中创建两个相似的传递。 首先只渲染背面( Cull Front ),其次渲染正面( Cull Back )。 但是顶点和片段函数的代码是一样的。 是否有可能不加倍的代码和声明一些函数,将通过共享? 我想在我的代码示例中有类似的东西。 Shader "cool shader" { Properties { … } SubShader { CGPROGRAM // need to declare vertexOutput somewhow here float4 sharedFragFoo(vertexOutput i) : COLOR // How to make smth like this? { …. return float4(…); } ENDCG pass { CGPROGRAM #pragma vertex vert #pragma […]

环境映射 – 使用OpenGL的立方体映射

我正在尝试做立方体贴图。 问题是我得到这个: 这是我旋转它时得到的: 但它应该看起来像这样 这里是顶点着色器的代码 varying vec2 tex_coord; void main() { vec3 v = vec3(gl_ModelViewMatrix * gl_Vertex); gl_TexCoord[0].stp = normalize(gl_Vertex.xyz); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; //gl_ModelViewMatrix * gl_Vertex } 片段着色器 uniform samplerCube _tex; void main() { //gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); gl_FragColor = textureCube(_tex, gl_TexCoord[0].stp); } 你能告诉我我做错了什么吗?

ETC1支持android alpha问题(GLSL cocos2d-x)

我想在我的游戏中支持etc1,但不知何故,它不工作(我使用的是cocos2d-x C ++ GLProgram* glp = new GLProgram(); glp->initWithVertexShaderFilename("testv.vsh", "test.fsh"); glp->addAttribute(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION); glp->addAttribute(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR); glp->addAttribute(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD); glp->link(); glp->updateUniforms(); Texture2D* tex = Director::getInstance()->getTextureCache()->addImage("MenuButton_alpha.pkm"); GL::bindTexture2DN(1, tex->getName()); GLuint t1Location = glGetUniformLocation(glp->getProgram(), "tex1"); glp->setUniformLocationWith1i(t1Location, 1); MySprite->setShaderProgram(glp); .vsh attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec4 a_color; varying vec4 v_fragmentColor; varying vec2 v_texCoord; varying vec2 v_texCoord2; uniform sampler2D tex1; void […]