문제

나는 이것을 Google에서 조사하려고 노력했지만 일관된 간단한 답변이있는 것으로 보이지 않습니다. 이것은 단순하지 않거나 올바른 키워드를 사용하지 않기 때문입니까?

그럼에도 불구하고, 이것은 내가 지금까지했던 진전입니다.

  1. 2 사각형을 형성하기 위해 8 개의 정점을 만들었습니다.
  2. 200 비트 알파 값으로 텍스처를 만들었습니다 (따라서 약 80% 투명).
  3. 각 정사각형에 동일한 텍스처를 할당하여 올바르게 표시됩니다.
  4. 255 알파의 질감을 사용하면 더 밝게 보입니다.

Init는 다음과 같습니다.

glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, textureIds);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

int i, j;
GLubyte pixel;
for (i = 0; i < TEXTURE_HEIGHT; i++)
{
    for (j = 0; j < TEXTURE_WIDTH; j++)
    {
        pixel = ((((i & 0x8) == 0) ^ ((j & 0x8) == 0)) * 255);
        texture[i][j][0] = pixel;
        texture[i][j][1] = pixel;
        texture[i][j][2] = pixel;
        texture[i][j][3] = 200;
    }
}

glBindTexture(GL_TEXTURE_2D, textureIds[0]);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA,
    TEXTURE_WIDTH, TEXTURE_HEIGHT,
    0, GL_RGBA, GL_UNSIGNED_BYTE, texture);

이것은 책의 417 페이지의 코드 스 니펫과 다소 유사합니다. OpenGL 프로그래밍 안내서, 확인 패턴을 만듭니다.

그리고 디스플레이 기능에는 ...

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);

// Use model view so that rotation value is literal, not added.
glMatrixMode(GL_MODELVIEW);
glPushMatrix();

// ... translation, etc ...

glBindTexture(GL_TEXTURE_2D, textureIds[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, +1.0, 0.0); // top left
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); // bottom left
glTexCoord2f(1.0, 1.0); glVertex3f(+1.0, -1.0, 0.0); // bottom right
glTexCoord2f(1.0, 0.0); glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();

    // not neccecary to repeat, just good practice
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, +1.0, -1.0); // top left
glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, -1.0, -1.0); // bottom left
glTexCoord2f(1.0, 1.0); glVertex3f(+1.5, -1.0, -1.0); // bottom right
glTexCoord2f(1.0, 0.0); glVertex3f(+1.5, +1.0, -1.0); // top right
glEnd();

glFlush();
glDisable(GL_TEXTURE_2D);

glPopMatrix();

SwapBuffers();

따라서 이것은 백그라운드에서 2 차 광장을 렌더링합니다. 나는 이것을 볼 수 있지만, 그들은 배경과 혼합되는 것처럼 보인다 (나는 255 비트보다 200 비트 알파로 더 어둡기 때문에 이것을 가정한다).

Transparent textures not working

보시다시피, 투명성은 없습니다 ... 어떻게 해결할 수 있습니까?

도움이 되었습니까?

해결책

따라서 여기에 있었지만 삭제 된 다른 대답은 이것을 언급했습니다. 일반적으로 알파 블렌딩이 올바르게 작동하기 위해서는 카메라의 좌표계에서 객체를 멀리서 근처로 정렬해야합니다.
이것이 당신의 다각형이 배경과 혼합되는 이유입니다. 깊이 테스트를 비활성화하여 이것이 실제로 문제임을 확인할 수 있습니다. 깊이 테스트없이 모든 조각이 표시되며 알파 블렌딩을 볼 수 있습니다.

이것에 대해 더 이 페이지.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top