問題タブ [opengl-es-lighting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl-es-lighting - ヘッドライトまたはライトの仕組みの理解
OpenGL を使用して 3D 迷路のプロジェクトを開発しています。プログラミングの知識が乏しいにもかかわらず、私はなんとかそれを構築し、テクスチャを追加し、マウスとキーボードで操作しました (ただし、ほとんどの部分はネットから盗みました)。今、私は照明にこだわっています。
私のアイデア (有名なゲーム SCP-087 に似ています) は、光の範囲が短いヘッドライトを作ることでした。私は OpenGL と法線のライティングについて多くのことを読みましたが、それでもライトは奇妙でランダムに振る舞います。
カメラの周りで私の世界を動かす(翻訳する)機能があります。Render() 関数で変換する前に、コードの先頭に light0 を配置すると、そのライトはカメラで「配置されたまま」であり、世界はそれらの周りを移動する必要があることを理解しています-それは簡単に聞こえます。しかし、うまくいかないようです。壁のほとんどは、横向きに立っていると明るくなります (壁を反対側に向けると完全に暗くなります)。
私の他の問題は法線です。私の法線がうまく指定されていないことは確かですが、どのように見えるべきかわかりません。私は壁に三角形のストリップを使用しています(理論的には効率を向上させるためですが、実際には私の気まぐれです)、三角形のストリップで作られたまっすぐな壁に法線を指定する方法をどこにも見つけることができませんでした(面に法線を付ける方法、実際には、1 つの面を定義する 2 つの頂点しかありません)。単純な四角形の 1 つの壁を作成し、1 つの面に対して 1 つの単位ベクトルの長さを 4 つの垂直に接続しても、改善は見られませんでした。
OpenGL ステート マシンのパラメータ、特に減衰を適切に処理できません。コードの変更は最終的な照明に影響を与えないようです。
私は現在、OpenGL の照明についてどこを検索し、何を読むべきかわかりません。追加のライブラリ (glu.h を除く) を使用せずに、非常にシンプルにしたいと考えています。この問題について手を貸してくれますか、または役立つ知識のソースを紹介してもらえますか (簡単な例が必要です...)?
android - OpenGL ES ライト スペキュラ レンダリングはオブジェクトの半分のみ
私は本Pro OpenGL ES for Androidをフォローしており、鏡面反射光を正しくレンダリングしようとしています。何が起こっているかは次のとおりです。
OpenTK の ES11.GL を使用しています。
これは私の照明コードです:
私は 3D と OpenGL の両方に非常に慣れていないため、この問題の原因がわかりません。光を反対側に移動すると、イメージが反転します。ライトが球体の真正面からのものである場合、スペックはまったく表示されません。
基本的なライトは正しく動作するのに、仕様を含めると失敗するのはなぜですか?
opengl-es - openglの光の位置
回転する立方体を描画し、この立方体の前の固定位置にスポットライトを追加しようとしています。しかし、z軸に間違った値を設定したため、ライトが表示されません。光の位置を変えてみたところ、ようやく立方体が思い通りに表示されました。しかし、なぜこの値が機能するのかはまだわかりません。
これが間違ったコードです。しかし、その価値は妥当だと思います。
これが正しいコードです。しかし、なぜそれが機能するのかわかりません。
これら2つのスニペットの違いは、ライト位置のz軸のみです。ここからすべてのソースコードを入手できます。
妥当な位置だと思う0.0f, 0.0f, 0.5f
のは、立方体の前面の中心点が0.0f, 0,0f, 0.5f
変形前にあるからです。だからそれは立方体の最強の光を与えるでしょう。
java - メソッド initGeometry(gl) を初期化できません。initLighting(gl); クラスで
私の間違いを見つけるのを手伝ってください。私は本から例を作成しますが、著者である(または私が)トラブルを起こし、解決策が見つからない可能性があります。最初のクラスは私のオブジェクトのジオメトリです
2 つ目はレンダリングです。package com.example.solarsystem;
したがって、surfaceCreated メソッドでは、initGeometry(gl); の初期化に誤りがあります。initLighting(gl); また、initLighting メソッドを最初のクラスからレンダー クラスにカットすると、初期化 makeFloatBuffer で間違いが発生します。
android - 頂点シェーダーのフォン ライティング
Android 用の OpenGL ES 2.0 を使用して、法線と色を含む単純な立方体を表示しようとしています。そのために、次のようにシェーダー プログラムを作成し、頂点シェーダーとフラグメント シェーダーをアタッチし、プログラムをリンクします。
そして、最後にクラッシュし、LogCatに出力されglUseProgram: glError 1281
ます。ドキュメントを確認すると、glError 1281、つまりGL_INVALID_VALUE
、プログラムが 0 でも OpenGL によって生成された値でもない場合に生成されます。
これを約 10 時間グーグルで調べた後、StackOverflow に支援を求めることにしました。glUseProgram をこのように動作させるために、頂点シェーダー コードで何が問題になる可能性がありますか?
これが私の頂点シェーダーコードであり、フォンライティングを実装しようとする私の試みです:
android - OpenGL ES 2.0 の拡散シェーダー: カメラの動きに合わせて光が変化する (Android の Vuforia)
出発点として、MultiTargets と呼ばれる Vuforia (バージョン 4) サンプルを使用します。これは、カメラ フィードで 3D の物理的な「立方体」を追跡し、立方体のエッジに沿って黄色のグリッド ラインで補強します。私が達成したいのは、独自のライト位置を設定することにより、テクスチャを削除し、代わりにキューブ面に拡散照明を使用することです。
これをネイティブ Android で実行したいのですが、Unity は使用したくありません。
数日間の作業と学習の困難な旅でした。あらゆる種類の OpenGL を扱うのはこれが初めてで、OpenGL ES 2.0 は初心者にとって簡単なものではありません。
そのため、キューブの上面の少し上に光源を配置しました。モデル空間でランバート係数を計算すると、適切な拡散効果が得られることがわかりました。カメラに関係なく、すべてが所定の位置に留まり、上面だけが光を受けます。
しかし、アイ スペースを使用するようになると、おかしくなり、光がカメラを追いかけているように見えます。上面だけでなく他の面も明るくなります。それがなぜなのかわかりません。テストのために、フラグメントシェーダーでピクセルの明るさをレンダリングするために光源までの距離のみを使用して、ライトの位置が期待どおりであることを確認しました。したがって、私は自分の「lightDirectionEyespace」の正確さにかなりの自信を持っています。私の唯一の説明は、法線の何かが間違っているに違いないということです。しかし、正規行列を正しく作成するための説明に従ったと思います...
助けてください!
それからもちろん、これらの拡散計算を目の空間で実行する必要があるかどうかという問題がありますか? モデル空間だけでやっても何かデメリットはありますか?後でもっと多くのモデルとライトを使用し、鏡面反射光と透明度を追加すると、理由はまだわかりませんが、おそらく機能しなくなるのではないかと思います。
私の renderFrame メソッド: (一部の変数名にはまだ「ボトル」が含まれています。これは、立方体を正しく作成した後に次に照らしたいオブジェクトです)
私の頂点シェーダー:
そして私のフラグメントシェーダー:
opengl-es - シェーダとクック トーランスがテクスチャを出力できない
私はopengl esシェーダーとcook-torranceをまったく初めて使用します。次のシェーダーは赤のみを出力し、周囲光とポイントライト用に処理されたテクスチャカラーはありません。立方体はテスト用で、シェーダーは適用されていません。右側のロケットはテクスチャがあり、出力はなく、赤色のみです。どんなopengl esの男も助けることができますか? テクスチャなし クック トーランスを適用する前に赤 のオリジナル テクスチャのみを適用し、gl_FragColor =texture2D(texture,vertTexCoord.st).rgb*vertColor; で出力します。しかし、以下の CookToance() が失敗する原因は何ですか?
フラグメントシェーダー
上記の cook-torrance にエラーはありますか? それを助けてください。
頂点シェーダー