问题标签 [shader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - wpf 着色器模板
我使用了通过 Greg Schechter 的博客提供的着色器模板:http: //blogs.msdn.com/greg_schechter/archive/2008/08/11/a-visualstudio-buildtask-and-project-and-item-templates-for-writing -shadereffects.aspx
添加 wpf 着色器模板并创建项目非常简单。在编辑我的 xaml 时,我还可以看到着色器正在通过 Visual Studio 2008 设计器工作。但是当我运行我的程序时出现这个错误: 找不到类型'ShaderEffectLibrary1.Effect1'。编译时使用的程序集可能与加载时使用的程序集不同,并且类型丢失。
opengl - OpenGL纹理基础内部格式到着色器
我试图用着色器模仿 OpenGL glTexEnv 的行为。这是一个相当复杂的功能,但应该是可行的。唯一的问题是该函数的工作方式因纹理基础内部格式而异。如何从纹理中获取该信息?纹理基础内部格式由 glTexImage2D 函数给出,所以我必须将它保存到某个变量并根据绑定纹理将其传递给着色器,或者我可以通过 OpenGL 以某种方式获得它吗?
xna - XNA SpriteBatch 和 BasicEffect 不兼容?
我想在全局范围内控制 2D SpriteBatch 渲染图形集的环境照明。我意识到我可以通过混合传入 SpriteBatch.Draw 的颜色来做到这一点,但我宁愿在全球范围内这样做。
BasicEffect 着色器控制 XNA 中用于简单场景的固定功能管道样式照明。
BasicEffect 着色器和 SpriteBatch 的着色器不兼容吗?有没有人让这些一起工作?
c# - 是否可以使用着色器来找到两个纹理之间的“差异”?(XNA/HLSL)
我制作了一个简单的基于网络摄像头的应用程序,它检测“运动边缘”,因此绘制了一个纹理,显示当前帧的像素与前一帧显着不同的位置。这是我的代码:
有没有办法使用着色器将此计算卸载到 GPU(使用上述方法可以达到大约 25/26 fps,但这有点慢)?我对 HLSL 着色器的工作原理有基本的了解,并不期望有完整的解决方案,我只想知道这是否可能以及如何从着色器中获取“差异”纹理数据,以及这实际上是否会更快.
提前致谢。
c++ - 延迟着色 DirectX 演示?
我一直在阅读很多关于延迟着色的文章,并想尝试进入它。问题是我找不到演示延迟着色如何同时支持这么多灯光的示例 - 我找到了一个非常简单的演示,其中包含 Code Sampler 中的单个灯光和一个 nVidia HDR 示例,但仅此而已。
有谁知道我应该去哪里获得关于如何通过照明进行延迟着色的良好介绍性教程(带代码)?我可以用一盏灯让它工作,但一盏灯有点太简单了(很明显:P)。此外,我只知道如何在延迟着色代码中制作定向灯,这很不错,但与渲染灯的常规方式有些不同,所以我想知道是否有教程或我能找到的任何东西,或者只是阅读可以帮助我弄清楚的材料在延迟渲染中编写着色器和特殊效果如何工作?
谢谢你的帮助!
shader - ATIX550 不能在 Cg 中使用 HardwareShadowMap?
对不起我的英语。我不擅长英语。完全相同的代码,在 GF7600GT 中,Tex2Dproj 可以返回正确的值。但是X550回归深度纹理样本,ATI显卡是不是完全支持Cg的NV?
directx - 所有不同的 HLSL 采样器类型有什么用途?
我目前正在使用 DX9/SM3,关于HLSL 采样器的 MSDN 文档似乎非常缺乏解释如何使用不同的采样器类型。更糟糕的是,他们试图在一篇文章中涵盖 DX9 和 DX10,所以他们将所有关键词混在一起:
采样器名称= SamplerType { Texture = < texture_variable >; [ state_name = state_value ;] ... };
...
采样器类型
[在] 采样器类型,它是以下之一:sampler、sampler1D、sampler2D、sampler3D、samplerCUBE、sampler_state、SamplerState。
Direct3D 9 和 Direct3D 10 之间的区别:
Direct3D 10 支持一种额外的采样器类型:SamplerComparisonState。
我觉得与这篇文章相反,SamplerState
只有 DX10。我看到的几乎所有代码都sampler_state
用于SamplerType。BasicHLSL (DX9) 中的一个简单示例:
为什么所有不同的 _SamplerType_s 都存在,你什么时候使用,比如说,sampler
或者sampler2D
代替sampler_state
?无论如何,您在获取时都需要明确,例如tex2D
, texCUBE
,那么这里发生了什么?
qt - 带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?
我有一个用 Qt 编写的MDI应用程序。一些子窗口包括QGLWidget
s,即OpenGL 上下文。其中最突出的是使用 OpenGL 顶点和片段着色器来可视化他们的数据。
我需要以编程方式捕获应用程序主窗口的屏幕截图,当然包括所有碰巧可见的子窗口。起初听起来很容易(“肯定被问过很多次,所以让我们用谷歌搜索吧!”),但仔细观察后似乎有点棘手......
现在这是我到目前为止所尝试的:
QPixmap::grabWidget
不适用于使用着色器程序的子窗口,显然是因为重定向上下文似乎不支持必要的 OpenGL 扩展。(渲染代码检查关联的上下文是否支持所需的扩展,如果不支持则拒绝继续。)QPixmap::grabWindow
默默地让所有 OpenGL 上下文为空——即使是那些只使用基本原语的上下文。QGLWidget::grabFrameBuffer
有效,但仅捕获特定子窗口的 OpenGL 上下文,而我想获取整个应用程序(基本上是Alt+PrtScr
在 Windows 中执行的操作)。
我还尝试先执行#2,然后为所有子窗口迭代#3,只需将#3 的结果复制到#2 中图像的正确位置。这工作得很好,直到我让一些子窗口重叠——在这种情况下,来自#3 的图像会覆盖子窗口框架等。所以这种方法可能需要更多的代码来处理所有令人讨厌的极端情况......
一些额外的背景:一旦我得到截图,我将把其中的几个放在一个序列中以创建一个视频——可能使用ffmpeg。这使得这个问题成为我上一个问题(第一部分)的延续;只是该应用程序已从单上下文独立 OpenGL 程序演变为使用 Qt 进行整体窗口和 UI 小部件的东西,并将图形嵌入子窗口中。
虽然我当然更喜欢一个不错的 Qt-ish 跨平台解决方案,但我也愿意考虑使用 Windows 特定的 hack。(这应该是可能的,因为我可以看到Alt+PrtScr
做非常正确的事情。)
那么,有什么建议吗?
c++ - 计算 3D 切线空间
为了在 GLSL 着色器中使用法线贴图,您需要知道每个顶点的法线、切线和双切线向量。RenderMonkey 通过为此提供它自己的预定义变量 (rm_tangent
和rm_binormal
) 使这变得容易。我正在尝试将此功能添加到我自己的 3d 引擎中。显然,可以使用每个顶点的 xyz 坐标、uv 纹理坐标和法线向量来计算三角形中每个顶点的切线和双切线。经过一番搜索,我设计了这个函数来计算三角形结构中每个顶点的切线和双切线。
当我使用这个函数并将计算的值发送到我的着色器时,模型看起来几乎就像它们在 RenderMonkey 中所做的一样,但它们以一种非常奇怪的方式闪烁。我将问题追溯到我发送 OpenGL 的切线和双切线。这让我怀疑我的代码做错了什么。任何人都可以看到任何问题或对其他尝试方法有任何建议吗?
我还应该指出,上面的代码非常hacky,我对发生的事情背后的数学知之甚少。
directx - HLSL 循环/采样问题
我有一段 HLSL 代码,如下所示:
我得到的结果与只执行一次的循环一致。我检查了 PIX 中的着色器,事情变得更加奇怪,指示代码中位置的黄色箭头进入循环,穿过它一次,然后跳回到起点,此时黄色箭头不再移动,但光标遍历代码并返回结果(PIX 中的一个错误,或者我只是使用错误?)
我怀疑这可能与纹理读取被编译器移出循环有关,但是我认为 tex2Dlod 不会发生这种情况,因为我手动设置了 LOD:/
所以:
1)有什么问题?
2)任何建议的解决方案?