Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.1 ) |
- 名前:箱 日時:2018/03/15 06:35
うーん…。私の言葉づかいだと、いくつか禁止語句に引っかかる様で、リンク以外にも問題があるみたいで、
禁止語句に引っかかったがために、一部、カタカナにさせて頂いた旨を返信しようとしたら、
それも返信できなかったので、このコメントは短くなりました…。
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.2 ) |
- 名前:へけぽん 日時:2018/03/15 15:28
これだけなら貼れるかテスト
ht tps://www.fastpic.jp/images.php?file=9739469085.png
あと私も最近似たような疑問があって、そっちは無事に解決しました
ht tp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4315
ひょっとしたら関連してるかもしれません
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.3 ) |
- 名前:管理人 日時:2018/03/16 01:09
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.4 ) |
- 名前:箱 日時:2018/03/16 07:46
へけぽん さん、 管理人 さん、返信頂き、ありがとうございます。
読むのも嫌になる様な私の投稿を読んで頂けただけで、既に、とても嬉しく思います。ありがとうございます。
へけぽんさんの、DrawRotaGraph3 についてのスレッドは、しっかり読んだとは言えないものの、少し目を通しては居ました。
私も、とても似た問題だと思うのですが、私が試した結果としては、変わりがありませんでした。
(管理人さんが投稿された最新の"Windows版 VisualC++ 用"を試させて頂きました。)
私の投稿内容の中にある、バージョンと文字列の描画の話にある様に、同じVer3.19台だからか、
文字列が綺麗に描画できない点まで、同じ結果でした。
今のところは、文字列の点を考えて、Ver 3.16d を使う様にして居ます。
3.16dから3.19、3.19aまでの間で、どこから、どう変わるのかは調べて居ません…。
へけぽんさんの場合は、DrawRotaGraph3 に限定された症状の様ですが、
私の場合は、DrawRotaGraph系3種、どれも見た目では同じ結果になってしまいます。
何故か、1.0、等倍で指定せず、0.9 を指定すると、見た目としては、「本来はこうあるべき」姿に見えます。
1.0 の等倍以外や、角度が 0 ? の正位置以外の指定だと、正しい表示のされ方をして居る様に、個人的には感じます…。
先述の、文字列とバージョンの話については、メイリオ以外の複数のWindowsの基本?のフォントを指定したり、
1.0 以外の拡大率を指定してみたりしましたが、やはり、変に表示されてしまいました…。
ちなみに、文字列の描画については、
"文字列を任意の角度で表示したい"
と言う、過去のスレッドに登場するものを利用して居ます。
ht tp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=3547
DrawRotaStringToHandle です。
---
私の返信だと、何も参考にならなくて…と言うか、すみません…。
この土日は、返信する事ができないかも知れません。その点も、申し訳ないです…。
何とか解決したいとは思って居りますので、少なくとも、返信だけは、しっかりとさせて頂きます。
よろしくお願いします。
---
また、蛇足ですが、
OS : Win7 64bit
DirectXのバージョン : DirectX 11
Card name: NVIDIA GeForce GTX 750
Manufacturer: NVIDIA
Chip type: GeForce GTX 750
DAC type: Integrated RAMDAC
Display Memory: 4044 MB
環境 VS2015 community Ver 14.0.25425.01 Update 3 / VC++2015
と言った感じの環境となります。
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.5 ) |
- 名前:管理人 日時:2018/03/17 23:34
へけぽんさんにご指摘いただいた件とは別なのですね・・・
文字の描画結果と DrawRotaGraph のお話を同時に扱うと混乱しそうなので、とりあえず
DrawRotaGraph の問題から解決したいと思います
とりあえず手元の環境で以下のような『回転無し、拡大無しの DrawRotaGraph』を行うプログラムを組んでみましたが、
特に1ピクセルずれてしまうということはありませんでした
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 画像の読み込み
GrHandle = LoadGraph( "hako.bmp" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 回転無しで画像を描画
DrawRotaGraph( 320, 240, 1.0, 0.0, GrHandle, FALSE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
こちらに上記のプログラムをコンパイルした実行ファイルをアップしましたので、
よろしければ箱さんの環境でも上記のプログラムであれば正常に表示されるか試してみていただけないでしょうか? m(_ _)m
https://dxlib.xsrv.jp/temp/DrawRotaGraphTest.zip
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.6 ) |
- 名前:箱 日時:2018/03/19 10:37
管理人さん!延いては、へけぽんさん!ごめんなさい!
管理人さんに頂いた最新のコメントから、謎が、真相が解明されました…!
DXライブラリ側の問題では無いです!全ては私のせいでした…。
---
また、土日は忙しく、返信が遅れてしまって、ごめんなさい…。
今さっき、ようやくコメントを読ませて頂いた次第です。
---【道程(真相から…、真相だけ読んで頂いて構いません…。)】
管理人さんのコメントから、なるほど、何かの処理が干渉して居る可能性があるのか、
それを考慮して、最低限のコードでも確認されるかと言った感じで、テストして行けば良いのか、
当たり前の事なのに、全然、気が付かなかった…と言った感じに思いました。
それで、早速、アップして頂いたものを試してみると、正常に表示されるではないですか…。
これはまさか、私が入れ子にした奥の方で関数を使用して居るから、
途中で何かが干渉して居て、入れ子の中と外では結果が違うのか!?と思いまして、
色んな場所で関数を使用してみたのですが、問題が起きた場所も含め、
どこで使用しても正常に表示されたのです。
ですから、色々と可能性を考えまして、例えば、bmpでは無く、pngやjpgを用いて居たので、
それらだけで問題が起きるのか…等、試してみたのですが、変わらず正常でした。
そこで、自分で書いて用いた関数と、管理人さんの書き方を見比べてみましたところ、
そう言えば、描画角度、ラジアンで指定するところに、πを用いたりせず、
単純に、0.0と書いてあるなあ…と思いまして、まさか!と思ったら、そのまさかでした…。
---【真相】
要するに、描画角度を、ラジアン指定で、正位置を指定して居ると思って居たものの、
実際は、微妙に、僅かに、傾いて居た…と言うのが、真相の様です。
左と上側が増え、右と下側が減って居たと言う事は、きっと、ほんの僅かに右回転して居た、
右に傾いて居た…と言う事なのではないかと思います…。
---
結局、DXライブラリ側には何の問題も無く、環境に依るものでも無いのだと思います…。
ただのお騒がせなのですが、では一体、私は、どうして傾けてしまったのか、
どう指定して居たのかと言う話なのですが…。
私の、最初の投稿内容の、
> "DrawRotaGraph"を用いると、回転させずに?(ラジアンで0または2πを引数で指定)、"DrawGraph"と同じ様に表示しようとして居る筈が、
と言った文にある、"(ラジアンで0または2πを引数で指定)"と言う部分が問題で、
自分で、0または2パイと述べて居ますが、私は、2パイでしか指定した事がありませんでした。
つまり、0を用いて居るところ、2パイのところがあるのでは無く、
0と2パイは同じ角度を指して居るものだと思って居ました…。
もっと言えば、自分で、こんな風に書いて居るのに、正位置は0で示せる、0で書こうとは、
全く思って居ませんでした…。
私が、ラジアンと言うものについて無知と言うか、延いては数学、延いては基本的な学問…等について、
理解が及んで居ないと言うだけなのですが…。
恥の上塗りをします。言い訳をさせて頂きます…。
何故、こんな勘違いをしてしまったのか、
これは、私の様に勘違いしてしまう人は、きっと居る筈です…!居ます…!居るに違いありません…!
そんな方のためにも、勘違いしてしまった理由も書くべきだと思います…。
私は、あるサイトを参考にしました(恐らく、ばればれ。検索すれば一発…)。
#define PI 3.1415926 を定義して、
PI*2は360°、つまり、一回転だから、0°と同じで、
PI*2と0はラジアン指定だと同じ!と言った感じに説明されて居ました。
それは今思えば、正しい事で、でも、微妙に正しくない…のだと思います。
パイを二倍したら、ぴったり360度になるのが、ラジアンなのだと素人なりに理解します。
でも、それは、パイ…つまりは円周率と言う、3.14から始まる、
延々と続く小数点以下の数を持ってして…と言いますか、
#define PI 3.1415926 は、円周率であって完全な円周率では無いと言いますか、
PIを円周率の代わりとして用いた計算結果は、本来の正しい結果とは異なってしまうのだと、
素人なりに理解します。理解したつもりで居ます…。
つまりは、真相として語って居る様に、微妙に、傾いてしまう計算結果が、
出てしまって居るのだと思います…。
これは、ラジアンを使用する分には困らない程度に理解して居ようが理解して居まいが、
やっちゃう時は、やっちゃう…そんな気がします。そうだったら、私も、少しは救いがあります…。
---
まだまだ、恥の上塗りをしようと思えば、できるのですが、心が痛むので、このぐらいにしておきます…。
管理人さん、へけぽんさん、本当に、ごめんなさい…。お騒がせいたしました…。
傾けずに描画したいなら0をして居すれば良いなんてのは、当たり前が過ぎる事なのかも知れませんが、
ラジアン指定をする際に、例えば、この角度にするなら…とパイを用いた例を出すのは自然だと思いますが、
0の場合と、パイを用いた傾けた場合とを知ってさえ居れば、どこかに載ってさえ居れば、
こんな事には…なんて、思ってしまったりもします…。
私が、もし、誰かにラジアン指定について教える際には、0度は0、他はパイを用いるよ!と言った感じに、
説明しようと強く思いました…。0度も、パイに0を掛けてみれば良かったんですけどね…。
---
これにて、私としては、解決かな…と思いますが、
とりあえずは、管理人さんに返信頂いてから、行動しようと思います…。
(そう言えば、文字列の事も私は話にして居ましたね…。)
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.7 ) |
- 名前:管理人 日時:2018/03/20 01:35
|
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.8 ) |
- 名前:箱(解決) 日時:2018/03/20 22:57
管理人さん、 DrawRotaStringToHandle についての迅速な対応、ありがとうございます。
私個人としては、元通り、綺麗に描画される様になったと思います。
これで、最新のバージョンに、素直に移行する事ができて、とても嬉しいです。
本題の DrawRotaGraph については、確かに、問題は解決したのですが、
今回の様に、ドット絵の様な、ドット一つで見え方が大きく変わってしまう様な、
小さい、細かいピクセルの画像を用いてしまうと、
正位置は0.0で問題無いとしても、逆位置や、90度回転と言った、
綺麗に、逆に、横にしたいと思っても、
実際は、ほんの僅か、傾いてしまうラジアン指定の仕様?によって、
ドット絵レベルでは粗が気になる画像の乱れが起きてしまう様で、
悩ましいなあ…、他の方は、どうされて居るんだろう…と思ったりします。
私は、とりあえず、パイを、小数点以下を、どこまで含めるのか…によって、
画像によって、綺麗に描画できたりできなかったりしてしまう様なので、
パイに値を一つにしないで、いくつか用意して、与える…と言った感じの、
対処をしてみる事にしました。
色々、やり方はあると思うのですが、悩ましいです。
悩ましい気持ちも残っては居りますが、
問題の解決と言うか、何故なのか、謎が解決して、
また別件のバグを修正までして頂いて、
個人的には、とても有意義だったなと思います。
何と言うか、上手くコメントできなくて、すみません…。
素直に、管理人さん、へけぽんさん、本当に、ありがとうございました。
また機会があれば、恥を忍んで質問させて頂きます。
長々と、失礼しました。
|