Articles of 着色器

不同的着色器程序,但相同的缓冲区绘图

我已经设置了相同的着色器代码的3个不同的实例(例如,我已经将代码编译成3个独立的程序) 对于每个程序,我已经经历了这样的全部路线: //Setup gl.useProgram(program); const buffer = gl.createBuffer(); const location = gl.getAttribLocation(program, aName); //Upload (each uses the buffer/location it created in Setup gl.useProgram(program); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, data, usagePattern); gl.vertexAttribPointer(location, nComponents, dataType, false, 0, 0); gl.enableVertexAttribArray(location); //Draw gl.useProgram(program); gl.vertexAttribPointer(location, 2, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); 但是,无论我传入data – 例如不同大小的四边形,所有三个都是相同的大小。 值得注意的是,对其他制服/属性(如matrix和颜色)的更改每个对象都会更改 我如何改变这一点,以便每个实例的数据更改将被正确绘制? (我意识到,如果他们实际上使用相同的着色器,我应该保留对一个程序的引用,并使用某种缓冲池 – 但我还没有,只是开始使用WebGL)

编译着色器不工作?

我做了一个简单的像素着色器,使纹理单色,它预编译时,它完美的作品,但编译时(返回E_FAIL)。 该效果是使用fxc.exe与这些参数进行编译的:fxc / T ps_2_0 / Fo BasicHLSL.fxc BasicHLSL.hlsl 这是代码 ID3DXEffect* monochromeShader = nullptr; void initEffects(GameWindow& w) { long errorID = D3DXCreateEffectFromFile ( w.getD3DDevice(), "data/shaders/BasicHLSL.fxc\0", NULL, NULL, D3DXFX_NOT_CLONEABLE, NULL, &monochromeShader, NULL ); std::cout << std::hex << errorID; if (monochromeShader == nullptr) showErrorMsg(std::to_string(errorID).c_str()); } 在使用fxc.exe进行编译之前,这是我的着色器: // Pixel shader input structure struct PS_INPUT { float4 Position : […]

自上而下的射手灰度视野

我正在寻找一个解决scheme,使其看起来像这样的东西: 我得到的阶段是这样的: 所以我的问题是:是否有一个着色器会做灰度工作?

深知模糊 – 川濑

我正在使用这个Kawase模糊 ,将模糊应用到我的缓冲区。 但是我想以统一的方式应用这种模糊的方式,不管物体距离相机的距离如何。 我想我需要使用深度缓冲区,但我应该如何根据深度更改offset ? // offset : From 0 to number of pass float o = 0; o += tex2D(tex, coord + (float2( offset + 0.5, offset + 0.5) * texelSize)) * 0.25; o += tex2D(tex, coord + (float2(-offset – 0.5, offset + 0.5) * texelSize)) * 0.25; o += tex2D(tex, coord + (float2(-offset […]

Libgdx着色器TMX

我一直在为世界地图添加着色器而苦苦挣扎。 因为我想在这个世界上有夜晚,所以我偶然发现了着色器。 我得到的问题是,着色器只适用于玩家,而不是世界地图。 同样奇怪的是玩家之下的地面变黑了。 我用这个教程: http : //www.gamefromscratch.com/post/2014/07/08/LibGDX-Tutorial-Part-12-Using-GLSL-Shaders-and-creating-a-Mesh.aspx用第一个例子简单的接近。 public void render(float deltaTime) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); game.batch.setProjectionMatrix(camera.combined); camera.position.set(player.getPosition().x, player.getPosition().y, 0); camera.update(); game.batch.setShader(shader); mapRenderer.setView(camera); mapRenderer.render(); game.batch.flush(); game.batch.begin(); game.batch.draw(player.getTexture(), player.getPosition().x, player.getPosition().y, 32 / game.UNIT_SCALE, 32 / game.UNIT_SCALE); game.batch.end(); }

在Unity中获取场景法线

当我使用shaderreplace脚本获得深度正常值时,它将replace场景中的所有着色器,并使用网格几何体来计algorithm线,忽略应用于其上的法线贴图纹理。 我怎样才能得到最终渲染的场景法线到一个rendertexture像它出现在编辑器窗口正常的debugging模式,用于延期光计算和环境遮挡等?

如何操作Phong着色器的插值法线?

我目前正在实现一个小型的3D光栅化器,而且我被困在Phong着色器中。 我到现在为止有什么: – 我正在绘制一个立方体,我对每个顶点都有一个位置和法线。 – 我也有光的位置。 – 我可以使用重心技术插入正常的转换器。 2.problem: 我将所有的位置转换为屏幕坐标 void Rasterizer::drawTriangle(Vertex p_v0, Vertex p_v1, Vertex p_v2) { Vertex v0(Mat4::ConvertToScreen(p_v0.position, m_rtexture.GetWidth(), m_rtexture.GetHeight())); Vertex v1(Mat4::ConvertToScreen(p_v1.position, m_rtexture.GetWidth(), m_rtexture.GetHeight())); Vertex v2(Mat4::ConvertToScreen(p_v2.position, m_rtexture.GetWidth(), m_rtexture.GetHeight())); Triangle triangle(v0, v1, v2); AABB box = triangle.getAABB(); int minX = std::max((int)box.minPoint.x, 0); int minY = std::max((int)box.minPoint.y, 0); int maxX = std::min((int)box.maxPoint.x, m_rtexture.GetWidth() – 1); […]

如何将三角形信息放入glsl着色器中进行dynamic阴影处理?

我正在尝试用多less巧妙的优化和正确的硬件使用来推动GPU,所以我知道这可能会滞后我的电脑,这不是问题。 目前我的目标如下: 定义一个包含浮点数的可变大小结构(即一个数组),每三个浮点数定义一个位置向量,每9个定义一个三角形。 我需要创建一个这些结构数组(当前加载的所有阴影投射对象的数组),并将数组传递给GPU(glsl着色器)。 如果我将这些数据转化为这种格式,我可以使用散列法来获得阴影投射三角形的分期恒定search时间, 问题是将数据转换成我需要的格式。 如果这是C ++的格式将是一个向量的数组,我们完成,但GLSL不善于管理内存,有人知道一种方式来传递我所描述的时尚信息,或者我想做的事情那不能做?

为什么我的三角形不会在OpenGL C#中绘制?

我目前正在研究OpenGL和graphics编程,并决定使用OpenGL4CSharp库和SFML .NET库在C#中使用OpenGL。 我目前正在学习OpenGL Graphics编程的这个教程,而且由于某些原因,不能让Triangle绘制。 我试着用和不用着色器,但是没有三角形。 如果你知道这个问题可以解决,那么请告诉我。 如果你知道用C#处理OpenGL代码比使用OpenGL4CSharp更好的库,那么任何引用都是可以的。 感谢您的时间。 Github链接: Github 如果你想运行它/testing它/自己的代码乱七八糟的github链接。 我正在使用Visual Studio Code作为我的IDE,因为VSCode是合法的。 代码在这里(如果你不喜欢使用github&VSCode): using System; using SFML.Graphics; using SFML.Window; using OpenGL; namespace OpenGLProject { class Program { private static RenderWindow window; private static uint width = 1280; private static uint height = 720; private static String title = "Game"; private static ContextSettings windowContexSettings; […]

OpenGL Tessellation着色器不工作

我一直在尝试在OpenGL中使用镶嵌着色器几个小时,但是我很难让它工作。 我一直在关注OpenGL 4.0中的小蚱蜢三角形镶嵌 ,我相信我已经完成了必要的OpenGL官僚体系来执行(但显然不是)。 我的设置几何基本上是两个三角形组合成一个正方形,只有两个属性:位置和纹理坐标。 我有一个顶点,镶嵌控制+评估,还有一个片段着色器。 你会发现所有的着色器,以及着色器的设置代码(这是一个包装,但没有什么太惊奇的地方)。 无论如何,我还添加了镶嵌着色器开关的截图,当它们没有启用(只有顶点和碎片着色器)时,一切正常。 我特意做了这样的TCS不给新的几何,它只是试图镜像给定的input(我知道它不会tesselate任何东西呢),但也不起作用。 我也试着将顶点着色器(即MVP转换)中完成的转换转移到TES,但是这似乎也没有帮助。 我以为这可能是因为我在相机空间进行镶嵌工作(这是下面正在做的,但我也尝试了后者)。 我真的很困惑,我不能为了我的生活找出可能是错的。 也许这只是一些拼写错误或者在界面块中的某种名称冲突,但是我不能发现它。 任何帮助是极大的赞赏! 谢谢您的帮助! #version 410 // Vertex shader in vec3 position; in vec2 texture_coordinate; uniform mat4 model; uniform mat4 projection_view; out PipelineData { vec4 position; vec2 texture_coordinate; } vs_out; void main() { mat4 pvm = projection_view * model; vs_out.texture_coordinate = texture_coordinate; vec4 homogenous_position […]