-2

重複の可能性:
オブジェクトを互いに近くにスケッチする

画面の下のグラフをスケッチしたい。

             |----|   sphere
             |----|
             / /
            / /
           / /         cylinder
          / /
         / / angle = 45
         | |
         | |
         | |           cylinder (i)
         | |
         | |
         | |
 -----------           cylinder
 -----------

(i) でマークされた円柱をスケッチするには、以下のコードを使用します。

glTranslatef(0.0f, 10.0f, 400.0f ) ;
glColor3f ( 0.0f, 1.0f, 1.0f ) ;
glRotatef (90.0f, 1.0f, 1.0f, 0.0f );
gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);
glTranslatef(0.0f, 10.0f, -400.0f ) ;
4

1 に答える 1

0

私はここで悪者になりたくないので、そのコードがコンテキストなしでは何の価値もない理由と、理解する必要がある理由を説明させてください。

このスニペットを 1 行ずつ見ていきましょう。それはすべてから始まります

glTranslatef(0.0f, 10.0f, 400.0f ) ;

最初の質問は次のとおりです。これが操作されているマトリックスは何ですか。おそらくモデルビューですが、わかりません。そして、その glTranslatef への呼び出しの前の行列は何ですか? OpenGL マトリックス操作は、スタック上のマトリックスを操作の結果に置き換えるという点で、x86 アセンブリに多少似ています。

glColor3f ( 0.0f, 1.0f, 1.0f ) ;

これにより、色の状態が設定されます。もちろん。通常、この呼び出しは描画されるジオメトリとグループ化され、コードの途中には配置されません。

glRotatef (90.0f, 1.0f, 1.0f, 0.0f );

軸 (1, 1, 0) を中心に回転します。つまり、オブジェクトに車軸を突き刺し、ローカル原点を通過してポイント (1, 1, 0) に向かって進み、この軸を中心に 90° 回転するようなものです。 .

gluCylinder(quadric,0.0f,200.0f,100.0f,32,32);

フレームのレンダリングを開始するときにモデルビュー マトリックスがリセットされる部分を省略したため、円柱が最初に回転され、次に平行移動されます。

glTranslatef(0.0f, 10.0f, -400.0f ) ;

そして、最後の glTranslatef は、円柱の描画にはまったく影響しません。


問題がわかりましたか?あなたは非常に具体的な質問をしています。それは明らかに宿題です。そこにランダムなコードを入れて、実際に何をしているのかわからないまま「どのように描画するか」と尋ねてください。

まずは基本をしっかり掴んでおかないとどうしようもありません。喜んでお手伝いいたします。ウィンドウの中央に三角形を描くなど、単純なものを描くことから始めます。

于 2012-11-23T10:25:34.547 に答える