我正在尝试修改从GamePlay3d样本中获取的着色器'textured.vert',但会收到以下错误:
错误:0:108:'':语法错误预处理程序指令不正确
错误:0:108:'':语法错误后面的意外令牌 预处理程序指令 - 预期换行符号错误:0:112:'': 语法错误不正确的预处理程序指令
错误:0:112:'': 预处理器指令后面的语法错误意外标记 - 预期换行符号错误:0:120:'':语法错误不正确 预处理程序指令
错误:0:120:'':语法错误意外 遵循预处理程序指令的标记 - 期望换行符
#ifndef DIRECTIONAL_LIGHT_COUNT
#define DIRECTIONAL_LIGHT_COUNT 0
#endif
#ifndef SPOT_LIGHT_COUNT
#define SPOT_LIGHT_COUNT 0
#endif
#ifndef POINT_LIGHT_COUNT
#define POINT_LIGHT_COUNT 0
#endif
#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
#define LIGHTING
#endif
修改后的着色器代码:
#ifndef DIRECTIONAL_LIGHT_COUNT
#define DIRECTIONAL_LIGHT_COUNT 0
#endif
#if (DIRECTIONAL_LIGHT_COUNT > 0)
#define LIGHTING
#endif
///////////////////////////////////////////////////////////
// Atributes
attribute vec3 a_position;
#if defined(LIGHTING)
#if defined(BUMPED)
attribute vec3 a_tangent;
attribute vec3 a_binormal;
#endif
#endif
///////////////////////////////////////////////////////////
// Uniforms
uniform mat4 u_worldViewProjectionMatrix;
#if defined(LIGHTING)
uniform mat4 u_inverseTransposeWorldViewMatrix;
#if defined(SPECULAR)
uniform mat4 u_worldViewMatrix;
#endif
#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
#endif
#if defined(SPECULAR)
uniform vec3 u_cameraPosition;
#endif
#endif
#if defined(TEXTURE_OFFSET)
uniform vec2 u_textureOffset;
#endif
///////////////////////////////////////////////////////////
// Varyings
varying vec3 v_texCoord;
#if defined(LIGHTING)
#if !defined(BUMPED)
varying vec3 v_normalVector;
#endif
#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
varying vec3 v_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
#endif
#if defined(SPECULAR)
varying vec3 v_cameraDirection;
#endif
#include "lighting.vert"
#endif
void main()
{
vec4 position = vec4(a_position, 1.0);
gl_Position = u_worldViewProjectionMatrix * position;
#if defined(LIGHTING)
vec3 normal = a_position;
// Transform the normal, tangent and binormals to view space.
mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz, u_inverseTransposeWorldViewMatrix[1].xyz, u_inverseTransposeWorldViewMatrix[2].xyz);
vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * normal);
#if defined(BUMPED)
vec3 tangent = a_tangent;
vec3 binormal = a_binormal;
vec3 tangentVector = normalize(inverseTransposeWorldViewMatrix * tangent);
vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * binormal);
mat3 tangentSpaceTransformMatrix = mat3(tangentVector.x, binormalVector.x, normalVector.x, tangentVector.y, binormalVector.y, normalVector.y, tangentVector.z, binormalVector.z, normalVector.z);
applyLight(position, tangentSpaceTransformMatrix);
#else
v_normalVector = normalVector;
applyLight(position);
#endif
#endif
v_texCoord = position;
#if defined(TEXTURE_OFFSET)
v_texCoord += u_textureOffset;
#endif
}
答案 0 :(得分:1)
问题是,你在lighting.vert中使用常量SPOT_LIGHT_COUNT和POINT_LIGHT_COUNT
例如lighting.vert:46
#if (POINT_LIGHT_COUNT > 0)
当POINT_LIGHT_COUNT无法替换时,将无法编译。
您可以像原始文件中那样定义两个常量,也可以在lighting.vert中清除对它们的引用