Articles of 着色器

顶点和片段着色器worldNormal

如何在Vertex和Fragment着色器中访问/计算worldNormal? 非常感谢 !

XNA着色器有不需要的色调

我正在着色,但它有一个奇怪的色调,我不知道为什么。 现在它非常简单,它只是设置一个rendertarget,绘制它,将其作为纹理传递给着色器,然后将像素映射到全屏四元组。 如果我删除了rendertarget / texture部分,并直接将其传递给着色器,它就会正常出现,但是一旦我开始包括rendertargets,颜色就会变得有点奇怪。 这里有两张图片显示了我的意思: 这是它应该看起来正常 这是rendertargets的外观 我已经包含着色器的代码和下面的绘制方法: 着色器: float4x4 World; float4x4 View; float4x4 Projection; Texture glowTexture; sampler glowSampler = sampler_state { texture = <glowTexture>; magfilter = LINEAR; minfilter = LINEAR; mipfilter = LINEAR; AddressU = clamp; AddressV = clamp; }; struct VertexShaderInput { float4 Position : POSITION0; }; struct VertexShaderOutput { float4 Position […]

为什么我不能在xna中加载一个简单的像素着色器效果(.fx)文件?

我只是想加载一个简单的* .fx文件到我的项目中,使(像素着色器)效果。 但是,每当我尝试编译我的项目,我在Visual Studio错误列表中出现以下错误: Errors compiling .. ID3DXEffectCompiler: There were no techniques ID3DXEffectCompiler: Compilation failed 我已经search了谷歌,并发现许多人有同样的问题。 我意识到这是一个编码问题。 返回行无法识别'\ n'。 我试图复制并粘贴到记事本,并保存为ASCII或UTF8编码。 但结果总是一样的。 你有想法吗? 感谢一个looot 🙂 这是我的[.fx]文件: sampler BaseTexture : register(s0); sampler MaskTexture : register(s1) { addressU = Clamp; addressV = Clamp; }; //All of these variables are pixel values //Feel free to replace with float2 variables […]

HLSL白天到晚上的后期处理(DTN)

我正在尝试通过使用全屏HLSL像素着色器来实现2D游戏(XNA)的“日常”filter(通常用于电影)。 其目的是将任何明亮多彩的图像变成黑暗和蓝色的夜晚版本的图像,有点像: 从概念上讲,我的想法是: 降低亮度 合并蓝色灰度版本的图像与原始图像 增加对比度 目前的着色器是: // Look up the color of the original pixel float3 colorOriginal = tex2D(TextureSampler, texCoord); // Get corresponding greyscale value (adjusted to human vision) float greyscale = dot(colorOriginal, float3(0.3, 0.59, 0.11)); // Merge and tint color.rgb = lerp(colorOriginal, colorOriginal * float3(pow(greyscale,6), pow(greyscale,6), pow(greyscale,3)), timeFactor); 结果还是不尽如人意。 我怎么能改善这个?

如何在OpenGL 4.2中启用几何着色器?

我将基于Direct3D的引擎移植到OpenGL,并使用几何着色器来渲染文本字符(基本上是纹理广告牌)。 D3D版本可以正常工作,但是在OpenGL模式下,屏幕中心只有一个闪烁点。 看起来,几何着色器阶段似乎没有启用(在AMD GPUPerfStudio中,表示GS阶段的框是灰色的)。 我tripple – 检查OpenGL后端和着色器代码,但无法find任何错误。 也许,我错过了一些东西。 以下是相关着色器的源代码: 顶点着色器: in vec4 in_xy_wh; in vec4 in_tl_br; // UVs for top left and bottom right corners out vec4 v_xy_wh; out vec4 v_tl_br; void main() { v_xy_wh = in_xy_wh; v_tl_br = in_tl_br; } 几何着色器: layout(points) in; layout(triangle_strip, max_vertices=4) out; in vec4 v_xy_wh[]; in vec4 v_tl_br[]; // UVs […]

使用opengl着色器翻译滚动重复2D纹理

我设法实现了一个无限的2D纹理滚动使用以下着色器。 顺便说一句我使用的是cocos2d-x 2.2.1。 顶点着色器: attribute vec4 a_position; attribute vec2 a_texCoord; #ifdef GL_ES varying mediump vec2 v_texCoord; #else varying vec2 v_texCoord; #endif void main() { gl_Position = CC_MVPMatrix * a_position; v_texCoord = a_texCoord; } 片段着色器: #ifdef GL_ES precision lowp float; #endif uniform vec2 u_time; uniform vec4 u_color; varying vec2 v_texCoord; uniform sampler2D CC_Texture0; void main() { […]

奇怪的行为使用VAO(OpenGL 4.0)

我想用VAO显示一个简单的纹理猴子网格。 这里是渲染部分的代码,首先没有VAO看看我在找什么结果。 Texture *pTexture = meshList[idx]->GetSubMaterial()->getTexture(); VertexBuffer *pVBO = meshList[idx]->GetVertexBuffer(); pVBO->Lock(); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, OFFSET_BUFFER(0)); if (pTexture) { glEnableVertexAttribArray(1); glActiveTexture(GL_TEXTURE0); pTexture->Lock(); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, OFFSET_BUFFER(pVBO->GetVerticesByteSize(VERTEX_POSITION))); } glEnableVertexAttribArray(2); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, OFFSET_BUFFER( (pVBO->GetVerticesByteSize(VERTEX_POSITION) + pVBO->GetVerticesByteSize(VERTEX_TEXTURE)))); pVBO->Unlock(); glDrawArrays(GL_TRIANGLES, 0, meshList[idx]->GetVertexBuffer()->GetBufferSize()); 这里是输出: 正如你所看到的,纹理映射是正确的。 现在我想把上面的代码实现到VAO中。 所以我将它置换到主循环之前(所以不在我的渲染系统中)并将其复制到我的Mesh类(模型类)的初始化中。 这里是Mesh类的头(只是看这个类的组成,属性等等): class Mesh : public Resource […]

只用GPU渲染地形

这不是关于生成平面几何,然后在其上应用着色器。 相反,我想要一个大的单平面平面,然后在其上应用着色器。 顶点着色器有一个uniform vec3 realPlanePosition并调用一个高度计算函数: // Vertex shader code uniform vec3 realPlanePosition; varying vPosition; float heightCalculation(vec2 verticePosition) { // Just for pseudo-code (more black magic append here). return magicNoise2D(verticePosition.x, verticePosition.y); } void main(void) { vec3 vPosition = position; vec2 verticePosition = vec2(vPosition.x + realPlanePosition.x, vPosition.y – realPlanePosition.z); vPosition.z = heightCalculation(verticePosition); gl_Position = projectionMatrix * modelViewMatrix […]

着色器编码器有多需要?

我知道玩游戏机制的程序员,无论是直接与源代码或脚本工作都需要,但是已经有很多着色器,我想你可以find任何东西来满足你正在寻找的视觉效果,这是一个公平的假设吗?

webgl phong着色器中的错误:照明随着对象旋转

我正在webgl中使用一个简单的phong着色器,我想我正在接近,但是还是有一些错误。 死的放弃:如果我有一个广告牌,并让它滚动(所以它像一个轮子旋转),广告牌点亮的部分旋转:(这使我困惑,因为它似乎是一个模型的问题matrix,但是变换使得所有的位置和旋转都是正确的,并且照明math完全是在世界坐标中完成的,只是照明是错误的。与视图matrix一样,我可以四处移动,自由地看,所有东西都位于适当的位置,只是点燃了错误。 这里是我的着色器(减去空间的定义,并将模型matrix中的光照移动到GPU中以便清晰){如果您更喜欢在github中阅读: https : //github.com/nickgeorge/quantum/blob/master/index .html#L41 } <script id="fragment-shader" type="x-shader/x-fragment"> void main(void) { vec3 lightWeighting; if (!uUseLighting) { lightWeighting = vec3(1.0, 1.0, 1.0); } else { vec3 lightDirection = normalize(vLightPosition.xyz – vPosition.xyz); float directionalLightWeighting = max(0.0, dot( normalize(vTransformedNormal), lightDirection)); lightWeighting = uAmbientColor + uPointLightingColor * directionalLightWeighting; } vec4 fragmentColor; if (uUseTexture) { fragmentColor = […]