スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

開設記念の挨拶的ななにか!


CS1.6、CSO、osu!、Portal2、L4D2、Terraria等を
中心に遊んでいます・・・が!!
.NETプログラミングを中心に取り扱っていきたいなぁと思います。
開発中や勉強中の内容や、使えるサンプルコード、使える(?)カスタムコントロール集、一言集。
たまぁにゲームも。

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

Direct2DのMatrix3x2の乗算

こんにちわ。

以前より、DirectXとかでMatrixの合成等を行っていました。
今回都合によりDirect2Dを利用する事になり、色々とお勉強してたんですが。
C++からDirect2Dを使う場合、Matrix3x2クラスにoperator*が実装されているので
簡単に乗算ができたんですが、.NETから利用するとoperator*が実装されてないので
自力で行列演算をしなくてはいけません。
たとえば平行移動と回転を掛け合わせる場合、各要素を計算しないといけないのですがその説明をします。

説明というか、まぁこんな感じだよ的な。

こんなMatrix3x2があったとします。
Matrix3x2

こいつは実はこういう風に解釈します。
Matrix3x3

これで列数が合うので簡単に乗算ができます。
乗算はこんな感じ。

Matrix3x2乗算

VisualBasicでMicrosoft.WindowsAPICodePack.DirectX.Direct2D1を扱う場合には
こんな感じで関数を作ると便利です。ソース1

よくある事で、平行移動、回転、縮小拡大行列を合成したいなという場合は
こんな感じで関数をもう一つ作ると便利です。

ソース2





.NETでバーコード生成するクラスを自作する

こんばんは。

仕事でバーコードを表示したいなぁ
なんて事になりました。

んで、きっと楽に生成できる良いライブラリやサンプルコードがあるだろうな

なーんて思ってたんですが

ざっくり調べたらほとんど有料だったり、めんどくせぇライセンス認証があったり。

んでしかも日本語記事一つも見つからねぇよ
ってなったんで、仕様調べてさくっと作っちゃいました。

さくっと作ったので細かい部分はあまり手を入れてませんが
そこは改造でもして利用して下さい。

さて、バーコードと言ってもいろんな種類(規格)があります。

今回作ったのは利用も多く、歴史も古く、ほとんどのリーダーで読み込める(だろう)という理由で
CODE-39を採用。
仕様はこれね https://en.wikipedia.org/wiki/Code_39

以下がサンプルソースです。



Imports System.Drawing
'''CODE-39規格に対応したバーコードを生成するクラスです。利用できる文字列は[0-9]、[A-Z]、-(ハイフン)、.(ドット)、スペース、$(ダラー)、/(スラッシュ)、+(プラス)、%(パーセント)です
Public Class Code39
Private _code As String
'''バーの太さ
Private _barwidth As Integer = 1
Private _imageWidth As Integer
Private _barcodeHeight As Integer = 60

#Region "プロパティ"
'''バーコード画像の高さ(ピクセル単位)
Property BarcodeHeight As Integer
Get
Return _barcodeHeight
End Get
Set(value As Integer)
_barcodeHeight = value
End Set
End Property
'''バーコードを表す文字列です
Property Code As String
Get
Return _code
End Get
Set(value As String)
_code = value
_imageWidth = (((_code.Length + 2) * 12) * _barwidth) + (((_code.Length + 2) - 1) * _barwidth)
If CodeCheck() Then
Else
RaiseEvent BarcodeError(New Exception("コードに指定した文字列内にCODE-39で表現出来ない文字が含まれています。"))
End If
End Set
End Property

ReadOnly Property BarcodeWidth As Integer
Get
Return _imageWidth
End Get
End Property

#End Region
#Region "CODE-39構造体"
'''Code39で表現できる文字とバーコードパターンを表す構造体
Private Structure Code39Char
Public chr As Char
Public pattern As String
Sub New(Chr As Char, Pattern As String)
Me.chr = Chr
Me.pattern = Pattern
End Sub
End Structure

Dim Code39Chars As Code39Char() = {
New Code39Char("0", "111221211"),
New Code39Char("1", "211211112"),
New Code39Char("2", "112211112"),
New Code39Char("3", "212211111"),
New Code39Char("4", "111221112"),
New Code39Char("5", "211221111"),
New Code39Char("6", "112221111"),
New Code39Char("7", "111211212"),
New Code39Char("8", "211211211"),
New Code39Char("9", "112211211"),
New Code39Char("A", "211112112"),
New Code39Char("B", "112112112"),
New Code39Char("C", "212112111"),
New Code39Char("D", "111122112"),
New Code39Char("E", "211122111"),
New Code39Char("F", "112122111"),
New Code39Char("G", "111112212"),
New Code39Char("H", "211112211"),
New Code39Char("I", "112112211"),
New Code39Char("J", "111122211"),
New Code39Char("K", "211111122"),
New Code39Char("L", "112111122"),
New Code39Char("M", "212111121"),
New Code39Char("N", "111121122"),
New Code39Char("O", "211121121"),
New Code39Char("P", "112121121"),
New Code39Char("Q", "111111222"),
New Code39Char("R", "211111221"),
New Code39Char("S", "112111221"),
New Code39Char("T", "111121221"),
New Code39Char("U", "221111112"),
New Code39Char("V", "122111112"),
New Code39Char("W", "222111111"),
New Code39Char("X", "121121112"),
New Code39Char("Y", "221121111"),
New Code39Char("Z", "122121111"),
New Code39Char("-", "121111212"),
New Code39Char(".", "221111211"),
New Code39Char(" ", "122111211"),
New Code39Char("*", "121121211"),
New Code39Char("$", "121212111"),
New Code39Char("/", "121211121"),
New Code39Char("+", "121112121"),
New Code39Char("%", "111212121")
}
#End Region

Sub New()

End Sub
''' コードを引数に指定して初期化します
Sub New(code As String)
Me.Code = code

If CodeCheck() Then
Else
RaiseEvent BarcodeError(New Exception("コードに指定した文字列内にCODE-39で表現出来ない文字が含まれています。"))
End If
End Sub
'''コードが適正かどうかを調べる
Private Function CodeCheck() As Boolean
Dim c As Char
For Each cs As Char In _code.ToUpper.ToCharArray
c = cs
If Array.Exists(Code39Chars, Function(x As Code39Char) x.chr = c) Then
Return True
Else
Return False
End If
Next
Return False
End Function
'''バーコードの画像を取得します
Public Overridable Function Render() As Bitmap
If _code.Length > 0 Then
Dim g As Graphics

Dim img As New Bitmap(_imageWidth, _barcodeHeight)
g = Graphics.FromImage(img)

Dim left As Integer
Dim sw As Boolean = True

Dim c As Char
Dim code As String = "*" & _code & "*"
For Each cs As Char In code.ToUpper.ToCharArray
c = cs
If Array.Exists(Code39Chars, Function(x As Code39Char) x.chr = c) Then
Dim s As String = Array.Find(Code39Chars, Function(x As Code39Char) x.chr = c).pattern
sw = True
For Each p As String In s.ToCharArray
If sw Then
g.FillRectangle(Brushes.Black, left, 0, CInt(p) * _barwidth, img.Height)
sw = False
Else
sw = True
End If
left += CInt(p) * _barwidth
Next

Else
RaiseEvent BarcodeError(New Exception("コードに指定した文字列内にCODE-39で表現出来ない文字が含まれています。"))
g.Dispose()
Return New Bitmap(1, _barcodeHeight)
End If

left += _barwidth
Next

g.Dispose()

Return img
Else
Return New Bitmap(1, 1)
End If

End Function

'''バーコードをSystem.Drawing.Graphicsオブジェクトを通して描画します
Public Overridable Sub Render(g As Graphics, point As Point)
If _code.Length > 0 Then
Dim left As Integer
Dim sw As Boolean = True

Dim c As Char
Dim code As String = "*" & _code & "*"
For Each cs As Char In code.ToUpper.ToCharArray
c = cs
If Array.Exists(Code39Chars, Function(x As Code39Char) x.chr = c) Then
Dim s As String = Array.Find(Code39Chars, Function(x As Code39Char) x.chr = c).pattern
sw = True
For Each p As String In s.ToCharArray
If sw Then
g.FillRectangle(Brushes.Black, point.X + left, point.Y, CInt(p) * _barwidth, _barcodeHeight)
sw = False
Else
sw = True
End If
left += CInt(p) * _barwidth
Next

Else
RaiseEvent BarcodeError(New Exception("コードに指定した文字列内にCODE-39で表現出来ない文字が含まれています。"))

End If

left += _barwidth
Next




Else

End If

End Sub

#Region "公開イベント"
Public Event BarcodeError(ex As Exception)
#End Region



バーコードクラス

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

音ゲー作成日記1

こんにちわ。
ひさしぶりの更新です。
現在、様々な経緯を経て、音ゲーの作成を進めております。
一部では知られてるんですが、一応その過程をブログに載せていこうかと思いました。
といってもソース等の公開予定は今のところありませんし、
音源等は他者から提供を受けるので、割とちゃんとしたものを作ろうと頑張っています。
以前UPした動画ですが、こんな感じで進めております。


まぁ頑張っていきたいと思います。

Minecraft 1.7.10 影MOD導入方法

こんにちわ。
他サイト等やWikiでしっかり載ってますので必要ないかもしれませんが、
各バージョン毎に若干違いがあったりするため、僕自身が困らない為に、今後残していこうと思います。
今回のバージョンは1.7.10


【影MOD導入に必要な物をダウンロード】
① Forge1.7.10 Latestで不具合が出るようならRecommendedを利用するといい様です。 ダウンロードMinecraftForgeDownloads.png


② GLSL Shaders Mod v2.3.18 for Minecraft 1.7.10 ダウンロード
ShadersMod.png


③ OptiFine HD A4 Ultra for Minecraft 1.7.10 ダウンロード
OptiFineHDA4Ultra.png

これで必要なMOD類は全て揃いました。
先ずは、Forgeを導入します。※既にForgeを導入してある場合は不要です。

【導入】
⑤ 一度、Minecraftで1.7.10用のプロファイルを作成し起動して、終了する。
⑥ ダウンロードしてきたForgeを実行し、Install clientでOKを押す。

これでForgeの導入は終わりました。次に落としてきたModを導入します。

⑦ プロファイルの保存されているフォルダ内にあるmodsフォルダを開き、「1.7.10」というフォルダを作成する。
※こうすると、各バージョン毎に適用させるmodを分ける事ができるのでバージョン違いのmod同士での競合が防げます。

※プロファイルの保存場所が分からない方はWindowsキー+Rを押すと出てくる「ファイル名を指定して実行」ダイアログに
「%homepath%\AppData\Roaming\.minecraft」と入力すると出てきます。
※公式ランチャーよりMinecraftプロファイルの保存場所を変更している場合は、そのフォルダ内を探して下さい。

⑧ 作成したフォルダ「1.7.10」の中に OptiFine_1.7.10影Mod本体 ShadersModCoreを入れる。
modsフォルダに入れる
⑨ 公式ランチャーを起動し、プロファイルからForgeを選んでMinecraftを一度起動して、終了する。
そうすると、プロファイルのフォルダ内にshaderpacksフォルダが作成されます。

【シェーダーの導入】
今回はおそらくもっとも有名であろうシェーダーのSEUSを利用したいと思います。
SEUS以外にもシェーダーはあるので、興味ある方は探してみて下さい。

⑩ SEUS v10.1をダウンロードする ダウンロード
SEUS.png

SEUS v10.1 Lite 動作が軽い。水シェーダーが無かったりする。現在(2014/8/30)はまだ準備中の模様
SEUS v10.1 Standard 普通ぐらい。まぁまぁ綺麗。
SEUS v10.1 Ultra 動作が重い。とても綺麗。
SEUS v10.1 Ultra DOF 距離に応じてぼやける効果(被写体深度)が入ってる為、非常に重い。記念撮影とかにはかなり良い。
SEUS v10.1 Ultra Motion Blur モーションブラーが入ってる為、非常に重い。動画撮影とかにはカッコいいかもしれないが動画側の編集でモーションブラー効果入れれたりするんで微妙。

ゲーム内で切り替えられるので、試しに全部落としてきてもいいかもしれない。


⑪ shaderpacksフォルダ内にSEUS V10.1を入れる
⑫ Minecraftを起動して、設定→Shadersから適用したいシェーダーを選択する
shaders設定
これで導入は完了です。

サンプル

こんな感じですね。

【おまけ】
実は、SEUSって中身いじれちゃいます。
たとえば、水の揺れの速度や大きさ、風でなびくブロックの指定や、揺れの大きさ、
太陽・月の傾きや、各種環境光の色、強さ、
水の色や透明度、光源の色や強さ、影の距離等々。
赤い水
これは水の色を赤にしています。透明度を下げることによってそれこそ血のような色になります。
血
こんな感じです。
光源を緑にするとこんな感じにります。
緑光源
どうでしょうか。
ここらへんの設定のいじり方等は別記事で書きたいと思います。
さらに他シェーダーの紹介もやれる範囲でやっていきたいなと思います。

それでは!





プロフィール

kazne

Author:kazne


色んなPCゲームで活動してます(した)
CSO CS1.6 CS:GO PAYDAY2 AVA BF3
Terraria Minecraft
etc...


【CSO】
サムライれんじゃー's xAlive
TeamWinorLose MuvLuv
MixingAge 天ぷらAttack CSO先生
unEvenness CorporateSlave
etc...
現在CSOJC2014 BEST8 (CorporateSlave)


【AVA】
CoSlave 爆破部門リーダー


職業はプログラマでSEで管理職です。
VB6 VBA VB.NET XML XAML C# C++ XNA DirectX SQL HTML JavaScript MicrosoftOffice WinServer WinAPIetc
このブログはプログラミングに関する記事を中心に
ゲームの事も絡めながら更新していこうと思います。多分・・・

最新記事
カテゴリ
月別アーカイブ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。