我正在学习 GLSL 并尝试实现一些照明和映射技巧。我正在使用 ShaderDesigner 工具。编码法线贴图后,我意识到我的模型照明看起来不真实。这是我的代码和一些图片。如果可能,请告诉我我的问题是什么。
顶点着色器
#define MAX_LIGHTS 1
struct LightProps
{
vec3 direction[MAX_LIGHTS];
};
attribute vec3 tangent;
attribute vec3 bitangent;
varying LightProps lights;
void main()
{
vec3 N = normalize(gl_NormalMatrix*gl_Normal);
vec3 T = normalize(gl_NormalMatrix*tangent);
vec3 B = normalize(gl_NormalMatrix*bitangent);
mat3 TBNMatrix = mat3(T,B,N);
vec4 vertex = gl_ModelViewMatrix*gl_Vertex;
for(int i = 0; i < MAX_LIGHTS; i++)
{
vec4 lightPos = gl_LightSource[i].position;
lights.direction[i] = vec3(lightPos.w > 0 ? lightPos-vertex : lightPos);
lights.direction[i] *= TBNMatrix;
}
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
} …Run Code Online (Sandbox Code Playgroud) 我使用 Android NDK 和 FreeImage 库编写游戏以将图像加载到我的游戏中。它以 BGR 格式加载图像。可以以RGB格式加载吗?或者我需要手动交换 R 和 B 组件?
已编辑
我的设备是三星 Galaxy S4(armv7 架构)。这是代码`
FIMEMORY* fiStream = FreeImage_OpenMemory((BYTE*)data, size);
FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeFromMemory(fiStream);
if (FreeImage_FIFSupportsReading(fif))
{
dib = FreeImage_LoadFromMemory(fif, fiStream, 0);
}
if (!dib)
return;
data_ = FreeImage_GetBits(dib);
width_ = FreeImage_GetWidth(dib);
height_ = FreeImage_GetHeight(dib);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width_, height_, 0, GL_RGB, GL_UNSIGNED_BYTE, data_ );
Run Code Online (Sandbox Code Playgroud) 我正在使用 Microsoft Visual Studio 2013。尝试导入 DevIL 库以加载图像文件时出现 LNK1104 错误:无法打开文件“IL/devil.lib”
我的 Source.h 文件包含 Project/Sources 目录中的 DevIL 库,而 Project/Sources/IL 目录中的 DevIL 库。这是我的代码
#ifdef _WIN32
#pragma comment(lib, "IL/devil.lib")
#pragma comment(lib, "IL/ilu.lib")
#pragma comment(lib, "IL/ilut.lib")
#endif
Run Code Online (Sandbox Code Playgroud)