An Embedded Engineer’s Blog

とある組み込みエンジニアの備忘録的なブログです。

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第8回「点・線・三角形を描く - VBO/VAOの基礎」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第8回「点・線・三角形を描く - VBO/VAOの基礎」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第8回「点・線・三角形を描く - VBO/VAOの基礎」 はじめに VBO/VAOとは VBO(Vertex Buffer…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第7回「マウスでカメラ操作」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第7回「マウスでカメラ操作」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第7回「マウスでカメラ操作」 はじめに 今回のゴール マウス操作の設計 操作方式の選択 座標系と水平面 クラス…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第6回「2D/3Dカメラの実装」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第6回「2D/3Dカメラの実装」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第6回「2D/3Dカメラの実装」 はじめに 今回のゴール 正射影と透視投影の違い 正射影(Orthographic Projection…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第5回「座標変換の基礎」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第5回「座標変換の基礎」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第5回「座標変換の基礎」 はじめに 座標系の理解 Model行列 View行列(Look At行列) Projection行列(透視投影) …

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第4回「シェーダー入門 - 虹色の三角形を描く」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第4回「シェーダー入門 - 虹色の三角形を描く」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第4回「シェーダー入門 - 虹色の三角形を描く」 はじめに コード構成のリファクタリング シ…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第3回「imguiを組み込む」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第3回「imguiを組み込む」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第3回「imguiを組み込む」 はじめに imguiとは imguiの基本構造 サンプルコード コードの解説 1. imguiの初期化 2…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第2回「GLFWでウィンドウを作る」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第2回「GLFWでウィンドウを作る」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第2回「GLFWでウィンドウを作る」 はじめに GLFWとは 最小限のウィンドウ表示 コードの解説 1. GLFWの初期…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング】 - 第1回「開発環境を整えよう」

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第1回「開発環境を整えよう」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第1回「開発環境を整えよう」 はじめに 必要なもの 開発環境の構築 1. プロジェクトディレクトリの作成 2. Pyt…

【GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 】- はじめに

GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第0回「このシリーズについて」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第0回「このシリーズについて」 はじめに このシリーズの趣旨 GitHub Copilotを活用した開発 対象読者 使用…

WSL + Visual Studio/Visual Studio CodeでC/C++開発環境構築

まえがき WindowsでWSL(Windwos Subsystem for Linux)にLinux環境をインストールして、Visual Studio/Visual Studio CodeでC/C++開発を行うための環境構築やTipsを記録として残しておきます。 今回はWSLのインストールおよび初期設定、起動・終了について記…

C++で任意のデータ型をシリアライズ - その4 使い方編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続き任意のデータ型(クラス/構造体)に対してシリアライズできるようにする方法について説明します。 ソース一式はGitHubで公開しています。 前提条件 今…

C++で任意のデータ型をシリアライズ - その3 テキスト形式シリアライズ編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続きテキスト形式でのシリアライズ処理の実装について説明します。 ソース一式はGitHubで公開しています。 前提条件 今回実装したソースは以下の環境で…

C++で任意のデータ型をシリアライズ - その2 バイナリ形式シリアライズ編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続きバイナリ形式でのシリアライズ処理の実装について説明します。 ソース一式はGitHubで公開しています。 前提条件 今回実装したソースは以下の環境で…

C++で任意のデータ型をシリアライズ - その1 インタフェース定義編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 プログラムで扱っているデータをネットワーク経由で送受信する場合や、ファイルに保存する場合にはシリアライズ(直列化)してバイナリ配列や文字列などに変換する必要があ…

C++でログ出力

まえがき 今回は、以下のような機能を持ったログ出力クラス(Logger)を実装します。 Infomation / Warning / Errorのログを使い分けられる 各ログは分かりやすいように色付きで表示 文字列フォーマッティング対応 マルチスレッド時の排他処理 同時にファイル…

C++でスタックトレース(関数コール履歴)の取得

まえがき 今回は、前回に引き続き、C++で例外発生箇所と状況を特定するために、スタックトレースを取得する方法を実装します。 前提条件 今回実装したソースは以下の環境でビルド、動作確認しています。 OS Ver Compiler Remarks Windows 10 Visual Studio 2…

C++で例外発生箇所(ファイルパス/ファイル行番号/関数名)の特定

まえがき 今回は、C++で例外発生箇所を特定する方法についてです。 C++やC#といったオブジェクト指向言語では、エラー処理は例外(Exception)という機構を使うことが一般的です。 C++では、例外をthrowするときにエラー情報を文字列として渡すことで、例外をc…

C++で文字列フォーマッティング(書式付き文字列生成)

まえがき C++でprintfライクな文字列フォーマッティングの実現方法です。 C++で文字列フォーマットをする方法はいくつかあります。 標準では、std::coutなどのiostreamを使った方法ですが、個人的にはちょっと使いづらいです。 C++20では、formatライブラリ…

C++でソケット通信 (UDPマルチキャスト/ブロードキャスト編)

まえがき ソケットを使ったEthernet通信の実装方法メモです。 今回は、前回に引き続きC++でUDPマルチキャスト/ブロードキャスト通信を行うための機能を実装します。 ソケット通信は、OSによって実装方法が異なるので、Windows / Mac / Linuxそれぞれの実装を…

C++でソケット通信 (UDPユニキャスト編)

まえがき ソケットを使ったEthernet通信の実装方法メモです。 今回は、C++でUDPユニキャスト通信を行うための機能を実装します。 ソケット通信は、OSによって実装方法が異なるので、Windows / Mac / Linuxそれぞれの実装を行い、環境によって自動的に切り替…

ClangNet(libclang)で構文解析サンプル - その1 (関数コールツリー、関数クロスリファレンス)

まえがき 今回はClangNet(libclangの.NET(C#) Binding)を使った実用的な構文解析のサンプルを作成してみます。 今回作成するサンプルでは、以下の2つの情報を出力する機能を実装します。 関数コールツリー 関数クロスリファレンス(宣言/定義/コール)情報 Cla…

ClangNet(libclangの.NET(C#) Binding) Ver.1.1.0リリース

リリースノート ClangNetのVer1.1.0をリリースしました。 変更点: 1. LLVM/Clang Ver.9.0.0に対応 2. いくつかの不具合を修正 ダウンロード先&インストール方法 libclang.dllやClangNetは以下からダウンロードしてください。 LLVM/Clang Ver.9.0.0 : Link Gi…

ClangNet(libclangの.NET(C#) Binding)によるC/C++ソースコードの解析 - その1

まえがき LLVM/Clangに同梱されているlibclangの.NET(C#) Bindingライブラリ(ClangNet)を作成しました。 libclangはC/C++/Objective-Cソースコードの解析や自動補完機能を提供する高レベルのAPIで、オリジナルはC言語ベースのAPIが提供されています。 C言語…

Python学習メモ - その8

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はディクショナリ(Dictionary)についてです。 ディクショナリ(Dictionary) ディクショナリはユニーク(一意)なキーとそれに対応する値を格納するコレクションです。 例えば、IDとそれに対…

Python学習メモ - その7

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はセット(Set)についてです。 セット(Set) セットはタプルやリストと同様、複数のデータをまとめて扱う場合に使用しますが、ユニーク(一意)な値を格納する順序なしのコレクションです。 …

Python学習メモ - その6

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はリスト(List)についてです。 リスト(List) リストは前回説明したタプルと同様、複数のデータをまとめて扱う場合に使用しますが、タプルとの違いは要素の追加や挿入、削除などが可能なこ…

Python学習メモ - その5

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はタプル(Tuple)についてです。 タプル(Tuple) プログラミングをしていると、複数のデータをまとめて扱いたいときがあります。 例えば、座標などがそうです。 座標は、x軸とy軸(3次元の場…

Python学習メモ - その4

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はビット演算、比較演算、論理演算についてです。 ビット演算 ビット演算はC言語などとほぼ変わらないので、特別異なる点のみ説明します。 シフト演算 print(2 << 3) print(4 >> 2) 実行…

Python学習メモ - その3

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回は基数についてです。 基数 基数は、各桁を構成する数値や記号の数を表し、簡単に言うと桁が繰り上がる数です。 この基数を使った数の表現方法を記数法と言います。 例えば、普段生活で使…

Python学習メモ - その2

まえがき 最近、Pythonを勉強し始めたので、その学習メモです。 今回は数値演算、数学関数についてです。 数値演算 まずは、数値演算です。 Pythonでは、標準で整数、浮動小数点数、複素数を取り扱うことができます。 整数や浮動小数点は、C / C++ / C#など…