2017-11-15 7 views
-1

Ed Angelによる「インタラクティブコンピュータグラフィックス」、具体的にはキューブをテクスチャで回転するコードに従っています。以下のように(本のように)、このための頂点シェーダは、次のとおりです。バージョン440のコアでキューブをテクスチャで描画するための頂点シェーダとフラグメントシェーダは何ですか?

#version 150 
in vec4 vPosition; 
in vec4 vColor; 
in vec2 vTexCoord; 

out vec4 color; 
out vec2 texCoord; 
uniform vec3 theta; 
void main() 
{ 
........ 
........ 
// code for rotation 
........ 
color = vColor; 
texCoord = vTexCoord; 
gl_Position = rz * ry * rx * vPosition; 
} 

とフラグメントシェーダコードは次のとおりです。

#version 150 
in vec4 color; 
in vec2 texCoord; 
out vec4 fColor; 
uniform sampler2D texture; 
void main() 
{ 
fColor = color * texture2D(texture, texCoord); 
} 

[完全なコードへのリンクはhereです。 example 8のコードを見てください。

#version 440 coreを使用して実装しようとしています。私がこれを実行するとき、私は黒いキューブだけを取得します。テクスチャは表示されません。

テクスチャを正しく表示するには、上記のコードにどのような変更を加える必要がありますか?

+0

テクスチャ2Dをテクスチャに変更します(ただしそれは小さな問題です)。実際に、シェーダがバージョンと互換性がない場合は、コンパイラエラーが発生します。 – BDL

+0

@BDL私もそれを試しました。しかし結果は同じです。 – Majis

+0

「fColor = vec4(1.0);」を試してください。この方法で白いキューブを取得した場合、おそらくテクスチャの作成/アップロード/バインドの方法に問題があります。 – bernie

答えて

0

cppのコードでこの行:

glutInitContextVersion(3, 2); 

が問題です。 glslバージョン440では、OpenGL 4.4のコンテキストが必要です。それを変更します。

glutInitContextVersion(4, 4); 

とに応じて、あなたのシェーダコードを近代化:

GLSL Specification

そして、それが正常に動作する必要があります。

+0

私はすでにコードで行っていますが、結果は同じです。 glslバージョン '440'のテクスチャ読み込みのコードが同じであれば、正しくコーディングしていると思います。シェーダコードを使って、@bernieに対する私の反応を見てください。 – Majis

+0

あなたはどのdevツールを使用していますか(どのgpuをお使いですか)? –

+0

他の回答に沿って、テクスチャの読み込み、設定、使用コードを投稿してください –

関連する問題