0

ボクセル ゲームの照明システムを作成するには、頂点ごとに暗さの値を指定する必要があります。GL_COLOR_MATERIAL次のように、頂点ごとに色を使用して指定しています。

glEnable(GL_COLOR_MATERIAL);

glBegin(GL_QUADS);

glColor3f(0.6f, 0.6f, 0.6f);
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.3f, 0.3f, 0.3f);    
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.7f, 0.7f, 0.7f);        
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.9f, 0.9f, 0.9f);
glTexCoord2f(...);
glVertex3f(...);

glEnd();

これは機能していますが、クワッドが多いと非常に遅くなります。私もディスプレイリストを使っています。頂点を暗くする方法について何か良いアイデアはありますか?

4

1 に答える 1

1

即時モード (glBegin、glEnd、およびその間のすべて) を使用しています。パフォーマンスが必要な場合は、それをやめることをお勧めします

おそらくあなたが求めているのは、一般的な頂点属性です。そして、見よ: 現代の OpenGL は実際にはまさにこれを持っている: 汎用属性。彼らはこれまでのところ、正しいことを行い、事前定義された属性 (位置、色、法線、texcoords など) を廃止し、OpenGL-3 コア以降では一般的な属性のみを持っています。

関数 glVertexAttrib (ほとんどの場合、Uniformの方がうまく機能します) と glVertexAttribPointer はあなたの友達です。適切な頂点シェーダーを使用して頂点属性を処理する方法を指定します。

于 2012-11-03T23:18:02.363 に答える