概要 Depthマップ欲しい事は多いと思います Depthの取得自体は簡単ですが、Depthの計算上 Z値とリニアで変化しないため感覚的にわかりにくいので リニアにしたい DepthをPNGファイルにすると 256段階に丸められてしまうため、浮動小数点形式で保存したいので EXR形式で保存したい Depthの取得は、別パスにて画面全体から取得する。UNITYではポストプロセスで行うのが楽UNITYちゃん 今回は題材にUNITY Chanを使う 何を使ってもいいし、UNITYの3DMeshでもいい ポストプロセス デプスは画面全体を取得する必要があるので、ポストプロセスで取得する ポストプロセスを使うには カメラに OnRenderImage関数の入ったスクリプトをつける using System.IO; usingUnityEngine; usingUnityEngine.Rende

ホーム 1.C++ を始める 2. 基本構文 3. コンテナ 4. ファイル分割とスコープ 5. ストリーム操作 6. メモリの管理 7. クラス 8. キャスト 9. テンプレート 10. エラー処理 11. ビルドとライブラリ 12. メモリレイアウト 単体テスト デバッグ ビルド自動化 付録 このサイトはC++ について説明した学習サイトです。本書を通じてC++ の開発環境や構文・単体テストの書き方などが 一通り学べるようになっています。 対象¶C++ を初めて学ぶ人 プログラム言語を 1 つ以上経験したことのある人 関数やクラス・オブジェクト指向に対する知識をある程度前提にします。C++ の特徴¶C++ は ビャーネ・ストロヴストルップ により開発されたプログラミング言語です。C++ には主に次のような特徴があります。 高パフォーマンス メモリ使用量が少ない 柔軟性
Cy#の河合です。今回、文字列生成におけるメモリアロケーションをゼロにする「ZString」というライブラリを公開しました。そこで、この記事ではZStringの紹介の他に、あらためてC#の文字列についてを深く分解して解説し、Stringの複雑さと落とし穴、そしてZStringの必要性について解説します。 [GitHub – Cysharp/ZString] 以下の表は `”x:” + x + ” y:” + y + ” z:” + z` という単純な文字列連結においてのパフォーマンス計測です。 それぞれ “x:” + x + ” y:” + y + ” z:” + z ZString.Concat(“x:”, x, ” y:”, y, ” z:”, z) string.Format(“x:{0} y:{1} z:{2}”, x, y, z) ZString.Format(“x:{0} y:

Intro (you can find a Youtube mini-explanation of this article here: https://www.youtube.com/shorts/TH3OTy5fTog) When doing procedural graphicsit's always agood idea to add color variation to the elements of the image. From grassblades, to grass clumps, to rocks or trees or hills, all scales of detail benefit from some color variation. In order to achieve this, one canemploy different methods

C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f
今年遭遇した、気づかないうちに嵌ってしまったUnityのパフォーマンス上の落とし穴を振り返っています。 part 2 です。 part 1 はこちら 今回は主に、Unity 独自の c# 実行環境である IL2CPP と、Unityエンジン部分の c# のAPI についての経験談を書いてみました。 4. IL2CPPの吐くコードサイズの爆発 IL2CPPとはなんぞや IL2CPP コードサイズ肥大化によって起こる問題 ビルドが通らない .NET 3.5 → .NET 4.6 でさらにコードサイズが爆発 メモリ使用量と実行速度 対策1. ジェネリック型の 型パラメータには int か enum を使う UniRx.Unit.Default Dictionary<TKey, TValue> 対策2. seald 修飾子 5. 無害に見えるUnityのAPIが実はアロケートを発生させてる件
以前TryRoslynと言われてたサービスですが、今はSharplabという名になっています。 このサービスを使うと、コードがILやネイティブコードにどのようにコンパイルされるか確認したり、実行したりオブジェクトのメモリ状態を確認できます。 例えば次の図は、構造体の文字列がどのようなメモリ状態なのかを示したものです。 Sharplabを使って、コードだけでなくメモリ状態を可視化することで理解を深めるきっかけにできるか見てみましょう。 概要 Sharplabの基本 いつ使うのか コードの共有 言語選択 表示の切り替え(Decompile) 言語ごとのデコンパイル結果の比較 Other Run C# のメモリ状態を確認する Boxing を可視化する 構造体における文字列の参照状態を確認する クラスにおける参照状態を確認する 概要Shaplabを使って可視化することで「分からないことを、何が

P/Invoke でWindowsAPI を呼び出す際、引数に構造体を渡すには、割と色々な方法があります。 最近ちょっと混乱したので、改めてまとめてみました。 これまで知らなかった便利な方法も紹介しています。 新機能でも何でもありませんが、よく P/Invoke を使われる方にはご一読頂いて損はない内容だと思います。 ちなみに、本記事では、C# で言う struct と class を総称して「構造体」と呼ぶこととします。 struct と class の区別が必要な場合は「struct」と「class」または「値型」と「参照型」と呼び分けます。本文中では「struct ≠ 構造体」ということにご留意ください。 なお、本記事の内容は、WindowsAPI の呼び出しに限定した内容になっています。 COM の場合はまた事情が違うのですが、そちらは割愛させて頂きます。 struct と
はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム この本には一冊の本に盛り込むにはやや欲張りな内容を詰め込みました。本書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 この本では、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを本書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう
COLLADAは最近出てきた3Dフォーマットの一つで、有名メーカが協賛している点は 数あるフォーマットの中でも変り種なのですが、野村XXの愛するLightWaveは蚊帳の外です。 というかNewtekの掲示板の書き込みを見ると、なんかどーでもいいよそんなのって雰囲気が漂ってました。 それはともかく、無いものは作ってしまえというわけでPluginを作り始めました。 あまりにもニッチな気がするので、国内に見切りをつけて(?)海外の皆さん向けにこっちのページで公開します。 興味をもたれた方は覗いてやってください。技術的にどーというもんでもないので、黙々とコードを書き連ねるのみです。 ちょっと困ったバグがあるので修正記事をお待ち下さい(04/12/27) 今回はOBBTreeによる衝突判定をXファイルで使ってみることにします。 といっても、もはや前回でコアの部分は出来てしまっているので、さくっと
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 課題 add.dllは重大なバグを持っています.本当なら2つの整数値の和を返す関数が、実は引き算を計算しています.これを使うmymain.exeは間違った計算結果を延々と表示し続けるプログラムです.私はこのバグを修正したいのですが,mymain.exeはミッションクリティカルなプロセスであるために,安易に再起動できません.果たしてmymain.exeの動作を停止させないで,こっそりとDLLのバグを修正することはできるのでしょうか? このように,プログラムの動作を停止させることなくメモリの内容を直接書き換えてバグを修正することをオンライン

mono においてGuid.NewGuid() でGuid がどうやって生成されているのかが気になったので、せっかくソースコードが公開されていることであるし、読んでみた。 また、NewGuid の実装には後述の通り RngCryptoServiceProvider が使われているので、結果として mono における乱数生成機(RNG)の造りも調べることになったという次第。 なお、全部丁寧に解説しようとするとモチベーションが折れるので、気分に応じてのおおざっぱな解説である。 前知識Guid とは:GUID -WikipediaUUID とは:UUID -WikipediaWikipedia を読めば分かるが、UUID やGuid は、 管理するサーバーなどなしに、一つのマシンの中だけで簡潔に生成できる (現実的な条件下では、ほぼ間違いなく)全世界において一意 という性質が

私はC++歴3年の学生趣味プログラマーです。 「C++はなぜヘッダと実装を分けなくてはならないのか/そもそも本当に分けなければならないのか」という質問です。C++といえば、ヘッダー部と実装部を.hファイルと.cppファイルに分けることが一般的とされている言語ですが、 これは同じオブジェクト指向言語のC#やJavaにはない特徴です。 そのせいでC++使いたちは今日もcppファイルとhファイルを行ったり来たりしながらコーディングする羽目になっています。(そしてVS使いはF12とCtrl+-を得意気に連打しています。) 私にとってもそれが当たり前になって久しいですが、 時々C++を学び始めたばかりの後輩から「なぜヘッダファイルに実装を書いてはならないのか」「なぜC++は二度も同じコードを書くことを強いるのか」と質問を受けます。 私はそのたびに「実装の隠蔽化」とか「循環参照の危険が云々」とか「そ

前回は、C++ソースで定義された関数を Cソース内でコールする場合に起こる問題について書きました。 そのキーワードが、「マングリング」でした。 前回:http://d.hatena.ne.jp/debian36/20080226 では、その問題を回避する方法、すなわちマングリングを避ける方法について、今日は記します。 ずばり、その答えが、extern "C" です。 この修飾子を見たことがあるかたも多いのではないでしょうか。 自分も、人のコードを見ていていると、たまに extern "C"{ .... .... } なんてコードが登場して、「ん〜、これは、C言語として解釈しろ」ってことなのかなぁってなんとなく思っていた程度でした。 確かに、extern "C" は、C言語として解釈して下さいよって、コンパイラ(g++)にお願いするものなのですが、なんのために、そのようなお願いをするのかと
MacPortsでswftools@0.9.2を入れようとしたら失敗した - kanonjiの日記、MacPortsで入れる代わりに自前でビルドしたライブラリを使ってswftoolsをビルドしてみた - kanonjiの日記で、ビルドする時のライブラリについての知識が足りず困ったので、ちょっと調べてみました。基本的にLinuxについて調べてて、Macについても分かったところがあるって感じです。 ちゃんとまとめるほど理解出来てるわけじゃないので、分かった事を並べる感じで書きます。勘違いしてたり、ちょっと用語がおかしかったりするかもしれません。LinuxとMacでは仕組みが違うLinuxではELF(Executable and Linking Format)という実行ファイルフォーマットがあって、この辺を調べていくとよくELFという単語を見かけます。Macはというと、Mach-Oという実

型変換については、第4章で簡単に説明しましたが、複雑な規則があり、迷うことの多い部分です。ですから、ここで少し詳しく算術型の型変換について説明してみようと思います。 なお、説明中で用いたコードの実行結果は「BorlandC++ Compiler 5.5」(int:4バイト short:2バイト char:1バイト)で確認をしています。 1.汎整数拡張 文字型や整数型などの汎整数型の場合、型が、int より小さな場合(char, signed char, unsigned char, short, unsigned short)は、演算の最初に int か、表現できなければunsigned int に変換されます。このとき、符号を含めてその値を変えることはありません。 (例)short a = 30000, b = 30000; printf("sizeof(a) = %d\n", siz
Cからasm,逆にasmからCを呼び出すために必要な手続きを呼び出し規約といいます.たとえば前回puts()を使う際に,文字列のポインタをpushしましたが,そういう手続きのことです. x86での規約は大きく分けて3種類あり,細かい部分についてはコンパイラ依存であることも多く,注意が必要です.しかし,ほぼすべてのコンパイラで共通である規約は簡単で覚えやすく,しかも移植性が高くなります.計算処理などOSに依存しにくい部分ではその規約のみに従って記述すれば,Windows/Linux/Macで同一のソースとすることができメンテナンスもしやすくなります. まずは基本の規約(cdecl)をしっかりと使いこなし,必要になってから他のその他の規約を学べばよいでしょう.詳細は呼出規約(Wikipedia)などを参考にしてください.拙文でも多少触れています. 汎用性の高い規約 Cとasmとの間で呼び出しあ
以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く