Wie bringe ich Texturen in OpenGL zum Laufen?

Ich benutze die Tutorials aufhttp://arcsynthesis.org/gltut/ Um OpenGL zu lernen, ist es erforderlich, ich muss es verwenden. Meistens möchte ich die Texturen aus Tutorial 15 auf Objekte in Tutorial 7 (Welt mit UBO) anwenden.

Im Moment schien es so, als ob die Texturen nur funktionieren, wenn Mipmaps aktiviert sind. Dies hat einen Nachteil: Die einzige verwendete Mipmap ist die mit einem Index von Null, und das ist die 1-farbige 1 × 1-Pixel-1. Ich habe versucht, den Mindestpegel einer Mipmap zu erhöhen oder Mipmaps vollständig auszuschalten, aber selbst das behebt das Problem nicht, da dann alles stockdunkel wird. Jetzt werde ich die wichtigsten Teile meines Programms auflisten

EDIT: Ich denke, ich werde mehr Details hinzufügen ...

Der Vertex-Shader hat ungefähr Folgendes:

#version 330

layout(location = 0) in vec4 position;
layout(location = 1) in vec4 color;
layout(location = 2) in vec3 normal;
//Added these later 
layout(location = 5) in vec2 texCoord;
out vec2 colorCoord;

smooth out vec4 interpColor;
out vec3 vertexNormal;
out vec3 modelSpacePosition;
out vec3 cameraSpacePosition;

uniform mat4 worldToCameraMatrix;
uniform mat4 modelToWorldMatrix;
uniform mat3 normalModelToCameraMatrix;
uniform vec3 dirToLight;
uniform vec4 lightIntensity;
uniform vec4 ambientIntensity;
uniform vec4 baseColor;

uniform mat4 cameraToClipMatrix;

void main()
{
vertexNormal = normal;
vec3 normCamSpace = normalize(normalModelToCameraMatrix * vertexNormal);
cameraSpacePosition = normCamSpace;

float cosAngIncidence = dot(normCamSpace, dirToLight);
cosAngIncidence = clamp(cosAngIncidence, 0, 1);
modelSpacePosition.x = position.x;
modelSpacePosition.y = position.y;
modelSpacePosition.z = position.z;

vec4 temp = modelToWorldMatrix * position;
temp = worldToCameraMatrix * temp;
gl_Position = cameraToClipMatrix * temp;

interpColor = ((lightIntensity * cosAngIncidence) + (ambientIntensity)) * baseColor;
colorCoord= texCoord ;
}

Der Fragment-Shader sieht folgendermaßen aus:

#version 330
in vec3 vertexNormal;
in vec3 modelSpacePosition;

smooth in vec4 interpColor;

uniform vec3 modelSpaceLightPos;
uniform vec4 lightIntensity2;
uniform vec4 ambientIntensity2;

out vec4 outputColor;

//Added later
in vec2 colorCoord;
uniform sampler2D colorTexture;


void main()
{
vec3 lightDir2 = normalize(modelSpacePosition - modelSpaceLightPos);

float cosAngIncidence2 = dot(normalize(vertexNormal), lightDir2);
cosAngIncidence2 = clamp(cosAngIncidence2, 0,  1);

float light2DistanceSqr = dot(modelSpacePosition - modelSpaceLightPos, modelSpacePosition - modelSpaceLightPos);

//added
vec4 texture2 = texture(colorTexture, colorCoord);

outputColor = ((ambientIntensity2 + (interpColor*2))/4) + 
((((interpColor) * lightIntensity2/200 * cosAngIncidence2) + (ambientIntensity2* interpColor )) 
/( ( sqrt(light2DistanceSqr) + light2DistanceSqr)/200 ));
//No outputColor for texture testing
outputColor =  texture2 ; 

}
}

Das waren beide Shader. Und hier sind die Teile, die zur .cpp hinzugefügt wurden:

#include <glimg/glimg.h>
#include "../framework/directories.h"     
[...]
const int g_colorTexUnit = 0;
GLuint g_checkerTexture = 0;

Und hier ist der Loader für die Textur:

void LoadCheckerTexture()
{
try

{
std::string filename(LOCAL_FILE_DIR);
filename += "checker.dds";
std::auto_ptr<glimg::ImageSet>
 pImageSet(glimg::loaders::dds::LoadFromFile(filename.c_str()));

glGenTextures(1, &g_checkerTexture);
glBindTexture(GL_TEXTURE_2D, g_checkerTexture);

glimg::SingleImage image = pImageSet->GetImage(0, 0, 0);
glimg::Dimensions dims = image.GetDimensions();
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, dims.width, dims.height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image.GetImageData());

glBindTexture(GL_TEXTURE_2D, 0);
}
catch(std::exception &e)
{
printf("%s\n", e.what());
throw;
}
}

Natürlich habe ich das in void init ():

LoadCheckerTexture();

Und dann beim Rendern des Objekts:

glActiveTexture(GL_TEXTURE0 + g_colorTexUnit);
glBindTexture(GL_TEXTURE_2D,g_checkerTexture);
g_pLeftMesh->Render();
glBindSampler(g_colorTexUnit, 0);
glBindTexture(GL_TEXTURE_2D, 0);

Mit all dem bekomme ich für alles einen pechschwarzen Hintergrund, aber wenn ich die outputColor-Gleichung in "texture + outputColor;" ändere, sieht alles normal aus. Ich habe keine Ahnung, was ich hier falsch mache. Ein Freund hat versucht mir zu helfen, wir haben ein paar unnötige Sachen entfernt, aber wir haben nichts am Laufen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage