fxc.exe生成的已编译像素和顶点着色器对象文件的格式是正式还是非正式记录的?
我希望能够读取常量名称以从着色器文件注册分配.我知道D3DX中的效果框架可以做到这一点,但我需要避免使用D3DX,因为它可能没有安装在用户的机器上,我不需要它用于其他任何东西所以我想避免它们必须运行directx更新.
如果效果框架可以做到这一点,那么如果我能找到文件格式,我也可以'似乎在任何地方都能找到它.
(这是用于directx9)
该文件:http: //msdn.microsoft.com/en-us/library/dd607349(v = vs.85).aspx
声明#include"foobar.fx"将在与当前效果文件相同的目录中查找该文件.
它不起作用,但使用绝对路径确实没有用,这当然是无用的.
谷歌没有提出任何建议.我在这里缺少什么?
我正在尝试在RenderMonkey中为Dx9编写一个phong着色器效果.
我在像素着色器中遇到编译错误
*"无效的ps_2_0输入语义'POSITION0'"*
我不知道如何修复它,虽然我知道它必须与VS_OUTPUT中的POSITION0语义有关.
我尝试将VS_OUTPUT的Pos语义更改为TEXCOORD0,但系统会报告
顶点着色器必须最低限度地写入POSITION的所有四个组件
着色器在下面提供.有什么建议?
这是我的顶点着色器:
struct VS_INPUT
{
float4 Pos : POSITION0;
float3 Normal : NORMAL0;
};
struct VS_OUTPUT
{
float4 Pos : POSITION0;
float3 Normal : TEXCOORD0;
};
VS_OUTPUT vs_main( VS_INPUT Input )
{
VS_OUTPUT Output;
Output.Pos = Input.Pos;
Output.Normal = Input.Normal;
return Output;
}
Run Code Online (Sandbox Code Playgroud)
和我的像素着色器:
float4x4 matViewProjection;
// light source
float4 lightPos;
float4 Ambient;
float4 Diffuse;
float4 Specular;
// material reflection properties
float4 Ke;
float4 Ka;
float4 Kd;
float4 Ks;
float nSpecular;
// eye
float4 …Run Code Online (Sandbox Code Playgroud) 有没有办法在visual studio 2010中为fx文件获取语法高亮(可能类似"格式文档")?没有它,很难调试更复杂的HLSL着色器代码.我知道我可以使用fx编写器,但我宁愿不在不同的开发环境之间切换:-)此外,我经常在VS2010中使用#region编译指示.在VS2010中编辑HLSL着色器代码有类似之处吗?
我需要同时将Texture2D和TextureCube传递给我的像素着色器.
我之前发送了一系列纹理,但发现我无法发送一个textureCube.
这个问题提到了一些叫做绑定的东西,但是我无法找到关于此的更多信息,并且想知道是否有人能指出我解决这个问题的方法.
谢谢.
编辑----尝试实施Caesar的建议后,以下代码会导致错误.尝试着色器读取着色器时的第一次机会异常,问题就在于此
Texture2D texture04 : register( t0 );
Run Code Online (Sandbox Code Playgroud)
这会导致崩溃:
D3DX11CompileFromFile("Data/Shaders/Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0);
D3DX11CompileFromFile("Data/Shaders/Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0);
d3dDevice_->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), NULL, &VS);
Run Code Online (Sandbox Code Playgroud)
ReEdit ----重写了确切的代码......这次工作,不明白为什么.非常感谢你.
我正在用C#/ XNA制作游戏.我正在研究我将用于地形的着色器.我正在使用纹理图集来提高速度和效率,但我在瓷砖之间遇到纹理/颜色渗色:http: //i.imgur.com/lZcESsn.png
我在FX Composer和我的游戏中都得到了这个效果.这是我的着色器:
//-----------------------------------------------------------------------------
// InstancedModel.fx
//
// Microsoft XNA Community Game Platform
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
// Camera settings.
float4x4 World : World < string UIWidget="None"; >;
float4x4 View : View < string UIWidget="None"; >;
float4x4 Projection : Projection < string UIWidget="None"; >;
// This sampler uses a simple Lambert lighting model.
float3 LightDirection = normalize(float3(-1, -1, -1));
float3 DiffuseLight = 1.25;
float3 AmbientLight = 0.25;
float TextureSide = 0; …Run Code Online (Sandbox Code Playgroud) 我有一个使用SharpDX 2.5.0的C#项目,一切都运行正常.我转到SharpDX的最新稳定版本2.6.2.我的项目编译正常,但在运行时失败,因为它无法编译着色器.我正在使用这行代码:
var vertexShaderByteCode = ShaderBytecode.CompileFromFile(ShaderFileName, "Base_VS", "vs_4_0");
Run Code Online (Sandbox Code Playgroud)
无论着色器文件的实际内容是什么,它都会失败并出现以下错误:
path/to/my/shader.hlsl(1,1): error X3000: Illegal character in shader file
Run Code Online (Sandbox Code Playgroud)
我认为它与文件的UTF-8编码有关,但尝试各种编码并没有解决问题.有没有其他人遇到类似的问题或有建议?
我试图了解HLSL和DirectX11中的镜面反射
cbuffer ConstantBuffer : register( b0 )
{
matrix World; // ??????? ????
matrix View; // ??????? ????
matrix Projection; // ??????? ????????
float4 vLightDir[3]; // Dir of light
float4 vLightColor[3]; // color of light
float4 vOutputColor; // Active color
//float3 Eye;
}
struct VS_INPUT // ???????? ?????? ?????????? ???????
{
float4 Pos : POSITION; // ??????? ?? X, Y, Z
float3 Norm : NORMAL; // ??????? ?? X, Y, Z
};
struct PS_INPUT // ???????? ?????? ??????????? ???????
{ …Run Code Online (Sandbox Code Playgroud) 好吧,所以这一直困扰我一段时间,并且在MSDN上找不到任何涉及我需要的细节的东西.
这是一个3部分问题,所以在这里:
1-)创建交换链应用程序时指定后备缓冲区像素格式,最常见的是B8G8R8A8或R8G8B8A8.这为每个颜色通道提供了8位,因此每个像素总共使用4个字节....所以当float4实际为16个字节时,为什么像素着色器必须将颜色作为float4返回?
2-)当将纹理绑定到像素着色器时,我的纹理是DXGI_FORMAT_B8G8R8A8_UNORM格式,但为什么采样器需要每个像素一个float4才能工作?
3-)我在这里遗漏了什么?我是在思考这个还是什么?
请提供支持您的索赔的链接.最好来自MSDN !!!!
我有一个像素着色器,试图返回静态颜色
float4 PPBright(PS_POSTPROCESS_INPUT ppIn) : SV_Target
{
return (1.00f, 0.00f, 0.00f, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)
无论颜色值返回白色,我都可以更改alpha值,它会影响颜色(白色,灰色,黑色).
这是我的cpp代码:
g_pd3dDevice->OMSetRenderTargets(1, &BackBufferRenderTarget, DepthStencilView);
BloomTextureVar->SetResource(SceneShaderResource);
g_pd3dDevice->IASetInputLayout(nullptr);
g_pd3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
tech->GetPassByIndex(index)->Apply(0);
g_pd3dDevice->Draw(4, 0);
Run Code Online (Sandbox Code Playgroud)