私はこのコードでOpenGLで飛行機を作成しました:
glBegin(GL_TRIANGLE_STRIP);
glColor4f(0.8, 0.8, 0.5, 1.0);
glVertex3f(startlen, height, startwid);
glVertex3f(startlen, height, startwid + width);
glVertex3f(startlen + length, height, startwid);
glVertex3f(startlen + length, height, startwid + width);
glEnd();
次に、この平面にテクスチャを適用します。
ここでこのチュートリアルを読みましたが、UV座標がないため、「OpenGLでのテクスチャの使用」の部分にとどまりました。
テクスチャファイル(私の場合はビットマップファイル)をインポートする必要があることはわかっています。
ローダーは、textureIDであるGlintを返しますが、それはグローバルですか?たとえば、そのテクスチャをロードする必要がある場合は、指定されたIDを使用してbindtexture関数を呼び出す必要がありますか?
とにかく、どのようにテクスチャを平面に適用できますか?
編集#1:
投稿された蚊の例のテクスチャが機能するようになりました。
私が見つけたのは、テクスチャをクラスのコンストラクターにロードしていることでしたが、オブジェクトがパブリックであり、OpenGLの初期化の前に構築されたため、ロードすべきではありませんでした。
したがって、クワッドの例ではテクスチャが正常に読み込まれるようになりました:)
今の問題は、飛行機で使用しようとしたところ、歪んで見えることです。これに対する解決策は、おそらくテクスチャを数回ロードできるようにすることですが、元のサイズを維持します(これを行う方法はわかりませんが)。
また、現在の飛行機の隣にクリーム色の別の飛行機を作成しましたが、テクスチャリング後は次のようになります。
したがって、現在2つの問題があります。
- テクスチャは元の解像度を維持する必要がありますが、平面全体をカバーする回数だけ表示されます
- その隣の平面は色を失いました(なぜこれが起こったのですか?それを修正する方法は?-この平面にもテクスチャを使用するかもしれません)
編集#2:
蚊のおかげで、2番目の問題が修正されました!しかし、タイリングはまだ機能しません。これが今の様子です:
そして、これは私が使用したテクスチャです:
その寸法は256x256です(私はそれをトリミングするために画像エディタを使用しました)
編集#3:
これらは(内側のマージンの)一致する頂点を持つglTexCoord2f座標です:
glTexCoord2f(0.0f, 0.0f); glVertex3f(startlen, height, startwid);
glTexCoord2f(0.0f, 1.0f); glVertex3f(startlen, height, startwid - width/2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(startlen + length, height, startwid);
glTexCoord2f(1.0f, 1.0f); glVertex3f(startlen + length, height, startwid - width/2);