本文へスキップ

タグ

OpenGL

13件の記事

dracoをコンパイルして3Dファイルデータを圧縮する

3Dのデータは非常にファイルサイズが大きくなります。基本的にはポリゴン数(頂点数)が増えれば増えるほど大きくなっていきます。しかし、特にWebで用いる場合、ファイルサイズが大きいとダウンロードに時間がかかり実用的ではありません。そこで今回はGoogleが開発しているdracoという3Dデータの圧縮プログラムを用いてファイルサイズを縮小します。dracoを用いることでファイルサイズを非常に小さくすることができます。実際にdracoをでOBJファイルを圧縮します。

Webで使うために GLTF / GLB ファイルをDraco圧縮する

近年、JSを使ってWebでCG表現を行う手法は大きな発展をしています。ブラウザ上で AR や VR などを用いたWebアプリを開発できるようになってきました。しかし、問題となるのが3Dモデルのファイルサイズです。GLTFなどの3DモデルはWeb上で扱うには非常にサイズが大きく、ダウンロードに大きな時間がかかってしまいます。そこでGoogleが開発してGLTFが拡張機能として採用したDracoというオープンソースの3Dデータ圧縮方式を用いて圧縮することで、ファイルサイズを縮小します。

Python GLFWでOpenGLバージョン指定とウィンドウ表示

今回はまた下準備ですが、OpenGLのバージョン指定やウィンドウの表示をしていきます。OpenGLのバージョンは非常にややこしいのですが、最近のバージョンはかなりややこしさが軽減されていて助かります。PythonでGLFWを用いてコンテキストにOpenGLのバージョン4.0を指定し、ウィンドウを表示していきます。

Python3で始めるOpenGL4

PythonでモダンなOpenGLが使える。この感動を伝えるために筆を取りました。この連載ではPythonによってVAOなど、OpenGLのモダンな機能の説明をコードを交えてできるだけわかりやすく説明していきます。今回は第1回ということで、その紹介や環境構築をメインにし、最後にプログラムを書いて自分のパソコンが対応しているOpenGLのバージョンを表示します。ちなみにGLUTではなく、コンテキストなど設定できるGLFWを使用します。

頂点配列とVBO

OpenGL、GLSLではGPUにデータを送る効率を上げるためにVBOという仕組みが用意されています。今まではglBegin()、glVertex3f()関数などでGLSL側にデータを送ってきました。前にも言いましたがglBegin()などはすでに廃止や廃止予定となっています。これらの関数で描画すると非常に遅いです。頂点のみをattribute変数としてGLSLに送りますが、法線や色、uvなどの情報も頂点と同様の方法で送ることができます。今回の内容まででかなり効率的なプログラムを作れるようになったと思います。ちなみにvao(Vertex Array Object)という言葉があって非常に紛らわしいのですが、これはvboの仲間や別機能ではなく、vboをカプセル化するためのものです。

glmを使った投影法と視点変換

OpenGLを用いてレンダリングを行う際、レンダリングされる物体やカメラを移動させるときは行列計算を用います。行列計算は自分でC++で書くこともできますが、すでに行列計算を補助してくれるGLM(OpenGL Mathematics)があるのでそちらを使いましょう。

GLSLシェーダーを触ってみよう

OpenGL2.1とGLSLを使用してレンダリングを行う方法を解説します。GLSLサンプルコードを用いてポリゴンを描画します。OpenGLが世界を描画するにあたって、描画までの一通りの流れをパイプラインといいます。バーテックスシェーダは頂点ごとに実行されます。フラグメントシェーダはピクセルごとに実行されます。

GLFWでウィンドウを表示する

OpenGLで描画を行うにあたり、GLUT(またはFreeGLUT)でも別にいいのですが、GLUTは若干直感的でないですし、コンテキスト関連の理解がしにくいですし、メンテナンスされていないのはそれなりの理由があるということでGLFWを使っていきます。GLFWのほうがメンテナンスもされていて高機能です。