После смены кода вы видели много типичных ошибок новичка - на этот раз низкий уровень Win32 API-стиля.
Прежде всего: сделайте себе одолжение и, пожалуйста, не используйте голый Win32 API. Существует так много хороших фреймворков OpenGL, которые имеют дополнительное преимущество для бесплатной конвертации вашей программы. В вашем случае я бы рекомендовал SDL, доступный от http://www.libsdl.org
Теперь основная проблема с вашей программой заключается в том, что она разбросала некоторые жизненно важные операции OpenGL по всему месту. Самое главное - настроить видовые экраны и матрицы. Ваши функции рисования всегда должны следовать следующей схеме
void draw(…)
{
glDisable(GL_SCISSOR_TEST);
glClearColor(…);
glClearDepth(…);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
for(subview in views) {
glViewport(…);
#ifdef USE_FIXED_FUNCTION_PIPELINE
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
projection_setup();
for(model in scene) {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
modelview_setup();
#else
glUseProgram(…);
setup_uniforms();
#endif
draw_stuff();
}
}
SwapBuffers();
}
Ключа здесь, чтобы ваша проблема, установить окно просмотр, проекцию и видовая в коде рисования прав, когда вам это нужно, что вам это нужно, чтобы быть.
Вы можете использовать GetSystemMetrics (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx), чтобы получить размер разных частей окна в зависимости от стиля, который вы используете. Затем добавьте это к размеру вашего целевого клиента (800x600), чтобы получить размер вашего окна. – IronMensan
Похоже, что вы оставили мысль незавершенной? «Есть ли способ сделать это так, чтобы ...»? – Gaffi
oops thanks justed отредактировал его – user2296321