标签: hlsl

顶点着色器世界变换,为什么我们使用4维向量?

从这个网站:http://www.toymaker.info/Games/html/vertex_shaders.html

我们有以下代码段:

// transformations provided by the app, constant Uniform data
float4x4 matWorldViewProj: WORLDVIEWPROJECTION;

// the format of our vertex data
struct VS_OUTPUT
{
  float4 Pos  : POSITION;
};

// Simple Vertex Shader - carry out transformation
VS_OUTPUT VS(float4 Pos  : POSITION)
{
  VS_OUTPUT Out = (VS_OUTPUT)0;
  Out.Pos = mul(Pos,matWorldViewProj);
  return Out;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么结构VS_OUTPUT有一个4维向量作为它的位置?位置只是x,y和z?

math directx vector hlsl

3
推荐指数
2
解决办法
2470
查看次数

HLSL DirectX9:是否有getTime()函数或类似函数?

我目前正在开发一个使用C++和DirectX9的项目,我正在研究创建一个随着时间的推移颜色不同的光源.

我知道C++有一个timeGetTime()函数,但想知道是否有人知道HLSL中的一个函数允许我这样做?

问候.麦克风.

c++ directx time function hlsl

3
推荐指数
1
解决办法
3952
查看次数

Reflection.Emit中的短格式操作码出错

我正在制作一种与hlsl非常相似但只支持像素着色器的小语言.此语言使用reflection.emit构建实现相同功能的点网络程序集.我正在测试我的分支指令"if"的实现,并且在我的一个单元测试中(一个大的if if inner if else)失败并出现以下错误消息:

System.NotSupportedException:位置上的非法单字节分支:32.请求的分支是:132.

在我的案例OpCodes.Br_S中,我已经将问题追溯到使用简短格式指令.解决方案很简单,我用OpCodes.Br替换了OpCodes.Br_S但是我对这个解决方案有几个问题:

此解决方案对生成的代码的性能有影响吗?如果我想为单个字节正确生成Br_S而对于其他情况需要Br,我该怎么做?这里的问题是我正在使用访问者模式和像"if"这样的分支指令我必须首先输出Br或Br_s,此时我无法知道剩下的代码是否需要多个单字节跳到标签.为了更好地说明我的问题,这是我为以下语句生成的代码:

我的语言:

int a = -1; if (1>1) { a=1; } else if(2>2) { a=2; }

IL:

.method public virtual final instance int32 Main() cil managed {

.maxstack 4
.locals init (
    [0] int32 num)
L_0000: ldc.i4.m1 
L_0001: stloc.0 
L_0002: ldc.i4.1 
L_0003: ldc.i4.1 
L_0004: ble.s L_000a
L_0006: ldc.i4.1 
L_0007: stloc.0 
L_0008: br.s L_0010
L_000a: ldc.i4.2 
L_000b: ldc.i4.2 
L_000c: ble.s L_0010
L_000e: ldc.i4.2 
L_000f: stloc.0 
L_0010: ldloc.0 
L_0011: ret 
Run Code Online (Sandbox Code Playgroud)

}

int a …

c# reflection.emit hlsl opcode

3
推荐指数
1
解决办法
1572
查看次数

试图找到HLSL编译器

谷歌搜索"HLSL编译器"和一些东西,我很沮丧地无法找到在哪里寻找D3D9的独立HLSL编译器,所以我可以告诉哪些行导致问题.

我在SDK中看不到任何内容,但也许它有一个我无法识别的名字?

shader direct3d hlsl

3
推荐指数
1
解决办法
2558
查看次数

HLSL 中的统一关键字

似乎在 HLSL 中,我可以但不必为来自应用程序的变量提供统一关键字。对?

为什么呢?

directx hlsl

3
推荐指数
1
解决办法
4383
查看次数

HLSL:多通道着色器?

我正在编写一个着色器,对从场景渲染的纹理产生模糊效果.我需要在2过去做到这一点,所以通过P0我做一个水平模糊,而在P1传递垂直模糊.

问题是:

  • 如何在通过P0时从PS获得输出并在通过P1上的PS上作为输入发送?

如果我在单次传球上写下我获得了预期的结果,但我真的需要在2次传球中完成.

有人可以帮我吗?

是我的第一个接近HLSL的方法.

谢谢大家!

FOX_ITA

shader blur hlsl

3
推荐指数
1
解决办法
3353
查看次数

HLSL 3可以单独声明像素着色器吗?

我被要求将以下问题分成多个问题:

HLSL和Pix的问题数量

这是问第一个问题,我可以在HLSL 3中运行没有顶点着色器的像素着色器.在HLSL 2中,我注意到你可以,但我似乎无法在3中找到方法?

着色器将编译正常,然后我将在调用SpriteBatch Draw()时从Visual Studio获得此错误.

"不能将着色器模型3.0与早期的着色器模型混合使用.如果顶点着色器或像素着色器编译为3.0,则它们必须都是."

我不相信我已经在着色器中定义了任何早于3的东西.所以我有点困惑.任何帮助,将不胜感激.

shader xna hlsl

3
推荐指数
1
解决办法
1615
查看次数

DirectX 11编译单个HLSL文件(无效果)

首先,我对DirectX11完全不熟悉.由于微软在Windows 8发布时弃用了Effects&D3DX,我想使用Effects的替代品.但是我不知道该怎么做,我只知道每个HLSL文件必须有1个特定着色器的入口点(顶点,像素,计算......).基本上就是这样,所以,有没有人知道关于没有效果的hlsl着色器的好教程?或者有人可以告诉我他们是如何做到的?

提前致谢!

directx hlsl

3
推荐指数
1
解决办法
1297
查看次数

如何使Unity玻璃着色器仅折射它背后的物体?

我正在寻找Unity的玻璃着色器,它只能折射它背后的物体,或者想要如何修改现有的玻璃着色器来做到这一点.

此屏幕截图显示了在曲面网格上使用FX/Glass/Stained BumpDistort时会发生什么.

在此输入图像描述

如您所见,玻璃着色器折射网格前面的球体和网格后面的地面.我正在寻找一个只能折射它背后的物体的着色器.

以下是该着色器的代码,供参考:

// Per pixel bumped refraction.
// Uses a normal map to distort the image behind, and
// an additional texture to tint the color.

Shader "FX/Glass/Stained BumpDistort" {
Properties {
    _BumpAmt  ("Distortion", range (0,128)) = 10
    _MainTex ("Tint Color (RGB)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
}

Category {

    // We must be transparent, so other objects are drawn before this one.
    Tags { "Queue"="Transparent" "RenderType"="Opaque" }


    SubShader {

        // This …
Run Code Online (Sandbox Code Playgroud)

shader hlsl unity-game-engine fragment-shader

3
推荐指数
1
解决办法
3603
查看次数

错误:vs_2_0输出语义无效

它说:Invalid vs_2_0输出语义SV_Target.

因此,Visual Studio 2017正在编译我的像素着色器,好像它是一个顶点着色器.但在属性面板中,我将其指定为ps_5_0.有没有我应该指定的东西?

顶点着色器: -

cbuffer ConstantBuffer : register(b0)
{
    matrix World;
    matrix View;
    matrix Projection;
}

struct Input {
    float3 Pos  : POSITION;
    float4 Color: COLOR;
};

struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float4 Color : COLOR0;
};

VS_OUTPUT main(Input input)
{
    VS_OUTPUT output = (VS_OUTPUT)0;

    output.Pos = mul(input.Pos, World);
    output.Pos = mul(output.Pos, View);
    output.Pos = mul(output.Pos, Projection);

    output.Color = input.Color;
    return output;
}
Run Code Online (Sandbox Code Playgroud)

像素着色器: -

struct VS_OUTPUT
{
    float4 Pos : …
Run Code Online (Sandbox Code Playgroud)

hlsl

3
推荐指数
1
解决办法
2559
查看次数