m_pDevice->CreateTexture( 128, 128, 1, 0, D3DFMT_A32B32G32R32F,
D3DPOOL_MANAGED, &pTex, NULL );
で生成したテクスチャに浮動小数点の値を
自分で書き込みたいのですが、うまくいきません。
テクスチャのサーフェスをロックしたあと、操作できるようですが・・
ソースコードを記述します。
D3DLOCKED_RECTrect;
LPDWORD data;
float a = 0.0;
float r = 0.56;
float g = 0.24;
float b = 1.0;
/* テクスチャのサーフェスをロック */
surface->LockRect(&rect, NULL, 0);
for(int y=128-1; y>=0; y--){
/* 書き込む行の先頭アドレスに移動する */
data = (LPDWORD)((LPBYTE)rect.pBits + rect.Pitch * y);
for( int x=0; x<128; x++){
/* カラーデータを書き込む */
*data = ((DWORD)a << 96) | ((DWORD)b << 64) |
((DWORD)g << 32) | ((DWORD)r );
data++;
}
}
スペースで余白を空けることができなくて、少々見にくくなってしまいました。
1つの色につき32bitななので、32bitづつシフトしています。
また、float型は4バイト(32bit)なので間違ってはいないと思うのですが・・。
何かアドバイスできる方はお願い致します。
No.1ベストアンサー
- 回答日時:
>生成したテクスチャに浮動小数点の値を書き込みたい
書き込みたいのか浮動小数点をカラーに使いたいのかどちらですか?
プログラムは後者のようですが。。。
>うまくいきません。
質問者さんに限ることではありませんが、質問する人が、
どのような結果を期待して、どのような結果になったのかを
提示してもらわなければアドバイスのしようがありません。
>for( int x=0; x<128; x++)
このループの意味はおわかりですか?
dataは書き込む先頭ですよね?
先頭のアドレスから128回しか書き込んでないようですが、
直線がちょこっとでるだけのような。。。
私が昔書いたものですが、
RECT Rect;
D3DLOCKED_RECT LockRect;
m_Textuer->LockRect(0, &LockRect, &Rect, 0);
for ( int y = Rect.top; y < Rect.bottom; y++ )
{
unsigned short *p = pBits;
pBits += LockRect.Pitch / sizeof(short);
for ( int x = Rect.left; x < Rect.right; x++ )
{
*p++ = usColor;
}
}
m_Textuer->UnlockRect(0);
こんなかんじ:-p)
ご回答ありがとうございます。
いろいろ調査したところ・・
data = (LPDWORD)((LPBYTE)rect.pBits + rect.Pitch * y);
の部分の(LPDWORD)を(float*)にしたら解決しました。
>質問者さんに限ることではありませんが、質問する人が、
>どのような結果を期待して、どのような結果になったのかを
>提示してもらわなければアドバイスのしようがありません。
確かにその通りですね。
次回からはもう少し具体的に投稿しようと思います。
わざわざソースを載せていただきありがとうございます。
aris-wizの書いていただいたものも1つの参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
if と配列の組み合わせ
-
足して100になるような乱数のア...
-
このプログラミング誰か教えて...
-
system関数がうまくいかない
-
【C++】関数ポインタの使い方
-
int16_t の _t は何?
-
C#の質問
-
エラー 添字が付けられた値が、...
-
構造体の勉強中です 合計点の高...
-
C言語 配列と関数の練習問題
-
c言語 〇×ゲーム
-
商と剰余を同時に求める(C言語)
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報