在RenderMonkey里写了RNM的demo:
效果在这里面是正确的. 然后转到引擎里发现竟然变成这样了:

检查了贴图没问题, 那么只可能是bumpBasis的问题了. 把下面的引用换成float3(...)这种写死的表达式, 果然效果正确了:

要说环境有什么不同, 引擎里是写在.fx文件里的. 难道编译的时候被当成了外部传入的参数? 查了一下HLSL的说明, 发现有个修饰词:
static |
Mark a local variable so that it is initialized one time and persists between function calls. If the declaration does not include an initializer, the value is set to zero. A global variable marked static is not visible to an application. |
把const float3 bumpBasis[3]改成static const float3 bumpBasis[3], 果然问题没有了!
问题又来了, 为啥在RM里就是好的....而且以前我自己写类似功能时候也没有加static啊-_-
分享到:
相关推荐
6. **基本HLSL结构**:一个简单的HLSL例程通常会包含输入(如顶点数据)、输出(如屏幕坐标)、常量(如颜色或纹理坐标)以及主函数。例如,像素着色器的主函数通常是`float4 PS main(float2 uv : TEXCOORD) : COLOR...
HLSL,全称为High-Level Shader Language,是微软为DirectX图形API开发的一种着色语言。它是Direct3D中的一个重要...而“HLSL顶点渲染”这个项目正是一个良好的起点,虽然目前尚不完善,但提供了深入学习和交流的机会。
hlsl2glsl工具就是这样一个实用程序,它的主要功能是将基于HLSL编写的着色器代码转换为GLSL,以便在支持OpenGL的平台上运行。这个工具的出现极大地简化了在Windows环境下开发的图形应用移植到Linux或macOS等非...
在Direct3D中,定义一个常量缓冲区结构,然后在C++代码中创建和填充,再通过ID3D11DeviceContext::UpdateSubresource方法将数据传送到GPU。 纹理资源在HLSL中也扮演着重要角色。你可以使用ID3D11Device::...
它提供了一个强大的平台,用于创建高质量的图形和特效。在HLSL中,开发者可以使用C风格的语法来编写Shader代码,实现复杂的着色效果。 二、HLSL语法 HLSL语法与C语言类似,但它有自己的特点。HLSL语法包括变量声明...
例如,`float4 pos : SV_Position` 声明了一个名为`pos`的浮点型四维向量,用于存储顶点位置,并将其标记为系统值(SV_Position)。 3. 函数:HLSL支持自定义函数,可以包含数学运算、纹理采样、条件语句、循环等。...
HLSL Effect 是一个效果框架,可以实现多种效果,例如多纹理化。Effect 代码结构包括 Effect 代码、Technique 代码和 Pass 代码,每个 Pass 都可以包含多个 Effect。 HLSL 着色器编程 HLSL 着色器可以直接编写在...
HLSL是一种面向对象的语言,其核心概念包括结构化着色器(如顶点着色器、像素着色器)、常量缓冲区、纹理采样和数学运算。学习HLSL首先要掌握这些基础,理解它们在图形流水线中的作用。 2. **顶点着色器(Vertex ...
接下来定义了一个简单的着色器函数`SetColor`,该函数接收一个`VS_INPUT`类型的参数,并返回一个`VS_OUTPUT`类型的值。 ```hls VS_OUTPUT SetColor(VS_INPUT input) { VS_OUTPUT output = (VS_OUTPUT)0; // 初始化...
6. **资源绑定**:HLSL程序可以访问GPU内存中的资源,如纹理、常量缓冲区等。这些资源通过绑定到特定的着色器输入来使用。 7. **输入与输出**:像素着色器通常接收来自顶点着色器的输出,如位置、法线和纹理坐标,...
在"dx9_hlsl_fx_simple"这个压缩包中,我们可以推测包含的是一个基于DirectX 9的简单hlsl特效演示项目。DirectX 9是微软推出的一个用于Windows平台的游戏和多媒体编程接口,它包含了处理图形、音频、输入等多种功能...
HLSL(High-Level Shading Language)是DirectX 9中引入的一个重要组件。它作为一种高级语言,允许开发者在算法层面编写着色器,而无需过多关注硬件细节,例如寄存器分配、读端口限制以及指令并发等问题。这种做法...
HLSL的设计目的是为图形程序员提供一个更接近传统编程语言的接口来处理GPU(图形处理器)计算任务。 - **DirectX11**:DirectX的一个版本,它包含了一系列API(应用程序接口),用于在Windows平台上进行高性能的...
本教程旨在为初学者提供一个全面且易于理解的HLSL学习路径,让你能够快速掌握HLSL编程的基础知识。 ### 前言 HLSL是程序员与GPU(图形处理单元)交流的语言,允许开发者创建自定义的顶点着色器、像素着色器以及更...
在`LoadContent()`方法中,我们加载了一个名为"cub"的3D模型以及一个名为"rocks"的纹理贴图,并准备了一个名为"effe"的Effect对象。Effect对象允许我们使用HLSL着色器来改变默认的渲染方式。 BassictEffect是XNA...
HLSL(High-Level Shading Language)是微软公司为DirectX的着色器语言设计的一种高级编程语言。它允许开发者使用C语言风格的语法在图形管线中编写顶点着色器和像素着色器等。HLSL内置函数是该语言预先定义好的函数...
在给定的资源中,我们看到一个名为“VB一个简单DX9HLSL代码”的项目,这可能是一个简单的3D图形程序示例,通过VB来调用DirectX 9的API,并使用HLSL进行渲染。 首先,`mdlD3DX9.bas` 文件很可能包含了VB中的模块,这...
- **1.3.3 入口函数**:每个着色器都需要定义一个入口函数,如`float4 PS(float4 in : SV_POSITION) : SV_TARGET { ... }`,其中`PS`是像素着色器的入口函数。 - **1.3.4 总结**:HLSL着色器的基本结构包括全局变量...
HLSL,全称为High-Level Shader Language,是微软开发的一种着色器语言,主要用于DirectX图形应用程序接口(API)中的图形渲染。它允许开发者编写控制GPU执行的代码,以实现复杂的图形效果,如光照、纹理映射、粒子...
例如,你可以使用HLSL编写一个顶点着色器,将模型空间的顶点坐标转换到屏幕空间,或者在像素着色器中进行颜色混合和光照计算。 在“HLSL程序入门”系列教程中,你可能会学到以下内容: 1. **基础概念**:理解向量...