-1

このコードは12面体のみをレンダリングし、glBegin(GL_TRIANGLES)ブロックを完全に無視します。

glutSolidDodecahedron();
glBegin(GL_TRIANGLES);
glNormal3f(1, 0, 0);
glVertex3f(11, 0, 0);
glNormal3f(0, 1, 1);
glVertex3f(-11, 0, 0);
glNormal3f(0, 0, 1);
glVertex3f(0, 0, 11);
glEnd();

2つのシェーダーは非常に単純です。

頂点シェーダー:

varying vec3 normal;
void main()
{   
gl_Position = ftransform();
gl_FrontColor = gl_Color;
gl_BackColor = gl_Color;
normal =  gl_Normal;
normal = gl_NormalMatrix  * normal;
}

と断片:

uniform vec3 lightDir;
varying vec3 normal;
void main()
{
    float intensity = dot(lightDir, normal);
    gl_FragColor =  0.5 * (1.5 + intensity) * gl_Color;
}

このglutSolidX例(Lightouse3Dチュートリアルに基づく)では関数の種類が適切に機能しますが、フレームごとに座標を変更する三角形をすばやく描画するにはどうすればよいですか(配列とGL_DYNAMIC_DRAWを試しましたが、古い「固定パイプライン」と比較すると、作業が多すぎます。 " アプローチ)。他の人がまだglBegin(..); glEnd();GLSLシェーダーでブロックをうまく使用しているのを見たので、それは可能であるに違いありません。何が欠けている可能性がありますか?

4

1 に答える 1

5

glBegin/glEndブロックの三角形の頂点の座標は次のとおりです。

 11, 0,  0
-11, 0,  0
  0, 0, 11

これは、ビュー内で完全に平らになっていることを意味します。こんなに硬い角度から一枚の紙を見るようなもので、線になります。三角形には太さがないため、この線も引かれておらず、三角形は見えないように見えます。

于 2012-06-28T08:56:44.110 に答える