小编hak*_*ist的帖子

使用 OpenGL/GLSL 实现法线贴图

我正在学习 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)

opengl glsl vertex-shader fragment-shader

2
推荐指数
1
解决办法
1万
查看次数

为什么 FreeImage 以 BGR 格式加载图像?

我使用 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)

c opengl-es freeimage android-ndk

2
推荐指数
1
解决办法
2855
查看次数

C++无法打开lib文件

我正在使用 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)

c linker visual-studio-2013

0
推荐指数
1
解决办法
1万
查看次数