짧은 storry :단일 채널 텍스처 (OpenGL 2) 사용?
내가 얻을 수 있습니다 :이
glTexImage2D (GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pixels);
같은로드 질감을 사용하여 무엇을 렌더링 할 때
나는 검은 색으로 만
긴 storry를 얻을 수 알파 채널이있는 RGBA 텍스처 (예 : 텍스트 투명 backgorund에이 코드를 사용하여)으로 :
는이 코드는 작동합니다
// === load
#define GL_ABGR 0x8000
SDL_Surface * surf = SDL_LoadBMP("common_resources/dejvu_sans_mono_RGBA.bmp");
glGenTextures (1, &itex);
glBindTexture (GL_TEXTURE_2D, itex);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, surf->w, surf->h, 0, GL_ABGR, GL_UNSIGNED_BYTE, surf->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// ....
// === render
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, itex);
glColor3f(1.0f,1.0f,1.0f);
glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
drawString (caption, xmin, ymin+12, 6);
처럼 렌더링하지만 하나 개의 채널 (8 비트를 사용하려고 해요; 그레이 스케일) RGBA 대신에 이미지/텍스처. 이것들은 transparancy없이 또는없이 렌더링을 할 수 없습니다. 내가하는 일이 무엇이든 나는 검은 색 이미지 만 얻는다.
는
// === load
#define GL_ABGR 0x8000
SDL_Surface * surf = SDL_LoadBMP("common_resources/dejvu_sans_mono_Alpha.bmp");
glGenTextures (1, &itex);
glBindTexture (GL_TEXTURE_2D, itex);
glTexImage2D (GL_TEXTURE_2D, 0, GL_R8, surf->w, surf->h, 0, GL_RED, GL_UNSIGNED_BYTE, surf->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// ....
// === render
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, itex);
glColor3f(1.0f,1.0f,1.0f);
//glEnable(GL_BLEND);
//glEnable(GL_ALPHA_TEST);
//glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
drawString (caption, xmin, ymin+12, 6);
노트처럼 렌더링하지 이것은 않습니다
- 내가 어떻게 든 예에 따라
glTexEnv
사용해야 함을 알고 here는하지만 내 주요 문제는 분명히 흑백의 질감이 나는 아무 차이glTexImage2D
에 다른GL_LUMINANCE
및GL_INTENSITY
대신GL_RED
시도 모든 - 로 렌더링하지 않는다는 것입니다
- here 및 here하지만 대부분과 같은 다른 질문이 있습니다 OpenGL> 3.0 및 조각 쉐이더
또한 그래픽 카드 또는 드라이버가이 기능을 지원하지 않을 수 있습니까? 나는 완벽 우분투 16.04
GL_VENDOR: Intel Open Source Technology Center
GL_RENDERER: Mesa DRI Intel(R) HD Graphics 530 (Skylake GT2)
GL_VERSION: 3.0 Mesa 11.2.0
에있어 - drawString
은 다음과 같습니다 importaint되지는 않지만 :
drawString (caption, xmin, ymin+12, 6){
const int nchars = 95;
float persprite = 1.0f/nchars;
glBegin(GL_QUADS);
for(int i=0; i<65536; i++){
if(str[i] == 0) break; // 0-terminated string
int isprite = str[i] - 33; // 33 is offset of meaningfull ASCII characters
float offset = isprite*persprite+(persprite*0.57);
float xi = i*sz + x;
glTexCoord2f(offset , 1.0f); glVertex3f(xi, y, 3.0f);
glTexCoord2f(offset+persprite, 1.0f); glVertex3f(xi+sz, y, 3.0f);
glTexCoord2f(offset+persprite, 0.0f); glVertex3f(xi+sz, y+sz*2, 3.0f);
glTexCoord2f(offset , 0.0f); glVertex3f(xi, y+sz*2, 3.0f);
}
glEnd();
} 내가 도울하려고 시도하는
덕분에 'glTexImage2D (GL_TEXTURE_2D, 0, 1, 서핑 -> w, 서핑 -> h, 0, GL_RED, GL_UNSIGNED_BYTE, surf -> pixels)'를 시도했지만 resut은 여전히 동일합니다 ... 어쩌면 정말 인텔 GPU는 그것을 지원하지 않습니다. (?) –
@ProkopHapala, 명령'''glPixelStorei (GL_UNPACK_ALIGNMENT, 1);'''가 있습니까? 나는 보통 "''glBindTexture'''->'''glPixelStorei''''->'''x2 glTexParameteri''''->'''glTexImage2D'''를 호출하고 있습니다. –
내부 포맷 텍스처의. 그레이 스케일 이미지의 경우에도 항상 사용되는 크기의 이미지 형식. –