1

これを達成する方法はありますか (OpenGL 2.1)? このように線を引くと

glShadeModel(GL_FLAT);
glBegin(GL_LINES);
  glColor3f(1.0, 1.0, 0.0);
  glVertex3fv(bottomLeft);
  glVertex3fv(topRight);

  glColor3f(1.0, 0.0, 0.0);
  glVertex3fv(topRight);
  glVertex3fv(topLeft);
  .
  .
  (draw a square)
  .
  .
glEnd();

望ましい結果 (エッジごとに異なる色) が得られますが、シェーダーでフラグメント値を計算できるようにしたいと考えています。シェーダー プログラムをセットアップした後に同じことを行うと、常に頂点間の色が補間されます。これを回避する方法はありますか?(クワッドを使用して同じ結果が得られればさらに良いでしょう)

ありがとう

4

1 に答える 1

1

プリミティブ内の頂点属性間の補間が必要ない場合 (たとえば、線分の色)、同じ色を 2 回渡す必要があるため、ジオメトリを複製することになります。

 v0             v1          v2
 x--------------x-----------x    

(v0 は構造体 p0 と c0、v1 は p1 と c1 などで構成されます。)

色補間で線を描くには:

glBegin(GL_LINES);
//draw first segment
glColor3fv(&c0); glVertex3fv(&p0);
glColor3fv(&c1); glVertex3fv(&p1);
//draw second segment
glColor3fv(&c1); glVertex3fv(&p1);
glColor3fv(&c2); glVertex3fv(&p2);
glEnd();

補間なしで描画する場合:

glBegin(GL_LINES);
//draw first segment
glColor3fv(&c0); glVertex3fv(&p0);
glColor3fv(&c0); glVertex3fv(&p1);
//draw second segment
glColor3fv(&c1); glVertex3fv(&v1);
glColor3fv(&c1); glVertex3fv(&v2);
glEnd();

GL_x_STRIPこれは、プリミティブ内で属性を共有したくないため、トポロジを使用できなくなったことを意味することに注意してください。

于 2010-04-21T21:13:33.637 に答える