Git Product home page Git Product logo

glboost's People

Contributors

cx20 avatar dependabot[bot] avatar gitter-badger avatar iceman1722 avatar kjunichi avatar tai2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

glboost's Issues

Support Safari/iOS Safari browsers

やはり、Safariをサポートしたいですね。
VAO拡張をサポートしていないくらいでサポート切るのはよく考えるとひどい話なので。

VAOなど、現状のサファリがサポートしていない機能は使わないように実装を変更します。

Implement Shadow Mapping

シャドウマッピングの実装です。
いわゆるNVIDIA SHADOWを有効にするためにはどのような条件が必要なのかの調査・実験も必要になってくると思います。

Wireframe support

対象オブジェクトをワイヤフレーム表示できる機能が欲しい。
一応、現状でも、primitiveType を変更することで、疑似的にワイヤフレーム表示だが、ライブラリ標準機能として欲しい。
下記は疑似的にワイヤフレーム表示を行った例。

var geometry = new GLBoost.Sphere(10, 12, 12);
geometry._primitiveType = GLBoost.LINE_STRIP;

wireframe

Safari で glTF ファイルが読めないケースがある

以下のサンプルが、Safari (OSX / iPhone) だと表示されない。

[WebGL] GLBoost + glTF Loader を試してみるテスト(その1)
http://jsdo.it/cx20/G5nJ

glTF-Embedded (Data URI Scheme )のものがダメな感じがするが、Babylon.js だとSafari でも表示可能。

[WebGL] Babylon.js + glTFFileLoader を試してみるテスト
http://jsdo.it/cx20/yptM

以下は参考情報です。

<確認した環境(GLBoostによる表示結果)>
[OK] Windows 10 + Chrome 48.0.2564.109 m
[OK] Windows 10 + Firefox 44.0.2
[OK] Windows 10 + Microsoft Edge 25.10586.0.0(EdgeHTML 13.10586)
[OK] Windows 10 + 11.103.10586.0
[NG] Mac OSX 10.10.5 + Safari 601.2.7
[OK] Mac OSX 10.10.5 + Firefox 38.0
[OK] Mac OSX 10.10.5 + Chrome 47.0
[NG] iPhone 9.2.1 + Safari 601.1

<使用したモデルデータ>

■ glTF/sampleModels/box/glTF-Embedded/
https://github.com/KhronosGroup/glTF/tree/master/sampleModels/box/glTF-Embedded

Create GLBoost Official Logo

Let's create GLBoost Official Logo!

ロゴを作りたいです。

かっこよくて、それでいてギーク向け(カスタマイズ性高い)ようなことがわかる感じがいいですかねー。

そもそもどうやって作ったらいいですかねw プロに頼むのがいいんでしょうかやはりw

Shadow support

影の表現が出来るようにして欲しい。

glboost
glboost

three.js
threejs

Bounding Box support

Mesh 表示時に、Bounding Box と XYZ の矢印を出す機能があると便利だと思いました。

bounding box

Dynamic shader change support.

動的にシェーダを変更する機能。
経過時間に応じて、SimpleShader → HalfLambertShader → PhongShader のようにシェーダを変更するようなサンプルを実現する。

色指定を別の形式でも可能なようにして欲しい

現在、clearColor の指定だけ、色の指定方法が異なっている。
他と同様に、Vector 形式で指定できても良いのでは?

var renderer = new GLBoost.Renderer({
    canvas: canvas,
    clearColor: {red: 0.0, green: 0.0, blue: 0.0, alpha: 1}
});

var renderer = new GLBoost.Renderer({
    canvas: canvas,
    clearColor: new GLBoost.Vector4(0.0, 0.0, 0.0, 1.0)
});

また、色の指定方法として、別の書き方も出来ると便利そう。

new GLBoost.Cube(..., new GLBoost.Vector3(1,0,0));
new GLBoost.Cube(..., {red: 0.0, green: 0.0, blue: 0.0});
new GLBoost.Cube(..., "#000000");
new GLBoost.Cube(..., 0x000000);
new GLBoost.Cube(..., [0.0, 0.0, 0.0]);

Cylinder geometry support

円柱ジオメトリがあると、色々応用できそうです。

  • 円柱型のお菓子
  • ピラミッド
  • 飛行石
  • 六角形の箱

image

image

image

extends plane mesh class

Plane(平面)クラスを拡張します。

メッシュの細かさ(分割数)も指定できるようにします。

Meshクラスのdrawメソッド内の、毎回のuniform変数の値設定を、キャッシュなどで頻度を減らす

例えば、以下のコード部分とかです。

GLBoost/src/js/Mesh.js

Lines 169 to 182 in dff2563

if (viewMatrix && projectionMatrix) {
var mvp_m = projectionMatrix.clone().multiply(viewMatrix).multiply(this.transformMatrix);
gl.uniformMatrix4fv(glslProgram.modelViewProjectionMatrix, false, new Float32Array(mvp_m.transpose().flatten()));
}
if (typeof glslProgram.modelViewMatrix !== "undefined") {
var mv_m = viewMatrix.clone().multiply(this.transformMatrix);
gl.uniformMatrix4fv(glslProgram.modelViewMatrix, false, new Float32Array(mv_m.clone().transpose().flatten()));
}
if (typeof glslProgram.invNormalMatrix !== "undefined") {
var in_m = mv_m.toMatrix33().invert();
gl.uniformMatrix3fv(glslProgram.invNormalMatrix, false, new Float32Array(in_m.flatten()));
}

毎回設定しているので、そりゃ遅いです。是非ともdirtyフラグとか使って、頻度下げたいですね。

Want to match the data array of the cube to the standard specification.

Cube のデータ配列を標準的な仕様に合わせてほしい。

  • GLBoost の Cube のデータ配列と他のライブラリのデータ配列を比較したところ並び順が異なっていた。
  • その為、UV 座標データ(texcoord)などを他のサンプルから移植しようとした場合に、想定外のマッピングがされてしまう。
  • 標準的な仕様があれば、そちらに合わせてほしい。

<GLBoost の例>

■ glboost.js
https://github.com/emadurandal/GLBoost/blob/master/src/js/primitives/Cube.js

// Top    : v0-v1-v2-v3
// Bottom : v4-v5-v6-v7
// Front  : v7-v6-v2-v3
// Back   : v4-v5-v1-v0
// Right  : v5-v6-v2-v1
// Left   : v4-v7-v3-v0
// 
//         [0]------[1]
//        / |      / |
//      [3]------[2] |
//       |  |     |  |
//       | [4]----|-[5]
//       |/       |/
//      [7]------[6]
//

<Mozilla の「WebGL チュートリアル」や「WebGL Lesson」の例>

■ WebGLチュートリアル
https://developer.mozilla.org/ja/docs/Web/API/WebGL_API/Tutorial/Creating_3D_objects_using_WebGL

■ WebGL Lesson
https://sites.google.com/site/hackthewebgl/learning-webglhon-yaku/the-lessons/lesson-4

■ glCubic.js
https://github.com/doxas/glcubic.js/blob/master/src/gl3Mesh.js

// Front  : v0-v1-v2-v3
// Back   : v4-v5-v6-v7
// Top    : v2-v3-v7-v6
// Bottom : v0-v1-v5-v4
// Right  : v1-v2-v6-v5
// Left   : v0-v3-v7-v4
// 
//         [7]------[6]
//        / |      / |
//      [3]------[2] |
//       |  |     |  |
//       | [4]----|-[5]
//       |/       |/
//      [0]------[1]
//

Implement Particle Class

パーティクルの高速描画を行うためのMesh系クラス「Particle」クラスを作ろうと思います。

  • ジオメトリインスタンシング対応
  • GPUによる座標更新対応
  • GPU実行の衝突判定(WebGL2.0限定)

Transparent support

箱を半透明にしたいが、ボールが隠れて見えなくなっている。

GLBoost + Oimo.js で箱にボールを入れてみるテスト(改)
http://jsdo.it/cx20/AndF

glboost
glboost

three.js
threejs

ObjLoader class supports string contents of mtl file as argument

JavaScript実行Webサービスの中には、jsdo.it など、ファイルのアップロードに対応しているものがあります。
しかし、例えばjsdo.itの場合だと、アップロードしたファイルのファイル名はハッシュ化を経て、ユーザーが予測がつかないものになります。

これは、objファイルをロードするにあたって問題になります。objファイルは同名のmtlファイルを参照したり、mtlファイルがさらに各種テクスチャ画像ファイルを参照したりしているからです。

そこで、jsdo.itなどのサイトでもobjファイルを読み込めるように、ObjLoaderクラスを以下のように改修したいと思います。

  • ObjLoaderクラスのloadObjメソッドに、新たな引数として、mtl文字列を追加。
  • mtl文字列とは、mtlファイルの内容に相当するJavaScript文字列。
    (ユーザーは、本来のmtlファイルが参照しているテクスチャ画像ファイルをjsdo.itにアップロードする。そうして得られたハッシュ化済みのテクスチャ画像URLを新しいmtlファイルの内容として記載し、その新しいmtlファイルの内容をJavaScript文字列としてObjLoaderクラスのloadObjメソッドに渡せば良い)

Processes lighting with local coordinates instead of camera coordinates (excluding bump mapping).

今までなんとなくカメラ座標系でやってんたんですが、やっぱり無駄が多くてメリット少ないですね。
いっそもうローカル座標系でやってしまおうと思います。
ライトベクトルとかをCPU側で一度ローカル座標系にしてしまえば、もう頂点シェーダで行列変換しなくて良くなりますからね。行列関連のUniform変数の設定の必要もなくなります。メリットばかりな気がする。
(もちろん、バンプマッピングをするときは頂点座標系である必要があるので、その時は頂点シェーダで行列変換する必要がありますが)

Fix GLBoost to be able to use the WebGL Insight chrome extension

現在、GLBoostをGoogleのWebGL Inspectorエクステンションを使って調べようとすると、エラーが起きます。
WebGLの拡張命令を使っているとエラーになるのではないか? と疑っています。
拡張命令への依存を下げる方向で、解決を図ろうと思います。

Could not read a texture of the Data URI Scheme form in Safari.

Safari で Data URI Scheme 形式のテクスチャが読み込めない
Safari で下記のようにテクスチャを読み込もうとするとエラーとなる。

var texture = new GLBoost.Texture('data:image/jpeg;base64,/9j/4AA...');

実行結果

Cross-origin image load denied by Cross-Origin Resource Sharing policy.

glTF ファイルの Embedded ファイル形式の時も、同様のエラーが出ていた為、恐らく同様の対策が必要と思われる。

参考:_loadBinaryFile()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.