나는 몇 시간 동안 내 머리를 두드리는 소리를 해왔다. 나는 그것이 단순한 것이라고 확신하지만, 결과를 얻을 수 없다. OpenGL 호출을 캡슐화하기위한 라이브러리를 구축했기 때문에이 코드를 약간 편집해야했지만 다음은 상태에 대한 정확한 설명입니다.OpenGL, Shader Model 3.3 텍스처링 : 검은 텍스처?
#version 330
in vec4 position;
in vec2 uv;
out vec2 varying_uv;
void main(void)
{
gl_Position = position;
varying_uv = uv;
}
그리고 다음 조각 쉐이더 :
#version 330
in vec2 varying_uv;
uniform sampler2D base_texture;
out vec4 fragment_colour;
void main(void)
{
fragment_colour = texture2D(base_texture, varying_uv);
}
은 모두 쉐이더 컴파일하고 문제없이 프로그램 링크
나는 다음과 같은 버텍스 쉐이더를 사용하고 있습니다. 내 초기화 섹션에서
, 나는 하나의 질감과 같이로드 :// Check for errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
// Load an image.
QImage image("G:/test_image.png");
image = image.convertToFormat(QImage::Format_RGB888);
if(!image.isNull())
{
// Load up a single texture.
glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, image.width(), image.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, image.constBits());
glBindTexture(GL_TEXTURE_2D, 0);
}
// Check for errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
당신은 내가 텍스처를로드 할 Qt를 사용하고 있음을 관찰 할 수 있습니다. :: throw_on_error()를 호출하면 OpenGL에서 Error()를 호출하여 오류를 확인하고 발생하면 예외를 throw합니다. 이 코드에서 OpenGL 오류가 발생하지 않으며 Qt를 사용하여로드 된 이미지가 유효합니다.
// Clear previous.
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);
// Use our program.
glUseProgram(GLProgram);
// Bind the vertex array.
glBindVertexArray(GLVertexArray);
/* ------------------ Setting active texture here ------------------- */
// Tell the shader which textures are which.
kt::kits::open_gl::gl_int tAddr = glGetUniformLocation(GLProgram, "base_texture");
glUniform1i(tAddr, 0);
// Activate the texture Texture(0) as texture 0.
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, Texture);
/* ------------------------------------------------------------------ */
// Draw vertex array as triangles.
glDrawArrays(GL_TRIANGLES, 0, 4);
glBindVertexArray(0);
glUseProgram(0);
// Detect errors.
kt::kits::open_gl::Core<QString>::throw_on_error();
마찬가지로 더 OpenGL은 오류가 발생하지 않으며, 삼각형은 screeen가 그려된다
도면은 다음과 같이 수행된다. 그러나, 그것은 다음과 같습니다 : 그것은 나에게 발생
문제가 내 텍스처 좌표 관련이있을 수 있습니다.
텍스처 좌표가 정확 표시, 그러나 나는 아직도의 검은 색 삼각형을 수신 해요 : 그래서, 나는 '녹색'구성 요소로 다음 '빨간색'구성 요소로의를 사용하여 이미지 및 t 렌더링 운명. 내가 도대체 뭘 잘못하고있는 겁니까?
나는 이것이 적절하다고 생각하지 않습니다. 값이 설정되지 않으면 기본값이 사용됩니다. –
선생님, 사람 중에 신 이십니다! @VJovic 나는 똑같은 생각 :). –
와우 (Wow)가 나에게도이 문제를 해결했습니다. 'GL_TEXTURE_MIN_FILTER'에는 특별히 적절한 기본값이없는 것 같습니다. – Henk