12

ボタン、ボタン コンテナー、チャット ボックスなどを含むこの C++ プログラムを作成しており、テクスチャでラップしたいと考えています。

作成したすべての長方形の滑らかなエッジを生成したいのですが、CPU 使用率が高くなり、見栄えがよくないため、頂点プロット メソッドでその作業を実行したくありません。テクスチャ座標で動作します (つまり、 glVertex2f(x, y)を使用したglTexCoord (u, v ) w/c はクワッドであるため 4 のみにする必要があります)。

私はSDL_LoadBMP()を使用してテクスチャをロードしていましたが、 .bmpの形式しかロードできません (LoadBMP しかないと書かれているため、よくわかりません)。

だから私の質問は:

  • .bmp形式は透過性を処理できますか? もしそうなら、それを行う方法は?

  • SOILを使用して.gif形式または画像の透明度を処理できるその他の形式の画像を読み込むコード サンプルをいくつか見せてもらえますか?

  • クワッドは、背景を描画せずに、六角形や星のような不規則/多角形の形状を処理できますか?

追加の質問

*c++ opengl を介してレンダリングされるプリミティブ テキスト ボックスをインポートして、そこにあるテキストをクリップボードにコピーする方法を教えてください。私のプログラムのチャットセッションについて。


GL_POINTS を使用してテキストを描画する独自のライブラリを作成しましたが、ポイントが広がっているため、ウィンドウのサイズを変更すると見栄えがよくありません。プログラムをC++ のコア関数に依存させたくないのでconst char*、テキストを避ける必要があります。#include <*string*>

したがって、より良い解決策は、ビットマップを使用して描画することです。

画像を使用して描画することを提案する人もいるので、クアッドのみを使用して描画したいので、透過性が本当に必要です。

4

3 に答える 3

11

はい、ビットマップ形式透明度をサポートしています。

圧縮方法によって異なります。デフォルトのRGB方法は 24 ビット カラーをサポートしますが、BITFIELDS圧縮は 32 ビット カラー (24 ビット + アルファ チャネル) をサポートします。

詳細については、 http://en.wikipedia.org/wiki/BMP_file_formatをご覧ください。

私は Lime プロジェクトでそれをうまく使用しています。Haxe で書かれた実装は次のとおりです:

于 2015-04-12T03:43:40.520 に答える
1

この回答は、bmp ファイルが透明度を処理できるかどうか、および SOIL を使用して png ファイルをロードする方法についてのみ説明しています。このウィキペディアの記事によると、bmp はアルファ チャネルによる透過性をサポートするファイル タイプの 1 つです。しかし、このSOの記事によると、そうではありません。私自身の経験では、bmp の透過性を機能させる方法を見つけられませんでした。したがって、理論的には 32 ビットの bmp ファイルは透過性をサポートするはずですが、私はそれを疑っています。(もしかしたら私の言葉を食べてしまうかも?)

OK、SOIL Web サイトから、このコードは透明度を処理する png ファイルをロードする方法を示します。

/* load an image file directly as a new OpenGL texture */
 GLuint tex_2d = SOIL_load_OGL_texture
 (
       "img.png"
       SOIL_LOAD_AUTO,
       SOIL_CREATE_NEW_ID,
       SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB |
       SOIL_FLAG_COMPRESS_TO_DXT
 );
于 2013-01-07T12:05:28.320 に答える
0

Photoshop では、少なくとも 24 ビット深度の BMP 透明度が可能です。Matlab では「imwrite」のオプションとして表示されません。

于 2014-05-11T11:57:44.703 に答える