技術書典7にて『RustではじめるOpenGL』を頒布します

来る2019年9月22日、サンシャインシティ 文化会館ビル 展示ホールで開催される技術同人誌イベント「技術書典7」にて、書籍『RustではじめるOpenGL』を頒布いたします。

f:id:toyamaguchi:20190907231432p:plain:w300
『RustではじめるOpenGL』表紙
f:id:toyamaguchi:20190907231520p:plain:w300
『RustではじめるOpenGL』裏表紙

書籍の情報

  • 書籍名: RustではじめるOpenGL
  • サイズ: B5版
  • ページ数: 92ページ
  • 価格: 1000円
  • サークル名: Team Jackalope (リンク)
  • 販売ブース: 「こ32D」(池袋サンシャインシティ 文化会館ビル 展示ホール 2F ホールD) (マップ)

書籍執筆に寄せて

本書は、プログラミング言語のRustでOpenGLを扱うための入門書です。

私はこれまで、OpenGLを使ってネットワーク上のデータの流れを3Dで可視化させるソフトウェアを作成してきました。 まったくOpenGLを知らないところからスタートして、様々なところにつまづきながら、4年間で多くのことを学ぶことができました。 本書はその集大成として、入門者向けの内容をまとめたものです。

Rustを使うメリット

本を執筆していることを周りの人に伝えると、よく「なぜRustからOpenGLを使うのですか?」という質問を受けることがありました。 本書では、RustからOpenGLを使ったときの3つのメリットを挙げています。

  1. 処理速度が速い
    • C/C++にも負けない処理速度を出せるRustならば、多少の処理でも60 FPSを維持することができるはず。
  2. ガベージコレクションがないので、画面がカクつかない
  3. モダンなプログラミング言語が持つ、便利な特徴・環境を使用できる
    • 様々なプラットフォームでの動くバイナリファイルが簡単に作成できたり、新しいライブラリの導入が楽だったりするのは、モダンなプログラミング言語ならではです。

これらのメリットもあって、RustからOpenGLを使う方法を執筆しようと思いました。

GUIからパラメータを操作できるサンプルコード付き

また、本書の特徴的なところとして、OpenGLに簡単にGUIを追加できるライブラリ「Dear ImGui 」(通称、ImGui)を導入しているところが挙げられます。 もともと、OpenGLチェックボックスやスライダーなどのウィジェットを追加するのは、とてつもなく面倒です。初心者には無理です。 しかし、このライブラリを導入することで、OpenGL特有のパラメータをON・OFFできるGUIを簡単に追加することができます。

例えば、照明の位置や強さを変えたり、カメラの視点を変えたり、ワイヤーフレームに切り替えたりするような作業をGUIから操作することで、より直感的にその効果を把握できるようになります。

次のスクリーンショットは、書籍のサンプルコードを実装すると動作するサンプルアプリです。

f:id:toyamaguchi:20190908095847p:plain
3Dオブジェクトを制御するGUI

LinuxでもWindowsでも動作可能な独自OpenGLコンソールが作れる

本書のプログラムが採用しているフレームワークとして、SDLというものがあります。 これは多くのゲームにも採用されている、クロスプラットフォームなマルチメディアフレームワークです。 また、OpenGLも多くの環境で動作する3DプログラミングのためのAPI規格です。 そして、さらに、それらを呼び出すRust自体も、様々な環境で動作できるプログラムをコンパイルできます。

これらをすべて合わせると、自分だけのクロスプラットフォームOpenGL製コンソールが作成できるのです。(バイナリファイルは各プラットフォームごとに必要です。)

例えば、データベースから得た情報を元にグラフをぐいぐい動かしたり、映画『アイアンマン』に出てくるカッコいいビジュアルのコンソールを作り出せます。

f:id:toyamaguchi:20190908105031p:plain
Dear ImGuiのサンプル画像

どうです。ワクワクしませんか!

私はカッコいいGUIを作りたくてしょうがないです!

そんな情熱から本書を執筆いたしました。

紙版・電子版

紙版は技術書典7で150部頒布し、残った場合はBOOTHに委託しようと考えています。

また、電子書籍版もこちらに公開します。電子書籍版は部数に制限はないです。

toyamaguchi.booth.pm

現在は、準備中ですが上記のリンクの場所に公開する予定です。

書籍の表紙について

先日、書籍の表紙の完成をTwitterでつぶやいたところ、多くの人から「いいね」をいただけましたので、この表紙について少し解説いたします。

タイトルデザインの方針

f:id:toyamaguchi:20190908084446p:plain:w300
表紙のロゴ

私は大学時代の美術サークルに入っていたこともあり、このようなデザインの作成はすごく好きです。 せっかく自分の書籍を作るのだから、表紙を凝らないでどうする、という気持ちから、いろいろ悩みました。

OpenGLがテーマでしたので、よく見るポリゴンスタイルの背景壁紙のような案や、立方体や正八面体をモチーフにした案なども考えていました。 いろいろ考えていた中で、OpenGLのシェーダの中でも、わざと画面にノイズを加えた表現方法である「グリッチ」のアイデアが浮かびました。 しかし、グリッチの度合いを強くし過ぎると視認性が悪くなるので、グリッチ効果をより抽象的にして、グリッチの度合いを弱めた表現に変更しました。

フォント

また、画像の中で使用させていただいたフォントは、「851ゴチカクット」です。 昔の松下電器の「ナショナル」の文字にインスパイアしてできたフォントで、このカクカクしたところが近未来的でポップな印象を与えてくれます。 素晴らしいです。ありがとうございます。作者に感謝します。

f:id:toyamaguchi:20190908102114p:plain
851ゴチカクット

フォントが与える印象は大きいです。 最近のコミックやライトノベルの表紙に使われているロゴを見てもわかりますが、コミカルでポップなストーリーと、世界観が確立されたシリアスなストーリーとでは、使っているフォントの傾向が違います。 自分の書籍の印象をどういう雰囲気にするのかを考慮して、フォントをしっかり決めましょう。

私のやり方としてはそれほど難しくなく、「日本語 フリーフォント」などで検索して、良さそうなフォントの画像をダウンロードします。 その中から、最も表紙に似合うフォントを選んでいます。

ただ、すでにお気に入りのフォントというのもあって、今回はチームロゴと裏表紙の英語ロゴで使用しました。

ちなみに、チームロゴで使っているフォントは、丸い文字がかわいい「Comfortaa」です。

f:id:toyamaguchi:20190908091744p:plain:w200
チームロゴ

裏表紙の英語ロゴは、サイバーな雰囲気を与えてくれる「Orbitron」です。

f:id:toyamaguchi:20190908092821p:plain:w400
裏表紙のロゴ

目次

本書の内容を箇条書きでここに記しますので、参考にしていただけたらと思います。

  • ギャラリー
  • はじめに
    • 想定読者
    • 使用するライブラリとプラットフォーム
    • ソースコードのダウンロード
    • 免責事項
  • 第1章 開発環境の準備
  • 第2章 SDL
    • 2.1 準備
      • 2.1.1 Cargo.tomlの編集
      • 2.1.2 Linuxの場合
      • 2.1.3 Windowsの場合
    • 2.2 プログラムの作成
      • 2.2.1 ソースコードの全体
      • 2.2.2 初期化
      • 2.2.3 ウィンドウ
      • 2.2.4 キャンバス
      • 2.2.5 イベントループ
    • 2.3 プログラムの完成
  • 第3章 OpenGL
    • 3.1 準備
    • 3.2 プログラムの作成
      • 3.2.1 ソースコードの全体
      • 3.2.2 初期化
      • コラム : OpenGL 3.1
      • 3.2.3 OpenGLによる描画の仕組み
      • 3.2.4 シェーダ
      • 3.2.5 Vertex Array ObjectとVertex Buffer Object
      • コラム : ソースコードの整形を回避する
      • 3.2.6 三角形の描画
  • 第4章 Dear ImGui
    • 4.1 準備
    • 4.2 プログラムの作成
      • 4.2.1 初期化
      • 4.2.2 イベント処理
      • 4.2.3 ウィンドウの作成
      • 4.2.4 ウィジェットの生成
    • 4.3 プログラムの完成
    • 4.4 効果的な使い方
    • コラム : 自分専用プログラムの楽しみ
  • 第5章 3Dオブジェクト
  • 第6章 テクスチャ
    • 6.1 準備
    • 6.2 プログラムの作成
      • 6.2.1 ソースコードの全体
      • 6.2.2 テクスチャの準備
      • 6.2.3 頂点座標、法線ベクトル、テクスチャ座標
      • 6.2.4 テクスチャと照明を追加したシェーダ
      • 6.2.5 ユニフォーム変数
      • 6.2.6 テクスチャの描画
    • 6.3 プログラムの完成
    • 6.4 光の効果
  • おわりに
  • 著者紹介

最後に

技術書典7は9/22 (火)にて、サンシャインシティ 文化会館ビル 展示ホールで開催されます。

他にも面白い書籍がたくさんありますので、サークルリストで確認してから足を運ぶと良いと思います。

techbookfest.org

また、私のサークルはこちらになります。

techbookfest.org