問題タブ [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.
iphone - DOT3照明とは?
私の質問への回答は、DOT3 ライティングが OpenGL ES レンダリングに役立つことを示唆していますが、DOT3 ライティングとは何かについて適切な定義を見つけるのに苦労しています。
編集 1
iPhone関連の情報をお待ちしております。
iphone - OpenGL ES ライトの質問
私は OpenGL ES を初めて使用し、iPhone 用の Objective-C で開発しています。
私が理解しようとしているのは、視錐台に光がどのように配置されるかです。これは私がそれを行う方法です:
正方形を作成し、錐台に「床」として配置します。ライトを床の真ん中の真上に置き、ライトの方向を真下に向けます。今、床の光の輪が真ん中にあると思います。しかし、そうではありません。どうして?
これにより、光の輪が床の真ん中にあり、少し後方に配置されないようにするべきではありませんか?
これが私の重要なコードです:
ビューの設定:
そして描画:
また、私は
に
板は暗くなり、光は当たらない。なぜ、ライトを2歩近づけただけなのか…?次のように 2 段階離れた位置に移動すると、同じことが起こります。
私の問題に「光を当てる」ための助けは大歓迎です! (しょうがない…;))
前もって感謝します!
c++ - OpenGLの街路灯と影?
シーンの通りを照らすために、点光源を試し、glMaterial を使用し、環境光を使用しました。
街灯のように完全に照らされたシーンではありませんが、リソースを共有したり、これを実現する方法を正確に説明したりできますか?
私はネットで多くの軽いリソースを調べましたが、正しく理解できませんでした。
iphone - 独自の構造体をopengl es 2.0シェーダーに渡す
本 OpenGL ES 2.0 Programming Guide の照明の例を試してみたいと思います。シェーダーでは、2 つの構造を作成しました。
彼らはまた、これらの構造に基づいて 2 つのユニフォームを作成しました。
問題は、独自の構造を実際のシェーダーに渡す方法がわからないことです。
メイン コードで同じ構造を作成し、オブジェクトをシェーダーに渡したいと考えています。これはどのように可能ですか?
よろしくニクラス
android - glEnable(GL_COLOR_MATERIAL)が追加されたときにOpenGL ES(Android)Cubeが照明を無効にしますか?
これはおそらく非常に単純な質問であり、私には理解できません。立方体に照明を付けたいのですが、いくつかの面の色が異なります。次のコードは、照明のない立方体になりますが、黒い面が 1 つあります。
glEnable(GL10.GL_COLOR_MATERIAL) のコメントを外すと、黒い面のない明るい立方体が得られます。面が 1 つだけ黒い立方体を作成するにはどうすればよいですか?
math - GLSLシェーダーの照明が、光っているオブジェクトとともにシーン内を移動するのはなぜですか?
私はOpenGLES2.0のチュートリアルに従い、 developer.apple.comの便利なユタティーポットを使用して、見つけたGLSL照明のチュートリアルと組み合わせています。
たくさんのいじりと実験の後、ティーポットを画面上に適度に正しく描画し、照明チュートリアルの「トゥーンシェーディング」を使用して3つの軸すべてを中心に回転させます。頂点リスト全体を三角ストリップとして描画するだけなので、ジオメトリにいくつかの不具合があります(teapot.hファイルを見ると、新しい三角ストリップを開始するはずの場所に「-1」が埋め込まれていますが、これはテストデータのみで、私の問題には関係ありません)。
私が本当に混乱しているのは、シーンにライトを配置する方法です。私のObjective-Cコードには、{0,1,0}を含むfloat 3ベクトルがあり、それをシェーダーに渡して、光の強度を計算します。
シーン内でもライトが動いているように見えるのはなぜですか?つまり、ライトは、ティーポットがどの方向を向いていても、常に同じ側を指している、見えないスティックによってティーポットに取り付けられているかのように機能します。
これは頂点シェーダーです
「Position」はObj-Cコードによって設定され、オブジェクトの頂点です。「Normal」は頂点配列(VBO)からの法線のリストであり、「Projection」と「Modelview」は次のように計算されます。
(CC3GLMatrixは、上記のリンク先のGLESチュートリアルで説明されているCocos3Dライブラリからのものです)
そして、私はシーンに光を当てます
フラグメントシェーダーは次のようになります
これを解決しようとしているときに、(GLESには存在しない)'gl_LightSource'と'gl_NormalMatrix'を参照するコードに出くわしましたが、コードからシェーダーに渡さなければならない同等のものに何を入れるべきかわかりません。「アイスペース」「カメラスペース」「ワールドスペース」などへの参照は混乱を招きます。おそらくそれらの間で物事を変換する必要があることはわかっていますが、コード内またはシェーダー内の理由や方法(および場所)がわかりません。 ?)
フレームごとに光源を変更する必要がありますか?それを設定するために私が持っているコードはあまりにも単純に見えます。私は実際にティーポットを動かしているのではありません。代わりに、シーン全体を動かしています。
iphone - 構造体の配列をOpenGLES2.0シェーダーに渡す
ある種の照明を実装したいです。そして、頂点シェーダーにライトソースプロパティを含む構造体を作成しています。
私のアプリでは、いくつかの光源が必要です。だから私は置きます:
これらのユニフォームをアプリからロードするにはどうすればよいですか?次のような方法が適切ですか、それとも優れていますか。
ios - GLSL ES 頂点をファー プレーンにクリップ
iPhone でシャドウ ボリュームをいじっていますが、シャドウ ボリューム キャップがファー プレーンでクリップされている場合を除き、すべてが機能します。
gl_ClipVertex
は GLSL ES では使用できないため、遠方平面にあるようにクリップするにはどうすればよいgl_Position.z
ですか? すでに を使用しようとしていますgl_Position.z = gl_Position.w
が、結果が正しくなく、シャドウ ボリュームがカメラの方向に従っているようです。それを行う他の方法はありますか?
android - OpenGL ES 1.1 の奇妙なライティングの問題
Android の OpenGL ライティングで直面している興味深い問題を調べています。私は、3D オブジェクトを追加および操作できる 3D Viewer に取り組んでいます。さまざまな属性を持つライトを設定することもできます。Viewer で直面していた問題は、ライト (ポイント ライト) からの 3D オブジェクトのハイライトが奇妙な動作をすることでした。光源がカメラとまったく同じポイントにある場合、ハイライトは予想とは反対の方向に移動します。(したがって、オブジェクトを左に移動すると、ハイライトはオブジェクトの右端ではなく左端にも移動します。これは私が期待していたものです。)
そこで、問題をさらに絞り込むために、正方形のみをレンダリングする小さなサンプル アプリケーションを作成し、その正方形をカメラ位置 (原点) を中心に回転させます。これは、ライトが配置される場所でもあります。これにより、すべての正方形がカメラに直接面するようになり、完全に強調表示されます。結果は次のようになりました。
これらのアーティファクトは、投影によって境界線に歪みが生じたために発生するのでしょうか?
最初の画像では、球体とカメラの間の距離は約 20 単位で、球体のサイズは約 2 です。ライトをオブジェクトに近づけると、期待どおりにハイライトがよりよく見えます。 . 2 番目のイメージでは、正方形が配置されている半径は 25 単位です。Android 3.1でOpenGL ES 1.1を使用しています(ES 2.0のシェーダーで動作させるのに苦労していたため)
ここに私が使用しているコードの一部があります:
アクティビティが開始されたとき(onSurfaceCreatedで)、最初にライトを設定し、正方形を描くたびにマテリアルを設定しています。
opengl - サーフェス法線を宣言せずに OpenGL ライティングを使用することは可能ですか?
表面法線を宣言せずにオブジェクトの照明を宣言することは可能ですか?
私が喜んで行う手順は次のとおりです。
それは十分ですか、どこかにglNormalを配置する必要がありますか?