我正在尝试加载tga/bmp文件.这很好,但最终结果如下:

我正在尝试加载的图像如下所示:

我正在使用的一些代码:
GLuint texture;
const char* filename = "/Users/Admin/Documents/Visual Studio 2013/Projects/OpenGL/OpenGL/image.tga";
unsigned char* data;
data = (unsigned char *) malloc(128 * 128 * 3);
FILE* f;
fopen_s(&f, filename, "rb");
fread(data, 128 * 128 * 3, 1, f);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?
我创建了一个用C++编写的程序,它使用许多文件,比如.dll或.png.程序和文件位于同一目录中.是否可以包含.exe应用程序中的文件?所以我只需要.exe文件来运行程序.
使用 WinAPI 从 C++ 资源加载原始文件的最简单方法是什么?我只想将文件(例如 .txt)加载到字符数组中。我在互联网上搜索,但我找不到真正有用且简单的东西,例如 LoadStringFromFile(int idFromResource, char* buffer)。
是否可以使用OpenCL获取OpenGL缓冲区的值?例如,编写一个用缓冲区创建OpenGL上下文的程序,另一个用于执行OpenCL代码?我不希望第一个程序代码改变.
我想在我的顶点着色器中设置一个统一的矢量.
int loc = glGetUniformLocation(shader, "LightPos");
if (loc != -1)
{
//do Stuff
}
Run Code Online (Sandbox Code Playgroud)
问题是loc始终为-1.我尝试使用片段着色器中的变量实际工作.顶点着色器:
uniform vec3 LightPos;
varying vec2 UVCoord;
varying float LightIntensity;
void main()
{
UVCoord = gl_MultiTexCoord0.st;
gl_Position = ftransform();
vec3 Normal = normalize(gl_NormalMatrix * gl_Normal);
LightIntensity = max(dot(normalize(vec3(0, -10, 0)), Normal), 0.0);
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
uniform sampler2D tex1;
varying vec2 UVCoord;
varying float LightIntensity;
void main()
{
vec3 Color = vec3(texture2D(tex1, UVCoord));
gl_FragColor = vec4(Color * LightIntensity, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?