Androidアプリ開発 OpenGL 光源の色 [Android OpenGL]
光源の色
実は、光源にも色を設定することができる。太陽光線は、「白」。電球は「黄色っぽい」。蛍光灯は「青っぽい」といったことをシミュレートできるわけです。
まぁ、やってみた方がわかりやすいであろう。
光源の色は、glLightfvで指定できる。
三角形君たちの色は、グレーにしてみた。アンビエントもディフューズもスペキュラもみなグレー。光源の色は、glLightfvで設定する。このとき、光源番号を第一引数で指定する。光源の色にもアンビエントもディフューズもスペキュラがある。第二引数で、色属性の種類を指定する。後はglMaterialfvと同じ。
光源のアンビエントを赤、ディフューズを青、スペキュラを黄色にしてみた。
三角形はグレーなので、色は付いていない。光源の色が物体に反映されている。アンビエントが強く出ているときに、光源のアンビエントである「赤」が出る。
スペキュラー、ディフューズも同様ではあるが、スペキュラーの黄色は出にくい。ディフューズと混じっている感じだ。
サイト内を検索
実は、光源にも色を設定することができる。太陽光線は、「白」。電球は「黄色っぽい」。蛍光灯は「青っぽい」といったことをシミュレートできるわけです。
まぁ、やってみた方がわかりやすいであろう。
光源の色は、glLightfvで指定できる。
// レンダラークラス class OpenGLRenderer implements Renderer { float lightpos[] = {0.0f, 0.0f, 4.0f, 0.0f}; float red[] = {1.0f, 0.0f, 0.0f, 1.0f}; float green[] = {0.0f, 1.0f, 0.0f, 1.0f}; float blue[] = {0.0f, 0.0f, 1.0f, 1.0f}; float white[] = {1.0f, 1.0f, 1.0f, 1.0f}; float gray[] = {0.5f, 0.5f, 0.5f, 1.0f}; float yellow[] = {1.0f, 1.0f, 0.0f, 1.0f}; @Override public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // ライティングをON gl.glEnable(GL10.GL_LIGHTING); // 光源を有効にして位置を設定 gl.glEnable(GL10.GL_LIGHT0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightpos, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, red, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, blue, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, yellow, 0); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); gl.glPushMatrix(); // マトリックス記憶 gl.glTranslatef(1f, 0, -3f); gl.glRotatef(angle, 0, 1, 0); gl.glEnable(GL10.GL_CULL_FACE); gl.glCullFace(GL10.GL_BACK); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, gray, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, gray, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, gray, 0); gl.glMaterialf(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, 100f); model.draw(gl); gl.glPopMatrix(); // マトリックスを戻す // ふたつめの描画 gl.glPushMatrix(); // マトリックス記憶 gl.glTranslatef(-1f, 0, -3f); gl.glRotatef(angle, 0, 1, 0); gl.glCullFace(GL10.GL_BACK); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, gray, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, gray, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, gray, 0); gl.glMaterialf(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, 20f); model.draw(gl); gl.glPopMatrix(); // マトリックスを戻す angle += 0.5; // 回転角度は最後に計算 }
三角形君たちの色は、グレーにしてみた。アンビエントもディフューズもスペキュラもみなグレー。光源の色は、glLightfvで設定する。このとき、光源番号を第一引数で指定する。光源の色にもアンビエントもディフューズもスペキュラがある。第二引数で、色属性の種類を指定する。後はglMaterialfvと同じ。
光源のアンビエントを赤、ディフューズを青、スペキュラを黄色にしてみた。
三角形はグレーなので、色は付いていない。光源の色が物体に反映されている。アンビエントが強く出ているときに、光源のアンビエントである「赤」が出る。
スペキュラー、ディフューズも同様ではあるが、スペキュラーの黄色は出にくい。ディフューズと混じっている感じだ。
サイト内を検索
2012-04-10 13:05
nice!(0)
コメント(0)
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0