mieki256's diary



2024/01/11(木) [n年前の日記]

#1 [prog] C言語で宇宙飛行スクリーンセーバっぽい描画をするプログラムを書いてみた

_先日、 Python + PyOpenGL を使って、宇宙飛行スクリーンセーバ(ssstars.scr)っぽい描画をするスクリプトを書いたのだけど。ソレを、C言語 + OpenGL (+ freeglut) 用に移植してみた。

環境は、Windows10 x64 22H2 + MinGW (gcc 6.3.0) or MSYS2 MINGW64 (gcc 13.2.0) + freeglut 3.0.0 or 3.4.0-2。

ソースその他 :

ソースが長くなってしまったので、gist に置いておく。

_Like ssstars screensaver for C and OpenGL

一応ココにも置いておくけど…。

_01_ssstars_opengl.c
_Makefile.txt
_texture.h
_texture.png

stbライブラリ(stb_image.h) を使ってpngを読み込んでいるので、ビルドには stb_image.h も必要。入手して、.c と同じ階層に置く。

_stb/stb_image.h at master - nothings/stb
_nothings/stb: stb single-file public domain libraries for C/C++

ビルド :

Makefile も用意したので、MinGW (gcc 6.3.0) が使える状態で make と打てば、01_ssstars_opengl.exe が生成される。

実行結果 :

01_ssstars_opengl.exe を実行すると以下のような感じの見た目になる。

今回のポイント :

今回書いたプログラムのポイントは…。
  • exeファイルの中にpng画像を含めてみた。これで、画像を描画するプログラムも、exeファイル1つを配布するだけで済む。別途、画像ファイルまで配布しなくて良い。
  • メモリ上(exeファイル内)のpng画像バイナリを読み込んで OpenGLのテクスチャとして利用している。

exeファイルにpng画像を含めるあたりは、xxd を使って、バイナリファイルをC言語のヘッダファイルの状態に変換して、#include で .c に内包してしまうことで実現してる。

_xxdというコマンドがあることを知った - mieki256's diary

安直かもしれないけれど、確実と言えば確実かなと…。ただ、バイナリのファイルサイズが大き過ぎる場合は問題が出てくるかもしれない。その場合は objcopy を使うことになるのかも。

_objcopyについて調べていた - mieki256's diary

メモリ上のpng画像バイナリを読み込むあたりは、stbライブラリ(stb_image.h)を使用。

以上です。

過去ログ表示

Prev - 2024/01 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project