2014-06-25 4 views
0

У меня есть два каре, для которых мне нужно найти normal.The координаты являются следующие для четырехъядерных 1:Расчет нормалей для освещения в OpenGL

(-2,1.25,-1) 
(-2,2.2,0) 
(1,2.2,0) 
(2,1.25,-1) 

я получил нормальный как (0, 0,73, - 69)

для четырехугольника 2:.

(-2,2.2,0) 
(2,2.2,0) 
(2,1.25,1) 
(-2,1.25,1) 

нормально: (0, 0,73, .69)

я га вы уже рассчитали нормали. Может кто-нибудь, пожалуйста, подтвердите правильность этих нормалей?

Также я читал о нормальном указании внутрь и наружу. Кто-нибудь объяснит мне эту концепцию?

ответ

2

Ваши нормали в основном выглядят правильно. Для первой четверки, я получаю:

(0.0, 0.725, -0.689) 

Для второго:

(0.0, -0.725, -0.689) 

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

Термин «наружу» на самом деле не имеет смысла для изолированного квадрата. Он в основном применяется к закрытым формам, где он должен иметь интуитивный смысл. Нарисуйте сферу с нормальным вектором, нарисованным, начиная с точки на сфере. Нормальное указание «наружу» означает, что оно указывает от центра куба, что означает, что оно указывает на внешнюю сторону. «внутрь», конечно, наоборот, где нормаль указывает на центр сферы или внутри формы.

Есть еще один способ взглянуть на него, поскольку нормали используются в основном для расчета освещения. Нормали должны указывать на сторону поверхности, которую вы хотите видеть освещенной. Чаще всего вы смотрите на формы снаружи, поэтому вы хотите, чтобы внешний свет был освещен. Это означает, что вы в основном хотите, чтобы нормали указывали наружу. Если у вас есть открытые поверхности, которые необходимо освещать, если смотреть с обеих сторон, есть несколько более сложные вычисления освещения, которые могут обрабатывать то, что обычно находится под «двухсторонним освещением».

Здесь также важна связанная с этим концепция, которая является «порядком обмотки». Он определяет, если вершины расположены по часовой стрелке или против часовой стрелки при просмотре их с определенного направления. OpenGL использует порядок обмотки, чтобы решить, стоит ли треугольник перед зрителем. Опять же, вы заботитесь о том, чтобы иметь желаемый порядок намотки при взгляде на поверхность снаружи или, в более общем плане, со стороны, которую вы хотите видеть, когда вы показываете поверхность. По умолчанию OpenGL использует обмотку против часовой стрелки, поэтому вы хотите обмотку против часовой стрелки при взгляде на поверхность сбоку, которую вы хотите видеть, что для закрытых фигур в основном снаружи. Вы часто можете уйти, когда порядок намотки является «неправильным», если вы не устраните обратные треугольники, которые выполняются с помощью glEnable(GL_CULL_FACE). Но в любом случае, вы можете избавиться от проблем, возникающих в будущем, если вы всегда используете для выполнения примитивов порядок обмотки.

Это возвращает нас к нормальному расчету. Поскольку только знак оказался другим, ни один из наших расчетов не является технически неправильным. Я предположил, что квадранты используют против часовой стрелки, что означает, что я вижу «снаружи» квадрата от направления, где вершины появляются в порядке против часовой стрелки. Поскольку я также хочу, чтобы нормали указывали на внешнюю сторону, я так рассчитывал нормали.Другими словами, с нормальным я рассчитал, если вы отодвигаетесь от квада в направлении нормали, а затем оглядываетесь назад на квад, вершины будут находиться в порядке против часовой стрелки.

+0

Благодарим за подробный ответ ... большое спасибо – user3600372