SDL 및 OpenGL을 사용하는 방법을 배우고 있습니다. SDLTutorials.com에서 자습서를 읽었습니다. 나는 이제 물건을 더 가져 가고 응용 프로그램의 로딩 화면을 만들려고합니다. oop 메뉴 시스템.SDL OpenGL 렌더링 문제
나는 실제 상황을 간단하게 테스트하기 시작했습니다. 텍스처 클래스를 통해 수행되는 윈도우의 주 배경이 있습니다. 두 개의 관련 기능이 여기에 정의되어
void Texture::Bind() {
glBindTexture(GL_TEXTURE_2D, TextureID);
}
void Texture::RenderQuad(int X, int Y, int Width, int Height) {
Bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(X, Y, 0);
glTexCoord2f(1, 0); glVertex3f(X + Width, Y, 0);
glTexCoord2f(1, 1); glVertex3f(X + Width, Y + Height, 0);
glTexCoord2f(0, 1); glVertex3f(X, Y + Height, 0);
glEnd();
}
나는 또한 클릭 버튼 또는 편집 상자와 같은 것입니다 기본적으로 개발하기 위해 시스템 및 클래스에서 만든 메뉴의 부모가 될 것입니다 메뉴 클래스를 만들었습니다
. 지금까지 Menu 클래스의 유일한 관련 함수는 다음과 같습니다.
void Menu::OnRender() {
if(Visible) {
if(MenuTexture == NULL) {
glColor4f(1.,G,B,A);
glBegin(GL_QUADS);
glVertex2d(X, Y);
glVertex2d(X+Width,Y);
glVertex2d(X+Width,Y+Height);
glVertex2d(X,Y+Height);
glEnd();
}else{
MenuTexture->RenderQuad(X,Y,Width,Height);
}
}
}
마지막으로 내 응용 프로그램은 전체 윈도우에 바인딩되는 하나의 텍스처를 만들었습니다. 즉, 상기 백 워드.
void App::OnRender() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
MainScreen.RenderQuad(0,0,winWidth,winHeight); //Texture Object with bkg.jpg
MainMenu.OnRender(); //Menu object to be 150x300 and all black
SDL_GL_SwapBuffers();
}
그런 다음 메뉴 항목을 만들고 배경 위에 그려 봅니다. 초기화 된 색상을 검정색으로두면 전체 화면이 거의 즉시 검정색으로 바뀝니다. 즉, 메뉴가 그려지는 첫 번째 프레임이 한 프레임, 검은 색 사각형이 검정색으로 배치 된 다음 검정색으로 바뀝니다. 1.0이면 빨강 색으로 표시됩니다. 그러면 전체 그림에 빨간색 필터가 표시되고 메뉴 상자에 불투명 한 빨간색 사각형이 그려집니다.
나는 몇 가지 예제를 통해 렌더링을 해왔지만 뭔가를 놓치고 있어야합니다. 근본적으로, 우리가 행해지는 것의 라인에 모두 넣으면 텍스처를 서페이스에 바인딩하고 서페이스와 텍스처 바인딩의 좌표를 정의합니다. 그런 다음 쿼드를 렌더링합니다. glBegin() 내 메뉴에 색상 호출을 넣었습니다. 4 개의 꼭지점 모두에서 색상을 정의했습니다.
내 대답에 감사 : 이것은 문제를 해결했습니다. 그러나, Menu 객체를 반환하기 전까지 Menu 객체를 올바른 색상으로 렌더링하지 않았습니다. 잘 모르겠다. 나는 그것에 대해 배우고 이것에 대해 배우고 읽을 것이다. 고맙습니다!
[통해서 문제를 해결할] 변경은 App::OnRender()
제작 :
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
MainScreen.RenderQuad(0,0,winWidth,winHeight);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
MainMenu.OnRender();