質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4071閲覧

OpenGL、FreeTypeで日本語をウインドウに描画する方法がわかりません。

snowmaniy

総合スコア19

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/17 02:26

編集2019/01/17 02:38

##実現したいこと
フォントエンジンを実装したライブラリである、FreeTypeを使用して、下の画像の用に、ウインドウの中に、文字列を描画したい。
下の画像は、glutBitmapStringを使用して、半角英数字を描画したものです。

イメージ説明

GL標準では、マルチバイト文字には対応しておらず、FreeTypeというライブラリを使用すると、対応できるという情報があったので、FreeTypeを使用することにしました。
##自身で行ったこと
FreeType-pyのページの「Usage example」に掲載されているサンプルコードは正常に動作しました。
自身の手で、マルチバイト文字がいくつか並んだ文字列を表示できるようにしたものも、正常に動作しました。

freetype-py

import freetype face = freetype.Face("フォントのパス") face.set_char_size( 48*64 ) u8 = "こんにちは、おひさしぶりですね".encode() face.load_char(u8) bitmap = face.glyph.bitmap print (bitmap.buffer)

また、以下のサイトも参考にしましたが、いまいち解りません。
freetype-py - 三次元日誌

##環境
Python3.7 + OpenGL(Freeglut 3.0.0) + Anaconda + windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

OpenGL(というよりかは、GPU)には、文字を描画するという機能は持っていません。
一般的に文字を描画するには、

  1. フォントデータより文字情報を取得する。
  2. 文字情報を元に、テクスチャに文字を書き込む。
  3. テクスチャを描画する。

という手順を踏む必要があります。
glutBitmapStringはその手順を一フレーズで行っているわけでして、それを使わないのであれば、ご自身でその手順を行う必要があります。

FreeTypeというのは、TrueTypeフォントデータより文字情報を取得するライブラリです。
つまり、前に説明した手順の「1.」のみを行うだけですので、「2.」「3.」は自分で処理する必要があります。

freetype-pyは使った事がありませんが、見てみると素のFreeTypeライブラリに近い仕様のようですので、freetype-pyだけでなく、freetypeについても調べてみると良いかもしれません。


ただし、「日本語を描画する」事が目的であれば、別にFreeTypeを直接使う亊のみが唯一の方法ではありません。
例えば、Pillowで文字を描画して、それをテクスチャとして使う方が簡単だと思います。

「python pillow 文字」でググると文字を描画する方法、「python pillow opengl」でググると描画結果をOpenGLのテクスチャとして扱う方出てくるので、それらをかけ合わせて対処してみてください。

投稿2019/01/17 14:48

katsuko

総合スコア3469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

snowmaniy

2019/01/23 06:56

回答ありがとうございます。 FreeTypeの使用はあきらめ、ひとまず、pillowで日本語の描画をためしてみたところ、いとも簡単に描画できました。 OpenGLでのテクスチャブレンドにも挑戦してみます。 本当に、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問