좋아요. 그렇다면 자신의 텍스처/이미지 데이터를 만든 다음 OpenGL에서 쿼드로 표시해야합니다. 쿼드가 작동하고 자체 텍스처 로더로 TGA 파일을 표시 할 수 있으며 쿼드로 완벽하게 매핑됩니다.OpenGL 텍스처 형식으로 OpenGL 용 이미지/텍스처 데이터를 생성하십시오.
하지만 각 픽셀에 대해 1000x1000 및 3 채널 (RGB 값) 인 "직접 만든 이미지"를 어떻게 만듭니 까? 텍스처 배열의 형식은 무엇입니까? 예를 들어 pixel (100,100)을 검정색으로 설정하는 방법은 무엇입니까?
#DEFINE SCREEN_WIDTH 1000
#DEFINE SCREEN_HEIGHT 1000
unsigned int* texdata = new unsigned int[SCREEN_HEIGHT * SCREEN_WIDTH * 3];
for(int i=0; i<SCREEN_HEIGHT * SCREEN_WIDTH * 3; i++)
texdata[i] = 255;
GLuint t = 0;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &t);
glBindTexture(GL_TEXTURE_2D, t);
// Set parameters to determine how the texture is resized
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR);
// Set parameters to determine how the texture wraps at edges
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_WRAP_S , GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_WRAP_T , GL_REPEAT);
// Read the texture data from file and upload it to the GPU
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCREEN_WIDTH, SCREEN_HEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texdata);
glGenerateMipmap(GL_TEXTURE_2D);
편집 :
이
내가 완전히 흰색 이미지/텍스처를 위해 그것을 상상하는 방법입니다 답변 아래 정확하지만 나는 또한 OpenGL을 내가 사용하는 정상의 int를 처리하지 않는 것을 발견하지만, 그것은 작동 uint8_t로 괜찮습니다. GPU에 업로드 할 때 GL_UNSIGNED_BYTE (8 비트 및 일반 int는 8 비트가 아님) 플래그와 함께 GL_RGB 플래그라고 가정합니다.
이해가 안, 당신이 그 일을 시도해야 ? 이미지 데이터 대신 데이터가있는 큰 덩어리의 바이트를 전달하면됩니다. 이미지 로더의 데이터를 GL 텍스처로 전달한 다음 자체 제작 된 이미지 데이터를 텍스처로 전달하고 작동하지 않는 것을 알려주는 코드를 게시하는 코드. – zero298
OpenGL에서 부호없는 8 비트 정수를 생성하여 RGB 값으로 올바르게 해석해야한다는 것을 알았습니다. 나는 글자 그대로 이것을 며칠 동안 시도해 보았고, 이것을 게시하기로 결정한 후 2 분이 지나면 해결할 수 있었다 .... – Jackbob
'GL_UNSIGNED_INT'는 유효한'glTexImage2D()''도'type'이다. [0, 2^8-1]에서 [0, 2^32-1]까지 색상 채널 범위를 확장하면됩니다. – genpfault