Я внедряю скайбокс в свою программу OpenGL и по большей части он работает нормально. Когда я вращаюсь вокруг горизонтально, скайбокс отображается незаметно. Проблема возникает, когда я пытаюсь повернуть камеру так, чтобы она выглядела почти вертикально, как на изображении ниже. Как видите, края очень хорошо видны:
Как я могу это исправить? Я использую кубическую карту.
for (GLuint i = 0; i < images.size(); i++){
std::string fileExtension = Util::getFileExtension(images[i]);
imageData = Util::loadImage(images[i].c_str(), &width, &height, &numChannel);
std::pair<GLint, GLint> textureFormat = Util::getGLColorFormat(fileExtension, numChannel);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, textureFormat.first, width, height, 0, textureFormat.second, GL_UNSIGNED_BYTE, imageData);
Util::freeImageData(imageData);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
Вот мой фрагментный шейдер:
varying vec3 texCoord;
uniform samplerCube skybox;
void main(){
gl_FragColor = vec4(texture(skybox, texCoord).rgba);
}
вниз — назад — вперед
влево — вправо — вверх
Задача ещё не решена.
Других решений пока нет …