マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

Ruby

クォータニオンクラスを作ってみた

まだ途中だけどクォータニオンクラスを作ってみた。正しいかどうかは知らない。掛け算を間違えてました。 class Quaternion attr_reader :values #各要素のindex @@X = 0 @@Y = 1 @@Z = 2 @@W = 3 #クォータニオンの初期化を行う def initialize(x = 0, y = …

系が逆だった

MMDは左手系でOpenGLは右手系なので、Z軸の向きが逆だったため修正した。なんか向きが変だと思っていたが、このためだった。単純な原因だった

だいぶ変わった気がする

以前表示したときとだいぶ変わった気がする巡音ルカ。同じモデルなんだけど、シェーディングの差で別人のようだ

VMD読み込んで表情だけアニメーションしてみた

体を動かすのは大変そうなので、まずは顔だけアニメーション。時間と共に変化します。https://github.com/d-kami/MMD-on-Ruby

スフィアマップ実装

ちょっと見た目が変わったかな?わからん...無駄にcommitしまくり https://github.com/d-kami/MMD-on-Ruby

Lat式ミク対応版(?)をgithubへ

https://github.com/d-kami/MMD-on-RubyにLat式ミク対応版(?)をあげておきました。Lat式ミクはhttp://bowlroll.net/up/dl3934からダウンロードして、toonで始まる画像をMMD-on-Rubyのtoonフォルダへ、他のファイルはmodelフォルダに入れます。pmdファイルは…

RubyでもLat式ミクさん

まだ手抜きではあるが、RubyでもLat式ミクさん表示できた。ただし、github上のプログラムだと無理だけどね!頑張ってそのうち対応する予定

+αをしてみる

面白いプログラムがあったので+αをしてみた。変更点はシェーダととrubyの部分のlookを変えただけ。とりあえずスクリーンショットを載せる shaderは以下のようにした。まずは頂点シェーダ attribute vec3 position; void main(){ vec4 pos = gl_ModelViewProj…

更新!

今までシェーダでLambertを混ぜていたが、それをやめた。そして新たにtoonという画像を使うことに。前に比べて平面的になった気がするが、こっちの方が正しいのだろう。多分 https://github.com/d-kami/MMD-on-Ruby

久々のgithub

MMD on Rubyをgithubで公開しました。久しぶりにgithubを使ったので、なんか緊張してました。なにか忘れてそう https://github.com/d-kami/MMD-on-Ruby

真似してみる

今までLocationの書き方がアホだったと思ったので名前を変えた。というか連想配列使った。参考にしたのはこちらフラグメントシェーダーで遊ぶ 再び:リンク先間違えてたので修正。俺はわざわざHash.new()してるけどリテラルで書けるんだよなぁ。別にHash.new…

テクスチャ画像の読み込み

BMPファイルを読み込めば、MMDのデフォルトのモデルは表示できるので、Google先生に聞いたらRubyでBMPファイルをあつかうを発見した。さっそくダウンロードして、readを使い画像を読み込みこんだ。あとはpgetを使いOpenGLで扱える形式に変更すればOK。OpenGL…

変更

以前mmd.rbで、 @io.read(2 * count).unpack('S' + count.to_s) としていたところを @io.read(2 * count).unpack("S#{count}") に変更した。あと文字列を読み込む部分を @io.read(count).unpack('Z*')[0].toutf8() に変更した。A*でやってたけど、null文字が…

モデル描画

前回のエントリのmmd.rbと今回のmain.rbとシェーダを合わせれば一応MMDのモデルは描画できる。ただし、テクスチャを貼ってないので目が表示されない。怖い。なので正面から見ないようにしましょう。MMDデフォルトのモデルの初音ミク.pmdをmiku.pmdに名前を変…

材質まで読み込み

MMDの材質まで読み込んだ。とりあえず、ここらへんでOpenGLを使って、モデルの描画をやってみたい。以下ソースコードmmd.rb require 'kconv' class MMDModel attr_reader :header attr_reader :vertices attr_reader :face attr_reader :materials def load(…

RubyでPMDのヘッダ読み込み

なんとなくRubyでMMDを読み込んでみることにした。まずはPMDのヘッダのみ。MMDはこちら require 'kconv' class MMDHeader attr_reader :magic attr_reader :version attr_reader :name attr_reader :comment def load(io) @magic = io.read(3) @version = io…

Raspberry Pi上のRubyでOpenGLだと?

Raspberry Pi で OpenGL ES2 (1)を見てRaspberry PiでOpenGL ES 2.0が使えるんだ。へぇ〜と思いながらRaspberry Pi上で sudo gem install ruby-openglと叩いてみたがエラーになった。検索してみたら、raspi-openglを発見。まじかー

RubyでGLSLしてみた その2

シェーダーのコンパイルエラーの取得方法がわかった。こんな感じで書いたら見事エラーメッセージが例外に乗って飛んできた。 if !GL.GetShaderiv(shader, GL_COMPILE_STATUS) raise(GL.GetShaderInfoLog(shader)); end ついでにLambertをやってみた。3Dっぽ…

RubyでGLSLしてみた

RubyでOpenGLをやってみるとRuby/Qt/OpenGL で GLSL を使ってみるを参考にRubyでGLSLしてみた。シェーダーでは単純に赤く塗りつぶしてるだけなので立体感が無い状態だけど、そのうちLambertなりPhongあたりをやる予定。 。シェーダーのコンパイル時のエラー…

Ruby 1.9で楽天ブックス書籍検索API2を使ってみる

最近Rubyを触っていないので、リハビリがてらプログラムを作ってみた。以下のapp_idとsearchTitle、CA証明書ファイルの部分を書き換えれば動くはず require 'json' require 'net/https' app_id = 'app_id' searchTitle = 'Java' https = Net::HTTP.new('app.…

Railsの仕事が来そうなので

Railsの勉強中。あと、RubyでOpenGLをやってみるを見つけて、試したらできたので、RubyでOpenGLもやってみる

以前作ったパケットダンプをWindowsで

やろうとしたら、Socket初期化時にサポートしてねーよって怒られた。Ethernetフレームの読み込みはできないか。しかし、WindowsはIPレベルなら読み込めるようなことをどこかで見た気がするのでやってみたい。送信はできないようなことがかいてあったきがする…

ModR/Mバイト

今まで避けてきたけどついに登場したModR/Mバイト。演算でオペランドがレジスタ同士だったりメモリを使ったりするとオペコードにでてくる1バイトのデータ。8ビットの中に3つのフィールドがあり、mod、reg/opecode、r/mに分かれている。modが2bitでreg/ope…

Tk導入編 #15

エミュレータでHelloWorldを実行したかったんだけど画面描画をどうすればいいのかわからなかった。調べてみるとTkが使えそうだったので、Tkを使うことにした。そこでRuby/Tk環境を作るに従ってActive Tclをインストールした。しかし、require "tk"のところで…

条件分岐 その2 #14

今回はCMP命令とJB命令を使って条件分岐を行う。CMP命令は2つのオペランドを使い引き算を行って、フラグレジスタを更新する。ソースオペランドがデスティネーションオペランドより小さいとか大きいとか、同じ値だとかの情報をフラグレジスタに設定する。引…

条件分岐 その1 #13

今日はゼロフラグを利用した条件分岐を行う。本来ならCMP命令などを使うのだが今回は手抜きでADD命令でゼロフラグを更新する。読み込むプログラムはこちら add_je 内容は MOV AL, 0x00 ADD AL, 0x00 JE mov16 loop: JMP loop mov16: MOV AL, 0x10 JMP loop …

Intelのマニュアル #12

今回はx86エミュレータ作りに必須となるマニュアルを紹介する。http://www.intel.com/jp/download/index.htmにある IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、上巻: 基本アーキテクチャー IA-32 インテル® アーキテクチ…

フラグの更新 #11

今回はEFlagsの更新をメソッドを定義する。その前に前回のソースコードの修正がある。set_carryメソッドだが、これはset_carry!メソッドの間違いである。!を付け忘れた…まだRubyに慣れてないからだろう。それで本題に入る。EFlagsの更新だが、これは四則演算…

EFlags #10

今回はEFlagsクラスを定義する。EFlagsに関してはhttp://www.intel.com/jp/download/index.htmの『IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル、上巻: 基本アーキテクチャー』に載っている。ここに載っている全てを定義するわ…

あまりにもJavaだったため #9

今までメソッドの名前があまりにもJavaだったため、Rubyっぽく修正した。主にgetCode8のような名前だったのがget_code8になっている。また、オブジェクト自体に変更を加えるメソッドの最後に!を付けたり、まだ存在してないが真偽を返すメソッドは最後に?を付…