質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

Q&A

0回答

912閲覧

OpenGL 鏡面反射マップが赤色に表示されてしまう原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

0グッド

0クリップ

投稿2021/11/02 03:54

編集2021/11/06 02:34

提示コードですが鏡面反射のライトマップを実装したいのですが上手く実装できません。これは何が原因なのでしょうか? 一番怪らしいフラグメントシェーダーですがなぜ赤色に表示されてしまうのでしょうか?

#####試したこと
diffuse にテクスチャ、specularにライトマップテクスチャを設定

ライトマップ: https://imgur.com/a/FK28Hke
テクスチャ: https://imgur.com/a/TNbWEEy

参考サイト: https://learnopengl.com/code_viewer_gh.php?code=src/2.lighting/4.2.lighting_maps_specular_map/lighting_maps_specular.cpp

イメージ説明

Fragment Shader
/*######################################################################### # ###########################################################################*/ #version 420 //#extension GL_ARB_explicit_uniform_location : require layout(location = 3) in vec3 vPosition; layout(location = 4) in vec2 vUV; layout(location = 5) in vec3 vNormal; struct Material { sampler2D diffuse; sampler2D specular; float shininess; }; struct Light { vec3 position; vec3 ambient; vec3 diffuse; vec3 specular; }; uniform Material material; //マテリアル uniform Light light; //ライト uniform vec3 uViewPosition; //カメラ座標 out vec4 fragment; void main() { // ambient vec3 ambient = light.ambient * texture(material.diffuse,vUV).rgb; // diffuse vec3 norm = normalize(vNormal); vec3 lightDir = normalize(light.position - vPosition); float diff = max(dot(norm, lightDir), 0.0); vec3 diffuse = light.diffuse * diff * texture(material.diffuse,vUV).rgb; // specular vec3 viewDir = normalize(uViewPosition - vPosition); vec3 reflectDir = reflect(-lightDir, norm); float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); vec3 specular = light.specular * spec * texture(material.specular, vUV).rgb; vec3 result = ambient + diffuse + specular; fragment = vec4(result, 1.0); }
Main.cpp
cube.shader->setEnable(); cube.setEnableTexture(0);//テクスチャ cube.setEnableTexture(1);//ライトマップ cube.setPosition(cubePos); cube.setScale(glm::vec3(25, 25, 25)); cube.shader->setUniform3f("light.position", lightPos); cube.shader->setUniform3f("light.ambient", glm::vec3( 0.2f, 0.2f, 0.2f)); cube.shader->setUniform3f("light.diffuse", glm::vec3( 0.5f, 0.5f, 0.5f)); cube.shader->setUniform3f("light.specular", glm::vec3(1.0f, 1.0f, 1.0f)); cube.shader->setUniform1f("material.shininess", 64.0f); cube.shader->setUniform1i("material.diffuse",0); cube.shader->setUniform1i("material.specular",1); cube.shader->setUniform3f("uViewPosition", FrameWork::Camera::getPosition()); cube.Renderer(); cube.shader->setDisable();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/11/06 02:27

文章を修正
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問