サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
oshiro.bpe.es.osaka-u.ac.jp
[お知らせ]IEだとリンク先が見つからない場合があります.その場合はGoogle ChromeあるいはFirefoxなどで閲覧してください. ※OpenGLに関連する項目は 別ページ に整理しました。ここにあるものは内容が古い場合があります。 OpenGL のライティングについて 光源の位置 画面描画関数内において: glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); /* ここで指定するとカメラにくっついた光源 */ gluLookAt( ... ); /* ここで指定すると世界座標のくっついた光源 */ glTranslatef( ... ); /* 物体1を描く */ /* ここで指定すると物体1にくっついた光源 */ glTranslatef( ... ); /* 物体2を描く */ /* ここで指定すると物体2にくっついた光源 */
先端情報科学特論Ⅰ&Ⅲ 物理ベースコンピュータグラフィックス Dec 20, 2007 像情報処理学講座 井村 誠孝 本日の題材: 流体(Part 2) + 炎 粒子法1 粒子法2 出典: [2] 出典: [3] 炎1 炎2 出典: [7] 出典: [8] Dec 20, 2007 2 1 流体 Part 2 ~粒子ベースのシミュレーション~ 非圧縮性流体の運動を記述する方程式 質量保存 ∇ ⋅u = 0 移流項: 流れていってしまう流体の挙動を、空 間に固定された速度場で記述するための項 運動量保存 ある場所の 速度変化 ただし 1 ∂u + (u ⋅ ∇)u = − ∇P +ν∇ 2u + f ∂t ρ u : 速度 P : 圧力 圧力項 粘性項 外力項 これらの時間変化を計算する ρ : 密度 ν : 動粘性率(kinematic viscos
※OpenGLに関連する項目は 別ページ に整理しました。ここにあるものは内容が古い場合があります。 non-power-of-two texture の速度を検証する OpenGL 2.0 ではテクスチャの一辺のサイズが 2^n でなければならないという制限がなくなっている。 非2^n テクスチャを使用する際の懸念は、速度の低下である。 ここでは速度低下の有無について検証する。 方法 2種類のサイズのテクスチャ画像を準備する。 (1) 2048 x 2048 (2) 2047 x 2047 注: テクスチャ画像の最大サイズおよび最大枚数は、 以下の関数により調べることができる: int n; glGetIntegerv( GL_MAX_TEXTURE_UNITS, &n ); glGetIntegerv( GL_MAX_TEXTURE_SIZE, &n ); glGetIntegerv(
GLSLとは OpenGL Shading Language(以下GLSL) は OpenGL との親和性の高い shader 記述言語である。 shader 記述言語とは、 グラフィクスパイプライン中のプログラム可能な部分における処理を 記述する言語の総称である。 shader 記述言語には他に NVIDIA の Cg や Microsoft の HLSL などがある。 世間一般に出回っている情報量では Cg に押されていると思われる。 OpenGL との間のインタフェースがわかりやすい点と、OpenGL 拡張機能を 利用可能にする GLEW を導入すれば Linux でも Windows でも使える点が 優れている。 デメリットは、情報が少ないこと、プラットフォームによって挙動が 異なる場合があること、 中心となって策定していた 3DLabs がハイエンドグラフィクス分野から 撤退した
論理的側面 CUDAで実行される多数の thread は、 論理的には一つの grid が複数の block に分けられ、 それぞれの block が複数の thread を含むという 階層的な構成になっています。 一つの grid が一つのプログラムに対応します(という理解でよいと思います)。 一つの grid は論理的には最大 2^16 x 2^16 の block で構成されます。 一つの block は最大で512の thread で構成されます。 shared memory は block ごとに独立して割り当てられ、 一つの block が確保できる shared memory の論理的な 最大サイズは 16KB です。 Streaming Multiprocessor (SM) 論理的には全ての thread が同時に実行されていると考えればよく、 またそう考えてプログラムを
座標系の理解なくして3DCGなし OpenGLを用いて3次元CGを描く場合、特にシェーダを自分で書く場合は、 座標系の理解が必須である。 OpenGLではレンダリングパイプラインの進行に伴って 様々な座標系が登場する。 オブジェクト座標系 (object coordinate system) オブジェクト座標系はモデリングの際に対象物の頂点座標や 法線を指定するための座標系である。 原点は対象物のバウンディングボックスの一頂点か、 対象物重心付近に置かれることが多い。 対象物の形状を捉えやすい方向に x, y, z 軸が設定される。 例えば、花瓶の形状をモデリングするためには、 花瓶の底面中央を原点にし、鉛直上向きを z 軸正方向とする オブジェクト座標系を設定するのが都合よい。 オブジェクト座標系はモデリング座標系(modeling coordinate system) あるいはローカル
これは何? OpenGLのデプスバッファの値を取得し、距離情報に変換する方法について 説明しています。 要点は2つです。 glReadPixelsで読める。 例えば浮動小数点バッファに読み込むと0から1の値となる。 float *depth_buf = new float[ width * height ]; glReadPixels( 0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, depth_buf ); デプス値dからカメラ座標系でのz座標への変換は以下の式に従う。 z = f*n / (d*(f-n)-f) ここでnとfはnear/far clipping lengthである。 OpenGLのカメラはz軸負方向を向いていることに注意。 詳しくはこちら: 説明(PDF) サンプル depth.zip 動作環境 C++。 STL(S
これは何? ボリュームデータ(各ボクセルに格納されているデータは unsigned char)を OpenGLを用いてリアルタイムレンダリングするためのクラスである。 ※ NVIDIAのGPUでうまく動かない場合がありましたが、vertex shader で クリッピング座標を明示的に出力すると解決しました。 ATIのグラフィクスカードを使う場合は shader/volume_renderer.vert の中の gl_ClipVertex への出力をコメントアウトして下さい。 ソースコード他 renderer.zip レンダリングを行うためにはこの中の以下のファイルが必要である。 FragmentShader.cpp FragmentShader.h ProgramObject.cpp ProgramObject.h ShaderObject.cpp ShaderObject.h Ve
目標 OpenGLにはこれまで、プラットフォームに依存しないテクスチャへ直接レンダリングを行う手法は 存在していませんでしたが、framebuffer object が規定され、ウィンドウ以外への オフスクリーンレンダリングが可能になったことで、テクスチャへのレンダリングも プラットフォームに依存せず行えるようになりました。 ここでは framebuffer object の概要について記述します。 framebuffer object とは framebuffer object は、OpenGLでプラットフォームに依存せず オフスクリーンレンダリングを実現する機構です。 OpenGL 2.0 の正式仕様には取り込まれていません。 OpenGL拡張 EXT_framebuffer_object として規定されています。 従来のフレームバッファは、実際の表示ウィンドウと密接に関連付けられて
先端科学技術特論I&III - 物理ベースコンピュータグラフィックス レポート課題 レポート課題については こちら[PDF] を参照して下さい。締切は1月31日です。 SIGGRAPHの論文は以下のリンクから手に入れることができます。 SIGGRAPH archive@acm.org SIGGRAPH2007 Electronic Theater DVD 4回目の授業で1/3程しか上映できなかった SIGGRAPH2007 Electronic Theater DVD の続きが見たい人は、 井村まで連絡を下さい。お貸しします。 講義資料と参考文献へのリンク 1回目 講義資料[PDF] R. Fedkiw et al.: Visual Simulation of Smoke, SIGGRAPH'01, pp. 15-22 (2001) [PDF] [VIDEO1] [VIDEO2] A.
機能 JPEGファイルを読み書きできます。 画像の原点を左上もしくは左下に取ることができます。 バッファは RGB, RGBA の両方に対応しています。 詳しくはヘッダファイルを参照して下さい。 動作環境 C++。STL(Standard Template Library)が使えること。 libjpeg がインストールされていること。 g++ (GCC) 3.3.2 (linux) および Visual Studio .NET 2003 (windows) で動作確認済みである。 ソースコード他 JpegFileIO.tgz (2006/2/2) libjpeg の Windows 環境へのインストール Independent JPEG Group http://www.ijg.org/ から、jpegsrc.v6b.tar.gz をダウンロードする。 適当なディレクトリに展開する。
速度を左右する要因 速度を左右する最大の要因は並列アルゴリズムの優劣であるが、 グローバルメモリの種類やブロックのサイズが速度に及ぼす影響を 知っておくのは無駄ではない。 (と書いてみたものの、結果に不審な点が多い) サンプルの速度 1回だけ処理するのでは速すぎるので、kernelの呼出部分を for 文の内側に入れ、 1000回実行した時間を計測すると、13384msであった。 メモリの割り当て方法の影響 まずメモリについて。 グローバルメモリを使用する際には global, constant, texture の3種類があるのだが、 どうやって指定するのか 違いはどれほどあるのか が気になるところである。 constant memory .cu の中で __constant__ を先頭につけて、配列を確保すると、 constant memory になる。 NVIDIA のサンプルを見る
※OpenGLに関連する項目は 別ページ に整理しました。ここにあるものは内容が古い場合があります。 GLEW (The OpenGL Extension Wrangler Library)を導入すると、 OpenGL Extension を簡単に利用することができる。 例えば Multi Texture や 3D Texture, OpenGL Shading Language を (ドライバが対応していれば)使用可能になる。 インストール - Windows の場合 glew-1.4.0-win32.zip をダウンロードする。 適当なアーカイバで展開する。 include 以下を C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include にコピーする。 lib 以下を C:\Program F
OpenGL 入門 井村 誠孝 2006 年 7 月 20 日 カメラ 物体 光源 図 1: CG を構成する要素 1 OpenGL で CG を描くとは CG を描くことはカメラで写真を撮ることになぞらえて考えることができる。すなわち、対象となる物体 を適切な位置に置き、照明を当て、適切な位置からカメラで撮影し、2 次元の画像を得る、という手順は、 CG でもカメラでも同一である (図 1)。 OpenGL では、3 次元形状は多数のポリゴン (多角形の意味) の集合として表現される。実際の描画手順 は、ポリゴンごとに以下の処理が進行する。1 1. オブジェクト座標系で表されている各頂点の座標をカメラ座標系に変換する。 2. 光源の位置と物体の材質を考慮して、カメラから見たときの各頂点の色を計算する。 3. 各頂点をカメラのスクリーン上に投影し、スクリーン上の座標を計算する。同時にカメ
※OpenGLに関連する項目は 別ページ に整理しました。ここにあるものは内容が古い場合があります。 (サンプルは一番最後にあります) 目標 OpenGLにはこれまで、プラットフォームに依存しないテクスチャへ直接レンダリングを行う手法は 存在していませんでしたが、framebuffer object が規定され、ウィンドウ以外への オフスクリーンレンダリングが可能になったことで、テクスチャへのレンダリングも プラットフォームに依存せず行えるようになりました。 ここでは framebuffer object の概要について記述します。 framebuffer object とは framebuffer object は、OpenGLでプラットフォームに依存せず オフスクリーンレンダリングを実現する機構です。 OpenGL 2.0 の正式仕様には取り込まれていません。 OpenGL拡張 EXT
C/C++で作成したプログラムを高速化するときは、 プロファイラを用いてプログラムのどの部分に実行時間が かかっているかを探ります。 gccに対応しているプロファイラにgprofがあります。 コンパイル時に -pg オプションを付ける。 % g++ -pg -Wall Main.cpp Bmp.cpp ColorConv.cpp 実行する。 % ./a.out プロファイラにかける。 % gprof a.out 時間がかかっている関数を修正する。 おまけ: 最適化の利き具合 とあるプログラムで、 最適化なし: 48.62 sec -O1: 15.23 sec -O2: 13.68 sec -O3: 13.06 sec -O4: 13.06 sec -O5: 12.90 sec プロファイラで見ると、 なしのとき 13.21% Labeling::SearchNeighboringSegme
ランタイムライブラリとは、プログラムを実行するために必要なライブラリである。 Visual Studio は複数のランタイムライブラリを提供している。 Visual C++ でアプリケーションを作成する際には、 利用するランタイムライブラリを指定する必要がある。 ランタイムライブラリの指定は、 構成プロパティ:C/C++:コード生成:ランタイムライブラリ で行う。 Visual Studio .NET 2003 で通常のアプリケーション用に提供される ランタイムライブラリは、以下の6種類がある。 マルチスレッド(/MT) マルチスレッド デバッグ(/MTd) マルチスレッド DLL(/MD) マルチスレッド デバッグ DLL(/MDd) シングルスレッド(/ML) シングルスレッド デバッグ(/MLd) ()内はコンパイラに与えるオプションである。 ただし、シングルスレッドは2005から廃
この文書は Paralle Reduction の項にある Whitepaper の抄訳です。 CUDAでプログラムを書くにあたってのテクニックが多数詰まっています。 並列リダクション (Parallel Reduction) リダクションは並列データ処理を構成する一般的かつ重要な部品である。 CUDAでの実装は容易だが理解するのは実装よりも困難である。 最適化の非常に有益な事例である。 この文書では7種類の異なるバージョンを一つずつ検証する。 それぞれの thread block では(二分)木構造ベースのアプローチを用いる。 (実装にあたっては)、一つの対象について複数の thread block を用いて reduction を実行できるようにする必要がある。 巨大な配列に対して処理を行う場合に全ての multiprocessor を稼動させる ためには、各 thread block
OpenGL入門 2006/7/20版 OpenGLを使用するプログラムを作成していて、何となく動いてはいるのだけれど、 実際のところ自分のあずかり知らないところで何が起こっているのかは、 よくわかっていない、という人向けのつもりで書いています。 OpenGL入門
この文書は ジョイスティックで操作することを前提として作成されている プログラムを、他のインタフェース(例:ジェスチャ)で操作したい場合に 有用なツールである PPJoy の使用方法を紹介する。 インストール PPJoy をダウンロードする。 PPJoy のページ: http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm 左上にある Download PPJoy のリンクをたどり、 download-PPJoySetup.zip.exe をダウンロードする。 実行すると Simtel Downloader が起動し(煩雑である)、 PPJoySetup.zip がダウンロードされるので、 適当なディレクトリに展開し、Setup.exe を実行する。 ドライバに署名がないと何度か警告が出るが、構わず実行する。 スタート->プログラム->Para
概要 本クラスは、任天堂のゲーム機 Wii のコントローラである Wii リモコン (Wii Remote / Wiimote とも呼ばれる) を Microsoft Windows で使用するためのものです。 Windows XP SP2 上の Visual Studio 2005 での動作を確認しています。 無償・無保証です。 作成にあたっては、 WiinRemote のサイトで配布されているソースコードが参考になりました。 御礼申し上げます。 ダウンロード wiimote090128.zip (8KB) Windows Driver Kit (WDK) のインストール 本クラスを利用するためには、 Windows Driver Kit (WDK) をインストールする必要があります。 WDK はかつては Windows Driver Development Kit (DDK) と呼ば
※OpenGLに関連する項目は 別ページ に整理しました。ここにあるものは内容が古い場合があります。 NVIDIA CUDA に触れてみる インストール CUDA 1.0 がリリースされた。 あいかわらず、Windows Vista はサポートされていないが。 早速インストールする。 http://developer.nvidia.com/object/cuda.html から Windows Display Driver version 162.01 for CUDA Toolkit version 1.0 CUDA Toolkit version 1.0 for Windows XP (32-bit) CUDA SDK version 1.0 for Windows XP (32-bit) をダウンロードして、この順序でインストールする。 Toolkitは C:\CUDA に、SDKは
ソースコード他 Labeling.h (これだけで使えます) サンプル一式(tgz) Windows用サンプル一式(zip) 性能 下の画像(640x480)のラベリング10000回: 36秒66 CPU: PentiumM 1.8GHz, Memory: 1GB, OS: linux 2.6.11.7, コンパイラ: g++ -O3 動作環境 C++。 STL(Standard Template Library)が使えること。 g++ (GCC) 3.3.2 (linux) および Visual Studio .NET 2003 (windows) で 動作確認済みである。 解説 使用方法(PDF) 連絡先 バグ報告・要望は井村まで。
ICP(Iterative Closest Point)法について ICPは3次元形状モデルの間の位置合わせを行う手法であり、 遺物の計測結果の統合等に広く用いられている。 ICPは Chen and Medioni および Besl and McKay によって 同時期に考案された手法であるようだ。 Chen, Y. and Medioni, G.: Object modeling by registration of multiple range images, Proceedings of IEEE International Conference on Robotics and Automation, pp. 2724-2729, 1991 DOI: 10.1109/ROBOT.1991.132043 Besl, P. J. and McKay, N. D.: A Method f
Google Earth の視点を外部プログラムから制御する (サンプルはこのページの一番下にあります) Google Earth には他のプログラムとのインタフェースとして COM API が準備されている。 ※COM とは Component Object Model の略称で、 部品化されたプログラムを作成・利用するための基盤となる 技術仕様である。 COM に従って記述されたコンポーネント間では、 言語と場所によらずデータのやりとりが行える。 Google Earth COM API に関する情報は http://earth.google.com/comapi/index.html から入手できる。 C++から使用できるようにする準備 まず、http://earth.google.com/comapi/index.html にある earth.idl をダウンロードする。 ※IDL
次のページ
このページを最初にブックマークしてみませんか?
『Oshiro Laboratory』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く