Как мне заставить OpenGL отображать цветной квадрат?

#java #opengl

#java #opengl

Вопрос:

По сути, я пытаюсь позволить OpenGL рисовать кучу четырехугольников. Каждый из этих квадратов имеет разные цвета. Теперь моя проблема в том, что когда я вызываю glColor4f(), цвет не наносится на материал. Я выяснил, что это было потому, что я использовал текстуры где-то еще в процессе рендеринга, поэтому я отключил это. По-прежнему, не получается. После некоторого поиска в Google я наткнулся на glColorMaterial(), который отображал квадраты правильно, но поскольку я использовал glColour4f () для раскрашивания каждого из квадратов, все объекты 3D-текстур на сцене были тонированы. Итак, теперь я немного застрял; я хочу включить освещение на своих 3D-объектах, но эти несколько квадратов должны быть просто нарисованы ровным цветом, без какого-либо освещения вообще. Каков метод OpenGL для этого? Моя настройка контекста OpenGL:

 glViewport(0, 0, dim.width, dim.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, (float)(dim.width/dim.height), 0.1f, 10000.0f);
glMatrixMode(GL_MODELVIEW);
glClearColor(94.0f/255.0f, 161.0f/255.0f, 255.0f/255.0f, 0.5f);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1); 
glEnable(GL_TEXTURE_2D); 
  

Комментарии:

1. Я не знаю точного ответа на этот вопрос… но OpenGL сильно зависит от состояния, и состояние всегда учитывается при рендеринге вершины. Итак… Я не могу вспомнить, как на самом деле это сделать , но вы в основном хотите отключить все, что вы включили, чтобы учесть текстуры, материалы и освещение, затем отобразить ваши квадраты, затем снова включить все снова. ( РЕДАКТИРОВАТЬ: Использовать glDisable(GL_LIGHTING) . Надеюсь, это должно сработать.)

2. @fazo: В OP были некоторые текстуры на других квадратиках, которые должны отображаться с подсветкой.

3. glColorMaterial с GL_EMISSION должен работать.

Ответ №1:

Как сказал Platinum Azure, вам нужно отключить освещение и текстурирование непосредственно перед рисованием ваших квадратов, а затем снова включить их после этого. Вот так:

 glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);

// Draw quads

glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
  

Вы должны быть в порядке, просто используйте glColorf как обычно (вам не нужно glColorMaterial ).

Комментарии:

1. это только снова сбрасывает освещение, но я думаю, что смогу разобраться с этим. спасибо всем за вашу помощь 🙂