OpenGL

新たにPMD/VMDビューワ発見

http://r13n.spaces.live.com/ OpenGLでbulletの物理演算も組み込んである。 さっそく試してみたんだが、 illegal instruction が出てしまった。sse乗ってないとbulletがダメらしい・・・orz bulletでsseオフにする方法を探すかLinuxで動かすかどっちかだな。

スキニングその3

MIKOTO式のMQOをBVHモーションで動かす実験は中断することにした。 モデルとモーションで参照するボーンが一致していない場合のスキニングは、スキニング以外のところで難易度が高いことが判明。 命名規則による右左の自動展開だとか、大きさが違うとか、肩…

行列関連のgl関数をなるべく使わないでやってみる

スキニングの都合上glRotatefやglTranslatefを使わずに変換を実装する必要があるので下準備にこれらをglMultMatrixfで置き換えるテストコードを書いてみた。 さらにOpenGL3に準拠しようと思うとglMultMatrixfすらdeprecatedなので計算した行列をvertex shade…

スキニングその2

ついでなので夏前にやりかけだったMIKOTO方式もおさえることに。 今回の目的にフィットする素体をこちらからいただいてきました。 http://witchcraft-jp.sakura.ne.jp/mm/contents/mikoto_tips4.html 引き続き、 1. 各頂点のウェイトを計算する(Mikoto方式の…

スキニング

BVHの情報を収集していたらよい講座を発見。 http://www.cg.ces.kyutech.ac.jp/lecture/cg2/ BVHビューワがソース付きであるのでこれを足がかりにスキニングの理解を進めることができそうだ。とりあえず 1. ボーンのキーフレームアニメーション(BVH オイラー…

procedual sky

ソースコード付きの説明を発見。 http://norsetto.890m.com/sky.phpあとで読む。 ちなみにdrawstuffの地面と空は単なる大きな四角ポリゴンだったw。 C++化しながらglutに乗せてみた。 skydomeの中にshaderで描画している。 shaderをこれから読む。

glutで自由落下

glutで実装してみた。 drawstuffが無いとなんとも味気ない画面に。 あれは、他にもマウス操作とかテクスチャ貼ったりと意外と機能あるしな。 z-upを止めてy-upに変更。 状態更新は、タイマーで定期的に呼ぶようにしてみた(ちゃんとFPSを維持するようにはして…

骨選択

重なった骨が見にくいので八角形ボーンにしてみた。 さらに変な処理をして骨の親子関係がおかしかったところを整理した。 PMDは素直なデータ構造なので余計なことをせずにまっとうに組み立てればOK。 八角形にしたついでに、OpenGLのSELECT_MODEで骨を選択で…

テクスチャを書き換える実験

freetypeで読み込んだフォントを使ってcairoでテクスチャを書いてOpenGLで使ってみるところまで。 適当に半透明とか丸い角を使うと見栄えがいい感じに。 cairo周りはこの辺りで切り上げてmikoto形式のモーションの作業に戻ろう。 次は、アンカーから対象頂点…

コンテキストメニューを作ってみた。

cairoでの日本語問題がクリアされたので 練習にOpenGLの中にコンテキストメニューを作ってみた。機能的には予定どおりのものが実装できたが テクスチャの管理なんかを簡潔に記述する方法を編み出す必要があるな。あと、 選択状態を変えるときにテクスチャを…

ピクセル位置を指定して描画する

2次元な文字情報など(いわゆるHUDか)を描画するときに 必要になるがよく忘れるのでメモ。 // 座標系を一時的に変更 setupView_(viewportWidth, viewportHeight); glPointSize(5.0f); glBegin(GL_POINTS); glColor3f(1.0f, 0, 0); // 左上原点のピクセル座標…

cairoの日本語テスト

Linuxでは何の問題もなし。 Windows+VCの環境ではマルチバイト文字列を出力することができなかった。 多分リテラルはutf8でいいと思うのだが、 フォントの指定がよろしくないのだろうか。 cairoがどうやってフォントを引っ張って来ているのかあたりから 調べ…

復習中

SDLは普通にglutの代わりに使えるなぁ。 event loopを自分で書かねばならないが むしろ変なglobal変数を使わないで済む分こちらの方がやりやすいかもしれない。 cairoでテクスチャを生成する実験。 ここら辺のコードを混ぜた http://book.geocities.jp/gtkmm…

SDL_WINDOWIDでOpenGLが動いた

いったんwxWidgets+wxGLCanvasを使うことにしたのだが、 今度はLinuxのwxGTK側でSegmentationFault発生。 じつは、うちのGentooでは動かないことが発覚した。再考した結果、 SDL_WINDOWIDがWindowsでうまくいかないところを追求する方向に転進。 SDLのソース…

glFrustumの解読

追記: 2010/3/24 書いたときの理解が足りないため意味不明なところがある。 少し書き直した。 http://gunload.web.fc2.com/opengl/tutorial/glfrustum.html glFrustumが何をしているかというと View座標(視点を原点として視線方向がz軸の負の方向を向いてい…

glFrustumとgluPerspective

OpenGLの透視投影の指定はhttp://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml (glFrustum)で行う。 glFrustum(left, right, bottom, top, near, far) もうひとつこれの簡易版としてhttp://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml (gluP…

あらためて行列の動作を確認

たまに使うと細かいことをいろいろ忘れていて難渋するので確認しておくことにした。まず、前提として座標系は右手系。 (DirectXは逆だそうな)行列は列優先(row-major)で左から行列を、右から列ベクトルをかけると考える。 (DirectXは逆だそうな)さらに行列が…

トゥーン風味

PhongとかBlinnをとばしてトゥーンをやってみた。 意外と簡単。 トゥーン用テクスチャを動的に生成したり 陰の合成をグレイスケールの乗算じゃなくて PhotoShopの焼き込みみたいな合成ができるとよろしいかもしれない。 さらにはシャドウが欲しいところであ…

少しずつ試してみる

最小限のシェーダ vertex shader void main(){ gl_Position = ftransform(); gl_FrontColor = gl_Color; }頂点シェーダではgl_Position(スクリーン座標に変換された頂点座標。vec4)を出力するのは必須。 gl_FrontColorはフラグメントシェーダのgl_Colorに渡…

GLSL開始

glewpyのサンプルから vertexShaderとfragmentShaderのソースだけを変更して試すベースを作成。 これからGLSLの中身に入る。 #!/usr/bin/env python # -*- coding:utf-8 -*- import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT …

vc8とglewとpython2.5とpyopenglがインストール済みの環境でglewpyを動かす手順

pyrexのインストール http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ からちょっと古い Pyrex-0.9.4.1.tar.gz をゲットしてきて解凍。 DOSプロンプトで中に入って、 > setup.py install glewpyのインストール glewpy-0.7.4.tar.gz を解凍。 DOS…

PyOpenGLでGLSL

http://glewpy.sourceforge.net/ を動かすのに成功。 かなり頓挫しかけでCでやろうかと思ったのだが、 いちおうvertex shaderとfragment shaderの動作まで確認できた。

透過に対応

思ったより大変だ(画像のほっぺのぐるぐるが透明ぶぶん)まずmqo形式の透明は、 模様画像にアルファチャンネルがついているもの(pngとかtgaで)と、 透明にグレイスケール画像(とは限らないが)を指定する2種類がある。ひとつめに対応するのは簡単で、 glEnabl…

mqoを読み込むサンプルを作ってみた

wxPythonでmqoビューワみたいのを作ってみた。操作はメタセコ風味。 去年書いたソースを切り貼りして作ったので一部余計に手間取ってしまったがほぼ完成。 透過テクスチャ以外の部分は予定していたところまでできたので公開してみる。 ソースはさすがに長く…

PyQtサンプル

情報収集をしつつPyQtの使用を開始。検索するときはむしろPyQt4とすべきかも。 とりあえずOpenGLの使い方を調べてみた。 pyqtのOpenGLサンプルhellogl.pywのコードを減らしながら解読。 QGLWidgetクラスがOpenGLを扱うクラスでこれを継承して、下記のメソッ…

なんか時々重い

WindowsXP上のOpenGLがなんか描画に1秒以上かかって引っかかる時がある。 ハードウェア的な問題かもしれない。 うまく動いているときはいいのだが、一回引っかかると形状の複雑さに関わらず遅まる。 Blenderでもメタセコでもglutでも症状が出てるので環境の…

Window座標で位置指定

glLoadIdentityだとGL_PROJECTIONで左下が(-1, -1)で右上が(1, 1)であったのを gluOrth2D(0, window_width, 0, window_height)で調整したらできた(左下原点)。 def printString(text, x, y): global fontOffset, window_width, window_height glMatrixMode(G…

左ドラッグで回転して、右ドラッグでドリーするところまで

だいぶ思い出してきた。 昨日作ったフォント表示を使ってみたが Windowサイズを変更すると行間隔が変わってしまっていまいちなことが判明。 単純にglRasterPosで指定するだけではだめか。 なんか位置を固定する方策が必要だ。 あとglutだとマウスホイールが…

ビットマップファイルからASCIIフォントを読み込む

16進数の配列になっていたところをファイルから読み込むように改造してみた。 はじめはネットから適当にダウンロードしてくるつもりだったのだが、 何か日本語フォントを全部読み込むとか、アルファ値付きのテクスチャフォントなど うちのやりたいことにフィ…

フォントを表示してみる

OpenGLプログラミングガイドの8章の例をpythonで書いてみた。 ディスプレイリストとおを使うらしい。 ASCII全文字をカバーすればビットマップフォントを用意するのが面倒な時には使い手があるかも。 フォントはどこまで対応するか微妙に悩ましい。 ビットマ…