이렇게 잠시 동안 해결책을 찾고 있었지만 꽤 오래되었습니다. 내 문제는 SDL을 초기화하고 오류없이 창을 띄운 후에 창이 열리 며 1, 0 또는 -1 이외의 다른 Z는 렌더링되지 않습니다. 또한 Z를이 세 가지 값 중 하나로 설정해도 아무 것도 수행하지 않습니다. 여기 내 코드가있다. 나는 glew와 sdl을 헤더에 포함 시켰고 loop 메서드는 주요 프로그램 루프입니다.OpenGL + SDL + glew는 초기화가 성공적으로 완료된 후 아무 것도 그려지지 않습니다.
#include "Controller.h"
int Controller::loop() {
// Initialize
if(!init())
return -1;
SDL_Event _event;
// Main loop
while(_running) {
// Loop through all input
while(SDL_PollEvent(&_event))
event(_event);
// Game logic
step();
// Game drawing
draw();
}
// End game
end();
return 0;
}
bool Controller::init() {
// Initialize SDL
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
return false;
// Create window
if ((_mainWindow = SDL_CreateWindow("GAME", 200, 200, 640, 480, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL)) == NULL)
return false;
// Create context
_mainContext = SDL_GL_CreateContext(_mainWindow);
// Make it active
SDL_GL_MakeCurrent(_mainWindow, _mainContext);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
// Initialize glew
glewExperimental = GL_TRUE;
if (glewInit() != 0)
return false;
return true;
}
void Controller::event(SDL_Event& _event) {
switch(_event.type) {
case SDL_KEYDOWN:
switch (_event.key.keysym.sym) {
case SDLK_ESCAPE:
_running = false;
break;
default:
std::cout << "Key has been pressed." << std::endl;
}
default:
break;
}
_world[_currentWorld].event(_event);
}
void Controller::step() {
_world[_currentWorld].step();
}
void Controller::draw() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f, -0.5f, -4.0f); // A
glVertex3f(1.0f, -0.5f, -4.0f); // B
glVertex3f(0.0f, 0.5f, -4.0f); // C
glEnd();
//_world[_currentWorld].draw();
SDL_GL_SwapWindow(_mainWindow);
}
void Controller::end() {
SDL_GL_DeleteContext(_mainContext);
SDL_DestroyWindow(_mainWindow);
SDL_Quit();
}
답변 해 주셔서 감사합니다. 이 코드를 여러 자습서에서 모아 두었습니다. 아무 것도 알 필요가없는 모든 것을 발견했습니다. Z 속성의 범위는 0부터 1까지입니다. 저는 삼각형을 그릴 수 있기 전에 변형을 원합니다. 그리고 제가 찾은 모든 자습서는이 오래된 스타일의 그림이었습니다. –