asaのブログ

プログラミングの勉強まとめ

目次

 ブログの目次ページです。投稿数が少し増えたのでこちらで整理しています。

 

 1.Java

  ・Java カテゴリーの記事一覧 - asaのブログ

 

 2.C++

  ・今はありません

 

 3.OpenGL

  ・OpenGL カテゴリーの記事一覧 - asaのブログ

 

 4.アルゴリズム

  ・アルゴリズム カテゴリーの記事一覧 - asaのブログ

 

 5.Webサイトの作成

  ・今はありません

 

 6.ペイントツールの作成

  ・ペイントツール カテゴリーの記事一覧 - asaのブログ

 

 7.情報収集

  ・情報収集 カテゴリーの記事一覧 - asaのブログ

 

 8.その他

  ・その他 カテゴリーの記事一覧 - asaのブログ

 

OpenGL 情報収集まとめ

 OpenGL関連の情報収集先などをまとめました。2D寄り、フォトレタッチやペイント関連多めになります。随時拡張していきます。

 

 環境構築

 ・windowsでopenGL環境を構築するための手順 - Qiita

 ・床井研究室 - NuGet による freeglut / GLFW / GLEW の組み込み

 ・VisualStudioの追加のライブラリの登録 : とある大学院生のプログラミング

 

 チュートリアル

 ・GLUTによる「手抜き」OpenGL入門

 ・Lazy Foo' Productions - OpenGL Tutorials

 ・OpenGL“ü–å

 ・OpenGLのお話

 ・http://www.opengl-tutorial.org/

 

 チュートリアル?(本)

OpenGL Superbible: Comprehensive Tutorial and Reference (7th Edition)

OpenGL Superbible: Comprehensive Tutorial and Reference (7th Edition)

  • 作者: Graham Sellers,Richard S Wright Jr.,Nicholas Haemel
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2015/07/31
  • メディア: ペーパーバック
  • この商品を含むブログを見る
 

 

OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V (9th Edition)

OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V (9th Edition)

  • 作者: John Kessenich,Graham Sellers,Dave Shreiner
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2016/07/18
  • メディア: ペーパーバック
  • この商品を含むブログを見る
 
チュートリアル形式で始めるOpenGL[2D編]

チュートリアル形式で始めるOpenGL[2D編]

 

 

 ブログ等

 ・床井研究室

 ・OpenGL Programming - Wikibooks, open books for an open world

 ・Getting Started - OpenGL Wiki

 

 ペンタブ関連

 ・OpenGLでペンタブ使ったアプリ作る その1 » Saikoro Laboratory Blog

 ・WDN ワコムの技術情報提供サイト-Wacom Developer Network-

 

 ブラシモデリング関連

 ・C++ Programs

 ・Stroke drawing in OpenGL

 ・brush - Photoshop-style brushes in OpenGL - Stack Overflow

 ・painting over terrain texture with brush - Graphics and GPU Programming - GameDev.net

 

 曲線関連

 ・随時追加

 

 Qt

 ・Qtプログラミング日記

 

 OSS関連

 ・Krita · krita

 

OpenGL マウスでお絵描き

 はい。マウスでお絵描きシリーズは実はこれで三つ目です。Swing版、JOGL版は下のリンクを参考にしてください。

 

 Swingでお絵描き ⇒ デザインパターンまとめ2(お絵かきソフト) - asaのブログ

 JOGLでお絵描き ⇒ JOGL‐マウスでお絵描き - asaのブログ

 

 こんな感じのができます。

 

f:id:asa_r:20170619081025p:plain

 

 環境

 Windows7SP1

 Visual C++ 2017

 freeglut 2.8.1

 

 構成

 4つのファイルで構成しました。

  1.  SetOpenGL.h・・・インクルードファイルをまとめておくヘッダ
  2.  Utilities.h・・・画面の大きさや、関数群をまとめておくヘッダ
  3.  Utilities.cpp・・・関数の定義をするcppファイル
  4.  main.cpp・・・実行用のcppファイル

 

 main.cpp

 まずはOpenGLの基礎をおさらいするために分かりやすいmain.cppから。

gist16546563fda5f76a0beaf058768fa0d3

 なにはともあれglutを初期化します。次にウィンドウのサイズと描画モードを設定して、コールバック関数を指定してやります。最後にループの設定をしたら完成です。

 

 SetOpneGL.h

 インクルードなどをまとめおくためのヘッダです。glutしか入っていませんが今後拡張するならと思って分離しました。

gist583a73fb7e37570ce0be7ba1cc3b4d2f

 

 Utilities.h &Utilities.cpp

 必要な変数や関数をヘッダファイルで宣言してcppで定義しています。ストロークは円で描画しています。ただしOpenGLには円を描画する機能がないので、マウスがドラッグされた位置を基に描画領域を計算して円の半径以内であれば点を打つことで円を実装しました。

 

 座標を保管するようなクラスを設計することも考えましたが、とりあえず動けばいいと思って配列を使って座標を保存し、これを書き直すことでドラッグの軌跡で絵を描くことができます。

gistddabeba1646a5113bf1d8e305b481fbe

gistc6681f69eaf44f8454145ced4b5af3f4

 

OpenGLアーキテクチャまとめ1

  OpenGLについて勉強したことをまとめました。こちらの参考文献をしようしています(https://www.opengl.org/archives/resources/code/samples/s2001/notes/opengl.pdf)。

 

 ・OpenGLって何?

 Graphics rendering APIで、WindowシステムやOSに非依存なのが特徴。

 

 ・OpenGLアーキテクチャ

 描画データの流れはCPUからFrame Bufferへと流れています。このフローは2方向あっります。頂点座標をベースとして幾何図形を書く処理を行う場合のパイプラインと、pixelベースの処理を行う場合のパイプラインです。

 つまりOpenGLで扱うものは何かというと点・線・三角形などの幾何図形と画像などのイメージということになります。

 

 ・OpenGLの描画機能

 OpenGLを使って私たちができることは大きく二つしかありません。単純に何かを描くことどのように描くかを変更することしかありません。

 OpneGLで描くことのできるものは先ほど挙げたとおり幾何図形とイメージです。テクスチャマッピングを使用すれば、私たちはこの両方を結合することができます。

 どのように描くかを変更するとは、色を変えたり点や線のサイズを変えたりすることです。

 

 ・関連するAPI

 OpenGLはウィンドウシステムとOSに非依存なので、これらに統合する場合には追加のAPIがしようされます。

 ウィンドウシステム周りでいくとAGL、GLX、WGLがあります。ユーティリティを充実させたAPIにはGLUが存在します。Windowシステムとユーティリティを合わせたAPIにはGLUTがあります。

 

 ・GLUTの基礎

 このGLUT(今はFreeGLUT等が使われますね)を使用してOpenGLを学習します。GLUTの基礎は次の通りです。

  1.  ウィンドウシの設定をして初期化
  2.  OpenGLの初期化
  3.  コールバック関数の登録(イベントが発生したときに動作する関数です)
  4.  メインループの設定

 ウィンドウの設定などは置いておいて、コールバック関数のところだけ先に述べておくと、コールバック関数には最低ウィンドウがリフレッシュされるときに呼ばれるDispayFuncが必要です。

 

 ・次回の予告

 ・基礎を実際にコードで示して確認する

 ・Transformationの巻に移項

 

Krita(オープンソースペイントソフト)開発に参加してみる

 ある記事でペイントソフトを作ろうとした人が、一番手っ取り早い方法として既存のオープンソースプロジェクトに参加するのが良策だと答えていました。Kritaはオープンソースによって開発されているペイントソフトで一応誰でも参加できます。ハードル高めですがやってみます。 

 

 Krita

https://krita.org/wp-content/uploads/2016/04/krita-30-screenshot.jpg

 

 ちなみにその記事はこちらです↓

libregraphicsworld.org

 

 About Krita

 下のKritaのホームページから開発者向けの情報を得ることができます。KritaはQtとC++をベースにして書かれています。Javaをやっていてポインターなどの概念が未だ定着していない人(自分ですね)向けにもリファレンスが提供されていてかなり充実しています。

krita.org

 

 Githubが開発に良く使われていますが、KritaはKDEのPhablicatorを使用しています。Kritaのページに飛ぶと開発状況が確認できます(↓のページ)。

 https://phabricator.kde.org/source/krita/

開発者がどのように開発環境を構築して、どのようにContributeするかはWikiにまとめられています。

 https://community.kde.org/Krita

 

 やることとしてまとめおくと次のようになります。

  1.  Qtのインストー
  2.  リファレンスをつまみ読みしてKritaのビルドだけしておく
  3.  C++関係のリファレンスを読む
  4.  KDEのリファレンスを順番に追っていく
  5.  他のディベロッパーガイド等を読んでおく
  6.  バグにトライ

のような感じでやっていきます。

 

OpenGLチュートリアル3

 ・テクスチャマッピング

 下のような市松模様のイメージを作ります。

f:id:asa_r:20170609191114p:plain

 

 ・テクスチャ用のヘッダ

gistaa83ee8f32cf309552dabf0d0802bb91

 ・OpenGL等を使用するためのヘッダ

gist2c4251f9805c698015d3bceeac69d8bf

 ・ユーティリティ定義用のヘッダ

gist983b28be779e1912759441f754013c5f

 ・ユーティリティ定義用のcpp

gist98e58f11e64698a597c214d2a93d6440

 ・テクスチャ定義用のcpp

gist48d616a83587b62a013b27d7c4251a7b

 ・実行用のmain.cpp

gist003e52cf0fad6efd2940d5264d43aae3

OpenGLチュートリアル2

 ・ビューポートを使う 

 インクルードや定義をまとめたヘッダファイル。

gist9cad5596759b674012ebcec83fe31174

 ユーティリティ関係をまとめたヘッダファイル。

gist7ba039594cabd33022f04de8349386ca

 ユーティリティ関係をまとめたC++ファイル。

gist4335b8acaaeab7e14de5a53f45db5866

 実行用のC++ファイル。

gistce2a7d158d41204f8d36803a3a55283a

 

 ・スクロールを実装する

 gCameraX , gCameraYという二つの変数を使用してカメラ位置を移動させてスクロールを実装します。

 インクルードや定義をまとめたヘッダファイル。

gist95c677a0e991e70d1dab7b1e2fcab912

 ユーティリティ関係をまとめたヘッダファイル。

gist759f709dbb36231590c7826943a30c77

 ユーティリティ関係をまとめたC++ファイル。

gist68b41982eaebc7c1818ce99c3ab77ccb

 実行用のC++ファイル。

gist39a2604af75619852a11d82f1d37cfb4