生成AIを活用したSaaSサービス提供企業

  • Company
    • Company
    • 会社概要
    • グループ会社
  • Service
  • Work
  • News
  • Recruit
  • Blog
  • Contact

ブログBlog

  • ALL

  • お知らせ

  • 技術/デザイン/制作

  • ベトナム

  • ごはん

  • 日常/プライベート

  • WebGL+HTML5で3DCGを勉強してみた! Part2

    どうも。営業部の伊藤です。

    前回のブログの続編です。

    以下の見慣れないエレメントタイプはバーテックスシェーダ(頂点シェーダ)とフラグメントシェーダ(ピクセルシェーダ)という点まで書きました。

    「x-shader/x-vertex」
    「x-shader/x-fragment」

    シェーダはSTEP3のタイトル(シェーダを生成&コンパイル)にも記載しているようにプログラム内でコンパイルして利用するため、コンパイルするまでは単なる文字列しかありません。
    そのため、今回はHTML内に記載しておりますが、JavaScript内部で文字列として宣言、管理する形でも問題ないです。
    該当の属性はHTMLで定義された正式なエレメントではないため、一般的なブラウザでは理解されず無視されます。
    注意しなければいけないのが、scriptタグの中身がJavaScriptと誤認されないようにしなければいけないという点です。
    それを回避するため、type属性を使って各々のシェーダを宣言しています。

    次はシェーダ内の記述を見てみます。
    言語はGLSL(OpenGL Shading Language)で実装しています。
    GLSLは名前のとおりOpenGLと親和性がある、C言語ライクな言語となります。

    ■バーテックスシェーダ(頂点シェーダ)

    attribute vec3 vertexPosition;
    attribute vec2 vertexTexture;
    uniform mat4 vertexMatrix1;
    uniform mat4 vertexMatrix2;
    varying vec2 textureCoord;

    void main(void) {
    gl_Position = vertexMatrix1 * vertexMatrix2 * vec4(vertexPosition, 1.0);
    textureCoord = vertexTexture;
    }

    ■フラグメントシェーダ(ピクセルシェーダ)

    precision mediump float;
    uniform sampler2D fragmentTexture;
    varying vec2 textureCoord;

    void main(void) {
    gl_FragColor = texture2D(fragmentTexture, vec2(textureCoord));
    }

    attribute、vec3、vec2、uniform、mat4、varyingなど様々な単語が出てきましたね。
    まず、開発経験者の方であればある程度想像できると思いますが、先頭部分は修飾子(attribute、uniform、varying)、その次はデータ型(vec3、vec2、mat4)、最後は任意の変数名(vertexPositionなど)となります。
    修飾子、データ型について纏めます。

    ○attribute
     バーテックスシェーダ(頂点シェーダ)専用の修飾子です。
     attribute修飾子で宣言された変数はWebGLとシェーダ間で頂点情報を橋渡しする(シェーダ側が受け取る)ための変数となります。
     WebGL側で同じ名前の変数に頂点情報を設定しておき、シェーダ側に情報を渡します。

    ○uniform
     バーテックスシェーダ(頂点シェーダ)、フラグメントシェーダ(ピクセルシェーダ)の両方で利用できる修飾子です。
     attribute同様に、uniformで宣言された変数はWebGL側から情報を渡すための変数となります。
     ではattributeと何が違うのか?
     attribute修飾子は3Dオブジェクトの頂点に関する情報を受け渡すための専用修飾子です。
     逆にuniform修飾子は「全頂点に対して一律に処理される情報」を受け渡すための修飾子となります。
     要約すると、3Dを描画しているcanvas上全体に情報を受け渡す場合に利用します。
     STEP6(座標変換行列を生成&通知)で詳しく説明します。

    ○varying
     バーテックスシェーダ(頂点シェーダ)、フラグメントシェーダ(ピクセルシェーダ)の両方で利用できる修飾子です。
     前回のブログにも書きましたが、フラグメントシェーダ(ピクセルシェーダ)が着色内容を計算、決定するには頂点関連の情報が必要になります。
     このバーテックスシェーダ(頂点シェーダ)とフラグメントシェーダ(ピクセルシェーダ)の橋渡しをするための変数をvaryingで定義します。

    ○vec2、vec3、mat4
     vec(数値)は浮動小数点のベクトル型です。
     数値には1~4が設定でき、添字によりベクトル要素数が変わります。
     vec2 => 2Dベクトル
     vec3 => 3Dベクトル
     vec4 => 4Dベクトル

     mat(数値)は浮動小数点の正方行列です。
     数値には2~4を設定でき、添字により正方行列数が変わります。(matは恐らくマトリックスの意ですね)
     mat2 => 2×2
     mat3 => 3×3
     mat4 => 4×4

    attributeで宣言したvertexPositionやvertexTexture、uniformで宣言したvertexMatrix1、vertexMatrix2はSTEP6(座標変換行列を生成&通知)で値の受け渡しを実施し、
    varyingで宣言したtextureCoordは頂点関連情報を受取後、フラグメントシェーダ(ピクセルシェーダ)にデータを受け渡しています。

    シェーダの宣言部(WebGLとのデータ連携方法や受皿、シェーダ間の連携方法)は以上となり、次はシェーダの処理部です。
    ご覧のとおり、バーテックスシェーダ(頂点シェーダ)、フラグメントシェーダ(ピクセルシェーダ)共にmainという関数が定義されています。C言語ライクですね。
    必ずmainという関数を定義し、そのなかに処理内容を記述します。
    そして、バーテックスシェーダ(頂点シェーダ)ではgl_Positionという組込み変数に頂点データを渡し、フラグメントシェーダ(ピクセルシェーダ)ではgl_FragColoという組み込み変数にデータを渡します。
    ※頂点データは必須となりますが、フラグメンテーションは必須ではないです。

    変数宣言(WebGLとの連係用受皿)、シェーダ間連携内容の実装、計算処理内容の実装などシェーダ自体の宣言が完了したため、次はWebGLで該当のシェーダをコンパイルします。
    まず、getElementByIdでHTML内のバーテックスシェーダ(頂点シェーダ)、フラグメントシェーダ(ピクセルシェーダ)エレメントを取得します。

    var shader;
    var shaderElement = document.getElementById(id);
    if (!shaderElement) {
    return null;
    }

    その後、エレメントタイプをチェックし、タイプ毎に該当のシェーダ生成します。
    ここで初めてシェーダを生成(createShader)しています。

    switch(shaderElement.type){
    case “x-shader/x-vertex”:
    shader = gl.createShader(gl.VERTEX_SHADER);
    break;
    case “x-shader/x-fragment”:
    shader = gl.createShader(gl.FRAGMENT_SHADER);
    break;
    default:
    return null;
    }

    次に、HTML内で宣言した変数、連携内容、計算処理などの文字列(ソース)を上記シェーダに割り当て(shaderSource)るため、firstChildでエレメント内の文字列を取得します。
    一通りの文字列取得が完了したら最後にコンパイル(compileShader)です。

    //子ノード取得
    var source = “”;
    var childNodes = shaderElement.firstChild;
    while (childNodes) {
    if (childNodes.nodeType == 3) {
    source += childNodes.textContent;
    }
    childNodes = childNodes.nextSibling;
    }
    gl.shaderSource(shader, source); // ソース割り当て
    gl.compileShader(shader); // コンパイル

    これでSTEP3の「シェーダを生成&コンパイル」は終わりです。
    &
    今回のブログも終わりです!!

    細かなところは端折りながら書いているつもりですが…想定外に長文&長期化しております。。。
    まだまだSTEP3ですが、STEP4以降も頑張って連載していきますので宜しくお願いします。

    ではでは。

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    伊藤 康平投稿者 伊藤 康平

    投稿日: 2012/11/26

    カテゴリー 技術 / デザイン / 制作
  • ベトナム人エンジニア

    弊社グループ会社である、バイタリフィアジアには優秀なエンジニアがたくさんいます。また、ベトナムという国全体で見ても、優秀なエンジニアがたくさんいます。

    理由として挙げられるのが、ベトナム政府による積極的なIT振興策です。国がITや数学教育に力を入れていることもあり、数学論理やロジカルな思考に長けたプログラマー向きの人材が多いのが特徴です。性格も日本人に似ており、勤勉で協調性があり手先が器用といった特徴があります。ベトナムの平均年齢も27歳なので、若くて優秀な人材を豊富に確保できるのです。

    そういった施策もあり、ソフトウェアの市場規模も毎年2ケタの拡大を続けています。現状、「産業」においてはまだまだ未成熟な国かもしれませんが、今後どんどん豊かになっていくでしょう。そうすればベトナム独自のおもしろい産業が育ってくるかもしれません。その際に重要になってくるのがデジタルテクノロジーだと思いますが、これからのベトナムの更なる成長に興味があるのと同時に、追いつけ追い越せで迫ってくる新興国の盛り上がりに怯えつつ、頑張っていかなければと思ったりしています。

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    アバター投稿者 staff

    投稿日: 2012/11/222012/11/26

    カテゴリー ベトナム / オフショア開発
  • そうだ、アプリの研究しよう vol.1

    この間、友人から「会社の紹介写真なんであんなカワイイポーズなの?w」って突っ込まれた坂田です。

    ギャグのつもりのポーズなので、指摘されてうれし恥ずかし。

    隣の銅像の真似してるんですよろしくどーぞ!

    さて前回に引き続き、お茶の間を楽しませたいと思います(‘∀`)
    Vol.0で告知しましたように、第一回目は以下のテーマで書いていきます!

    ============================
    vol1.じぶんインサイト。
    なぜ人はアプリをダウンロードし、アプリを使い続けるのか。
    ”削除”されないアプリとは何か。をまずは自分の事例から考えます。
    ============================

    “そうだ、アプリの研究しよう vol.1” の続きを読む

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    アバター投稿者 staff

    投稿日: 2012/11/222012/11/29

    カテゴリー 技術 / デザイン / 制作
  • オフショア開発PRESSを読んで

    こんばんは。ベトナムでオフショア開発を提供している会社バイタリフィの板羽です。

    今日はオフショア開発PRESSという本について書きたいと思います。

    オフショア開発PURESS

    オフショア開発プレス

    私自身、これまでこの手の本を好んで読んでいませんでしたが、ようやく手に取ることができました。

    “オフショア開発PRESSを読んで” の続きを読む

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    板羽 晃司投稿者 板羽 晃司

    投稿日: 2012/11/212021/02/15

    カテゴリー ベトナム / オフショア開発
  • ベトナムグルメ 初級

    本日は昼間に「まにん」恵比寿店で昼ご飯を食べました。(蕎麦屋です。)
    僕が食べたのは「黒豚つけめんそば(またはうどん) 特盛り」520gあります。
    冷たい麺を黒豚入りのあったかい汁で食します。汁に刻み玉ねぎを薬味として入れます。

    アプリ開発会社員が食べた蕎麦
    味は抜群においしかったです!ただ特盛り頼んだんで、けっこうきついです。
    そばなんでペロッと食べれるかと思っていたが、味に飽きて中々進まなかった。。
    普通の成人男性は大盛り位で満足できるはずです!
    自分の飯の話をしましたが、ベトナムに会社がありますので、ベトナムのご飯について記述しようと思う。今回はメジャーな料理を紹介します。
    ベトナムと言えばみなさん一番に思い浮かべるのは「フォー」やっぱりでしょう。

    ベトナムのフォー

    鶏や牛から出汁を取った透明なあっさりしたスープにコシのない米麺を入れ、鶏肉や牛の薄切り肉、肉団子などをトッピングした料理。現地でも食べましたが、さらっとして食べやすく美味しいです。パクチーのにおいがキツイので僕はパクチーを避けました。個人的にはベトナムエースコックのフィーの即席麺が一番おいしかったです。

    また日本でもよく見かけるご飯、「バインミー」

    ベトナムのバインミー

    柔らかめのフランスパンに切り込みを入れ、バター、レバーペーストなどのパテを塗り、甘酢づけの野菜、パクチー、輪切りの赤唐辛子、ハムなどをはさみ、ヌックマムを振り掛けたバーガー。これはチョコクロのサンマルクにもあります。これは食べやすいです。特に日本においているバインミーは日本向けになっていて普通に美味しかったです。バーガー感覚でいけます。

    あまり知られていない「バインセオ」

    ベトナムのバインセオ

    米粉とココナッツミルクをベースにした生地に、豚肉、もやし、海老、緑豆、あるいは鶏肉やキノコ、タマネギなど、好みのものをたっぷりと入れて大きめの専用フライパンで薄皮に焼き上げた料理。これは不思議な味でした。これは僕にはあわなかったです。生地が甘い感じなので、どうも具に合わない感じでした。恐らくマヨネーズや辛子なども入れると食べやすくなると思います。写真の通りチリソースのようなものを付けるよりマヨネーズが合うと思います。今度、トライしてみます。

    日本にもベトナム料理店はけっこうあると思いますので、みなさんも是非食べてみてください。パクチー入った料理が多いので、嫌いな方は抜くのがお勧めです。

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    山下 祐典投稿者 山下 祐典

    投稿日: 2012/11/212017/01/23

    カテゴリー ベトナム / オフショア開発
  • … か 。。。 か 、、、か

    ブログやチャットやメールを書いていて、
    戸惑いの表現をする時に、
    いわゆる「3点リーダー」を使うことがあると思いますが、
    どういうタイプを使っていますか?

    ・そんなばかな…
    ・そんなばかな・・・
    ・そんなばかな。。。
    ・そんなばかな、、、

    他にも、2点にする人や使い方は様々ですが、
    個人的に最近使う頻度が多いのは、
    「。。。」
    ですね。

    少し前までは「…」を使っていましたが、
    「…」はゴルゴ13が多用することでも分かるように、
    ちょっとドライでエッジのきいた印象がありますね。
    ということで、少し前まではドライな男を気取っていたんですが、
    もうちょっと和やかさを出していこうと思い
    「。。。」が増えています。

    「…」と「・・・」では、
    俄然「…」を使いますね。
    「。。。」と「・・・」では文字幅は大きく変わらないのですが、
    なぜか「・・・」は気になります。
    おそらく「…」が一文字で収まる選択肢があるのに、
    3文字分も使ってしまうのが無駄に感じるのかと思います。

    「、、、」については、
    たまに見かけますが、個人的にはあまり使いません。
    「、」自体が文末ではなく文中の切れ目の使い方なため、
    3点リーダーのフェードアウト具合が、
    うまく尻すぼまないと感じるのかと思います。

    こんなに点ばっかり出てくる文章を書いたのは初めてですが、
    全て個人的な見解です。
    皆それぞれの使い方があると思いますし、
    TPOで使い分けたりもするでしょう。
    上手に使って、
    気持ちのコミュニケーションをうまくとりたいですね。

    このエントリーをはてなブックマークに追加
    Share on Tumblr
    Tweet

    アバター投稿者 staff

    投稿日: 2012/11/21

    カテゴリー 日常 / プライベート

投稿ナビゲーション

前のページ ページ 1 … ページ 355 ページ 356 ページ 357 … ページ 556 次のページ