问题标签 [hlsl]
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.
directx - 编译的directx9着色器文件的格式?
fxc.exe 生成的已编译像素和顶点着色器对象文件的格式是否正式或非正式地记录在任何地方?
我希望能够读取常量名称以从着色器文件中注册分配。我知道 D3DX 中的效果框架可以做到这一点,但我需要避免使用 D3DX,因为它可能没有安装在用户的机器上,而且我不需要它来做其他任何事情,所以我想避免他们不得不运行 directx 更新.
如果效果框架可以做到这一点,那么如果我可以找出文件格式但我似乎无法在任何地方找到它的文档,我也可以做到。
(这是用于directx9)
rounding - HLSL tex2d 采样器看似使用不一致的舍入;为什么?
我的代码需要根据对象的位置以不同的方式呈现对象的区域。我正在尝试使用颜色图来定义这些区域。
问题是当我从我的颜色图中取样时,我会遇到碰撞。即,颜色图中具有不同颜色的两个区域从采样器返回相同的值。
我尝试了各种格式的颜色图。在每种情况下,我将每个区域的颜色设置为“5”;
- 索引颜色
- RGB、RGBA:区域 1 将具有 RGB 5%、5%、5%。区域 2 将具有 RGB 10%、10%、10% 等。
- HSV 灰度:区域 1 的 HSV 为 0,0,5%。区域 2 将具有 HSV 0,0,10%,依此类推。
(在 Gimp 中选择的值)
tex2D 采样器返回一个值 [0..1]。
[然后我打算从 region 派生一个 int 数组索引。与此相关的代码无关,因此已从问题中删除]
对“5%”颜色进行采样给出了 hlsl 中 0.05098 的“区域”。据此,我假设 5% 表示 5/100*255,即 12.75,当存储在纹理中时四舍五入为 13。(推理:0.05098 * 255 ~= 13)
按照这个逻辑,50% 应该存储为 127.5。
采样后,我得到 0.50196,这意味着它存储为 128。
70% 应存储为 178.5。
采样后,我得到 0.698039,这意味着它存储为 178。
这里发生了什么舍入?
(127.5 变成 128,178.5 变成 178 ?!)
编辑:好的, http ://en.wikipedia.org/wiki/Bankers_rounding#Round_half_to_even 显然这是“银行家的四舍五入”。我不知道为什么要使用它,但它解决了我的问题。显然,这是一个 Gimp 问题。
我正在使用 Shader Model 2 和 FX Composer。这是我的采样器声明;
c# - 卸载到 HLSL/GPU 而不显示?
据我所知,某些数学函数(如 FFT 和 perlin 噪声等)在 GPU 上作为像素着色器执行时会快得多。我的问题是,如果我想利用它来计算结果并流式传输到位图,我可以在不需要在 Silverlight 中实际显示它的情况下做到这一点吗?
更具体地说,我正在考虑将其用于涉及大量 perlin 和其他噪声的大型地形生成,以及诸如高通和从高度图导出法线等的后处理。
java - 是否有适用于 JAVA 的 HLSL 或 HYDRA 像素着色器语言?
是否有任何与 JAVA 相关的 HLSL 或 HYDRA 像素着色器语言?所以我有一个图像。我想使用一些像素着色器语言来修改它,就像在 Flash 中使用 HYDRA 或使用 C# 的 HLSL 一样(在两种情况下我已经预编译了着色器)。那么如何使用 HYDRA 或 HLSL 或其他任何东西来开发 CROSSPLATFORM (win mac lin) JAVA 独立应用程序?
我需要一些教程,请..
directx - HLSL - 如何设置采样器 Min/Mag/Mip 过滤器以禁用所有过滤/抗锯齿?
我有一个 tex2D 采样器,我只想精确返回纹理上存在的那些颜色。我正在使用 Shader Model 3,所以不能使用load。
如果纹素重叠多种颜色,我希望它选择一种并让整个纹素成为那种颜色。
我认为要做到这一点,我想禁用 mipmapping,或者至少禁用 mips 的三线性过滤。
我的问题是我不太了解 Min/Mag/Mip 过滤,所以不确定我需要设置什么组合,或者这是否是我所追求的。
将完整纹理映射到我的球体后相关区域的截图;
抗锯齿/混合/过滤伪影清晰可见;我不要这些。
MSDN有这个说法;
D3DSAMP_MAGFILTER:D3DTEXTUREFILTERTYPE类型的放大过滤器
D3DSAMP_MINFILTER:D3DTEXTUREFILTERTYPE 类型的缩小过滤器。
D3DSAMP_MIPFILTER:在缩小期间使用的 Mipmap 过滤器。请参阅D3DTEXTUREFILTERTYPE。
D3DTEXF_NONE:与 D3DSAMP_MIPFILTER 一起使用时,禁用 mipmapping。
另一个了解 hlsl 内在函数的好链接。
解决
根本不是 HLSL 问题!对不起大家。我似乎问了很多无法回答的问题。Ogre 覆盖了上述设置。这是固定的;
c# - 编译任何 HLSL 效果的问题
我的代码是:
和我的 fx 文件:
它是如此简单,它不应该引起问题,但有这样的错误:
错误在哪里?其他东西似乎有问题,但我不知道在哪里,因为其他示例也无法编译。也许一些无效的字符?但是哪里?或者输入应该是unix格式?
c# - HLSL,具有不同 Texture2D 缩小算法的程序像素着色器
我正在尝试将一些图像插值算法移植到 HLSL 代码中,现在我得到了:
问题是编程像素着色器需要不同的方法,因为我们无法控制当前位置,只有实际循环通过像素的“内部”部分。
我已经用谷歌搜索了大约一整天,发现没有一个开源库在循环中使用了缩放算法。是否有这样的库,我可以从中移植一些方法?
我找到了http://www.codeproject.com/KB/GDI-plus/imgresizoutperfgdiplus.aspx但我真的不明白他解决问题的方法,移植它会很痛苦......
维基百科讲述了一种数学方法。所以我的问题是:我在哪里可以找到包含简单缩放算法的易于移植的图形开源库?当然,如果这样的库甚至存在的话。
directx - 在 DirectX 中仅加载纹理的一部分?
如果我有一个纹理文件,我将如何使用定义的矩形(上、左、下、右)仅加载其中的一部分?
从技术上讲,是否可以只读取我想要加载的部分而保持纹理的其余部分不受影响?
c++ - HLSL 和照明问题
我正在尝试弄清楚我的 HLSL 代码发生了什么,但我无法调试它,因为 C++ 不会发出任何错误。当我运行它时,应用程序就会关闭。我正在尝试为我制作的 3d 平面添加照明。下面是我的 HLSL。当我的像素着色器方法返回结构“outColor”时,问题就出现了。如果我将返回值改回 struct "psInput" ,一切都会重新开始工作。我的光矢量和颜色位于 fx 文件的顶部
下面是我的一些 C++ 代码。我展示这个的原因是因为它几乎可以为我的着色器创建表面法线来评估。用于照明
以下是我的完整 C++ 代码。显示图纸并要求通行证
shader - HLSL 如何在着色器之间传递数据/读取现有颜色值?
我有 2 个 HLSL ps2.0 着色器。简而言之,它们是:
着色器 1
- 读取纹理
- 基于此纹理输出颜色值
着色器 2
- 问题:需要从 Shader 1 中读取颜色
- 输出最终颜色,它是输入颜色的函数
(它们需要是不同的着色器,因为我已经达到了 1 个着色器的最大顶点着色器输出)
我的问题是我无法弄清楚 Shader 2 如何访问现有的片段/像素颜色。
知道如何用 HLSL 做这些事情将解决我的问题;
- 读取现有像素颜色(我认为这是不可能的)
- 将 Shader 1 的结果作为 float4 传递给 Shader 2
- 将着色器 1 的结果渲染为内存中的纹理,并让着色器 2 将其读取到