正射形でフォンのシェーディングを行いたいのですが以下ような表示になってしまいうまく光沢が表現できません。なぜでしょうか?そもそも正射形ではできないのでしょうか?
cpp
1// ##################################### レンダリング ##################################### 2void Game::Renderer()const 3{ 4 sprite->setEnable(); 5 6 7 8 //std::cout << "ああ" << std::endl; 9 10 sprite->setUniform3f("uCameraPos", glm::vec3(0, 0, 1)); 11 12 sprite->setUniform3f("uAmbientLight", glm::vec3(0.2, 0.2, -1.0)); 13 sprite->setUniform3f("uDirLight.mDirection", glm::vec3(0.0, 0.0, -1.0)); 14 sprite->setUniform3f("uDirLight.mDiffuseColor", glm::vec3(1, 1, 1)); 15 sprite->setUniform3f("uDirLight.mSpecColor", glm::vec3(1, 1, 1)); 16 sprite->setUniform1f("uSpecPower", 1.0f); 17 18 sprite->DrawGraph(glm::vec2(WINDOW_WIDTH / 2 - 100, WINDOW_HEIGHT / 2 - 75), 0, 0.0f, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(200, 150)); 19 20 21 22 sprite->setDisable(); 23 24}
glsl
1/*######################################################################### 2# フォング 頂点シェーダー 3###########################################################################*/ 4#version 330 5#extension GL_ARB_explicit_attrib_location: enable 6 7 8 9 10// ###################### 頂点属性 ###################### 11layout(location = 0) in vec2 vertexPosition; //座標 12layout(location = 1) in vec2 vertexUV; //UV座標 13layout(location = 2) in vec3 vertexNorm; //法線 14 15// ###################### 出力 ###################### 16layout(location = 3) out vec2 vUV; //UV 17layout(location = 4) out vec3 vNorm; //法線 18layout(location = 5) out vec3 vPosition; //座標 19 20// ###################### Unifrom ###################### 21uniform mat4 uScale; //スケール 22uniform mat4 uRotate; //回転 23uniform mat4 uTranslate; //平行移動 24 25uniform mat4 uViewProjection; //ビュープロジェクション行列 26 27 28 29 30void main() 31{ 32 vec4 vertex = vec4(vertexPosition,0.0,1.0); //同次元座標 33 mat4 model = uTranslate * uRotate * uScale; //モデル行列 34 gl_Position = (uViewProjection * model) * vertex; //頂点座標 クリップ空間 35 36 vNorm = (vec4(vertexNorm,0.0) * uViewProjection).xyz; //法線 37 38 vPosition = vertex.xyz; 39 vUV = vertexUV; //UV座標 40}
glsl
1/*######################################################################### 2# フォング フラグメントシェーダー 3###########################################################################*/ 4#version 330 5 6#extension GL_ARB_explicit_attrib_location: enable 7 8 9 10// ###################### 変数 ###################### 11 12//ライト 13struct DirectionalLight 14{ 15 vec3 mDirection; // 平行光源 16 vec3 mDiffuseColor; // 拡散反射色 17 vec3 mSpecColor; // 鏡面反射色 18}; 19 20// ###################### 入力 ###################### 21layout(location = 3) in vec2 vUV; //UV座標 22layout(location = 4) in vec3 vNorm; //法線 23layout(location = 5) in vec3 vPosition; //座標 24 25// ###################### Unifrom ###################### 26uniform sampler2D uImage; //イメージ 27 28uniform vec3 uCameraPos; //カメラ 29uniform float uSpecPower; //鏡面反射強さ 30uniform vec3 uAmbientLight; //環境光 31 32uniform DirectionalLight uDirLight; //平行光源 33 34 35 36// ###################### 出力 ###################### 37out vec4 fragment; 38 39 40 41 42 43void main() 44{ 45 vec3 N = normalize(vNorm); 46 vec3 L = normalize(-uDirLight.mDirection); 47 vec3 V = normalize(uCameraPos - vPosition); 48 vec3 R = normalize(reflect(-L, N)); 49 50 vec3 Phong = uAmbientLight; 51 float NdotL = dot(N,L); 52 if(NdotL > 0) 53 { 54 vec3 Diffuse = uDirLight.mDiffuseColor * NdotL; 55 vec3 Specular = uDirLight.mSpecColor * pow(max(0.0, dot(R, V)), uSpecPower); 56 Phong += Diffuse + Specular; 57 } 58 59 60 61 fragment = texture(uImage,vUV) * vec4(Phong, 1.0f); 62}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/11 00:59
2021/06/11 01:15
退会済みユーザー
2021/06/11 01:24
2021/06/11 01:37 編集
退会済みユーザー
2021/06/11 02:07
2021/06/11 02:15
退会済みユーザー
2021/06/11 07:53
2021/06/11 08:02
2021/06/11 08:05
退会済みユーザー
2021/06/11 08:06
2021/06/11 08:31 編集
2021/06/11 08:31
退会済みユーザー
2021/06/11 08:41
2021/06/11 08:52
退会済みユーザー
2021/06/11 09:43
2021/06/14 02:21
2021/06/14 09:35