2014-11-25 6 views
0

Я хочу нарисовать объект, который его линии желтые (каркас), и его начинки черные, поэтому я вижу разницу. Я знаю, что для того, чтобы сделать это я должен использовать glPolygonMode (интермедиат arg1, внутр арг2), но я не знаю, как сделать это правильно, вот как я делаю ....GL_POLYGONMODE не умеет правильно использовать

gl1.glColor3d(1.0, 1.0, 0.0); 
    gl1.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
    gl1.glColor3d(0.0, 0.0, 0.0); 
    gl1.glBegin(GL_POLYGON); 

проблема в этом заполняет только многоугольники и забыть строки ...

+0

Код, который вы поставили, должен четко нарисовать контуры полигонов черным цветом, не заполняя ничего. Кстати: ваш второй вызов glColor3d переопределяет первый. – BDL

+1

, но как я могу это сделать, чтобы одновременно заполнить и использовать каркас? – pMpC

ответ

2

чтобы нарисовать цветной заполненный полигон очертаний другого цвета, вам придется нарисовать модель дважды:

  • в первом проходе с полигонмодом, установленным в GL_FILL, и цветами, установленными в цвет полигонов.
  • Во втором обратном вызове вы рисуете ту же модель с полигонмодом, установленным в GL_LINE, и с контурным цветом.

код будет выглядеть как-то так:

gl1.glColor3d(1.0, 1.0, 0.0); 
gl1.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
gl1.glBegin(GL_POLYGON); 
//Draw model 
gl1.glEnd(); 

gl1.glColor3d(0.0, 0.0, 0.0); 
gl1.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
gl1.glBegin(GL_POLYGON); 
//Draw model again 
gl1.glEnd(); 

Если включена глубина тестирования, вы должны нарисовать модель немного ближе к камере во втором проходе, чтобы пройти тест глубины , Вы можете сделать это, например, со вторым параметром glPolygonOffset.

Кроме того: если для этого нет веских оснований, вы не должны использовать функциональность с фиксированной функцией больше, поскольку она устарела.

+1

gl1.glColor3d (1,0, 1,0, 0,0); gl1.glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); \t gl1.glColor3d (0,0, 0,0, 0,0); \t gl1.glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); Я только что сделал это и не работал так же, как и – pMpC

+0

, вам нужно нарисовать модель между GL_FILL и следующим вызовом glColor3d. Я обновляю ответ – BDL

+2

@pmpc: Вероятно, он не будет работать, если вы включите тестирование глубины. Функция глубины по умолчанию - «GL_LESS», а незаполненные линии генерируют глубину (примерно), равную тому, что вы нарисовали на последнем проходе, поэтому они терпят неудачу при тестировании глубины. Вы можете либо применить смещение глубины, либо отключить проверку глубины между проходами. Вы можете подумать, что использование функции глубины 'GL_EQUAL' будет делать трюк, но, как правило, не работает в многопроходном рендеринге. Все это объяснялось во втором и последнем параграфах ответа. –

Смежные вопросы