WebGL での 3D データ表示

さらに,以前作成した Web サーバ を利用して WebGL での表示に.

bool	test	(void)
{
	Vd2A	pts ;
	{
		pts.push_back(Vd2(  0,  0)) ;
		pts.push_back(Vd2( 70,  0)) ;
		pts.push_back(Vd2( 90, 50)) ;
		pts.push_back(Vd2(100,100)) ;
		pts.push_back(Vd2( 50,100)) ;
		pts.push_back(Vd2( 30, 70)) ;
		pts.push_back(Vd2( 40, 30)) ;
		pts.push_back(Vd2(  0,  0)) ;
		}
	vv_PLF	vvplf ;
	{
		Vd3A	v3a = ::ToVd3A(pts) ;
		Vd4A	v4a = ::ToVd4A(v3a) ;
		PLF	plf_l(PLF::line,v4a) ;
		PLF	plf_f(PLF::face,v4a) ;
		v_PLF	v_plf ;
			v_plf.push_back(plf_l) ;
			v_plf.push_back(plf_f) ;
			vvplf.push_back(v_plf) ;
		}
	{
		tstring	tmp_path = ::Get_i_Tools_tmp_date() ;
		tstring	out_name = ::Path_AddLastSP(tmp_path) + ::Now_Format(_T("%H%M%S")) + _T("__.htm") ;
		tstring	outtname = ::Path_AddLastSP(tmp_path) + ::Now_Format(_T("%H%M%S")) + _T("_t.htm") ;
		tstring	outnname = ::Path_AddLastSP(tmp_path) + ::Now_Format(_T("%H%M%S")) + _T("_n.htm") ;
		{
			GonsA	gnsa = ::PLF_ToGonsA(vvplf) ;
			::GonsA_ToWGL(gnsa,out_name.c_str()) ;
				gnsa = ::GonsA_Triangulation(gnsa) ;
			::GonsA_ToWGL(gnsa,outtname.c_str()) ;
				gnsa = ::GonsA_CalcNormal   (gnsa) ;
			::GonsA_ToWGL(gnsa,outnname.c_str()) ;
			}
		{
			::start_web_server(tmp_path) ;
			}
		}
	tstring	g3_d_exe = ::get_g3_d_exe() ;
	if (!g3_d_exe.empty()) {
		tstring	tmp_path = ::Get_i_Tools_tmp_date() ;
		tstring	ipl_name = ::Path_AddLastSP(tmp_path) + ::Now_Format(_T("%H%M%S")) + _T(".ipl") ;
		::To_ipl  (vvplf,ipl_name.c_str()) ;
		::start_g3_d(ipl_name.c_str()) ;
		}
	return	true ;
	}

簡易 Web サーバで WebGL

カテゴリー: .NET, 3D, WebGL, Windows | コメントする

Linux での GLUT 3D データ表示

昨日のコードをもう少し汎用的に修正.そしてそれを他から呼出せるように変更.
次の様なコードで 3D データを生成して,GLUT で表示できる様にした.

bool	test	(void)
{
	Vd2A	pts ;
	{
		pts.push_back(Vd2(  0,  0)) ;
		pts.push_back(Vd2( 70,  0)) ;
		pts.push_back(Vd2( 90, 50)) ;
		pts.push_back(Vd2(100,100)) ;
		pts.push_back(Vd2( 50,100)) ;
		pts.push_back(Vd2( 30, 70)) ;
		pts.push_back(Vd2( 40, 30)) ;
		pts.push_back(Vd2(  0,  0)) ;
		}
	vv_PLF	vvplf ;
	{
		Vd3A	v3a = ::ToVd3A(pts) ;
		Vd4A	v4a = ::ToVd4A(v3a) ;
		PLF	plf_l__ (PLF::line,v4a) ;
		PLF	plf_f__ (PLF::face,v4a) ;
		v_PLF	v_plf ;
			v_plf.push_back(plf_l__) ;
			v_plf.push_back(plf_f__) ;
			vvplf.push_back(v_plf) ;
		}
	tstring	txt_name = ::g3_d_get_txt_name() ;
	{
		tstring	tmp_path = ::Get_i_Tools_tmp_date() ;
		tstring	ipl_name = ::Path_AddLastSP(tmp_path) + ::Now_Format(_T("%H%M%S")) + _T(".ipl") ;
		::To_ipl  (vvplf,ipl_name.c_str()) ;
		::SaveText(txt_name.c_str(),ipl_name) ;
		}
	{
		::exec_g3_d(txt_name.c_str()) ;
		}
	return	true ;
	}

g3_d_gl

カテゴリー: 3D, gcc, Linux, Windows | コメントする

GLUT を使用した 3D データの表示

個人的なメモです.
4 年位前に作成したコードで,凹多角形がうまく処理できていないものがあったのでその変更.

#include	"glut_cg.hxx"
#include	"gonsa_to.hxx"

#define		TIMING_DN	1000

//	int	_tmain	(int argc, _TCHAR* argv[])
int		main	(int argc,   char* argv[])
{
	{
		GonsA	gnsa ;
		{
			tstring	buf ;	buf.resize(1000) ;
			while (std::terr << _T("file ? =") , std::tin.getline(&buf[0],buf.size()))
			{
				tstring	str = buf.c_str() ;
				if 	(str == _T("q"))    {	break ;		}
				else if (str == _T("Q"))    {	break ;		}
				str = ::QuotM_Del_All(str) ;
				if (str.empty())            {	continue ;	}
				if (::File_IsNothing(str))  {	continue ;	}
				tstring	in_file = str ;
				gnsa = ::To_GonsA(in_file.c_str()) ;
				gnsa = ::GonsA_Triangulation(gnsa) ;		//	2023/06/27
				gnsa = ::GonsA_CalcNormal   (gnsa) ;		//	2023/06/27
				if (gnsa.size() > 0)        {	break ;		}
				}
			if (gnsa.size() == 0)           {	return	0 ;		}
			}
		::set_GonsA(gnsa) ;
		::set_Extent(::GonsA_GetExtent(gnsa)) ;
		}
	::glutInitWindowPosition(200,200) ;
	::glutInitWindowSize    (600,400) ;
	::glutInitDisplayMode   (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) ;
	::glutInit              (&argc,argv) ;
	::glutCreateWindow      (argv[0]) ;
	::glutReshapeFunc       (cv_resize) ;
	::glutDisplayFunc       (cg_display) ;
	::glutKeyboardFunc      (cv_keyboard) ;
	::glutMouseFunc         (cv_mouse) ;
	::glutMotionFunc        (cv_motion) ;
	::glutTimerFunc         (TIMING_DN,cv_timer,TIMING_DN) ;
	::cv_init               () ;
	{
		::glEnable(GL_LIGHTING) ;
		::glEnable(GL_LIGHT0) ;
		}
	::glutMainLoop          () ;
	return	0 ;
	}

#include	"messbar.cxx"

t_gl_b_3.cpp
t_gl_b_3.exe

カテゴリー: 3D, Linux, Windows, メモ | コメントする

warning C4305:

先日次の様なコードを書いていた.塗りつぶして表示する時の色の補正.

	ColorRGB	colRGB = ::ColorRefToRGB(pgs1.GetColor()) ;
	{
		float	rgbcol = colRGB.R + colRGB.G + colRGB.B ;
		if (rgbcol < 0.20*3) {
			if (colRGB.R < 0.20)	{	colRGB.R = 0.20f ;	}
			if (colRGB.G < 0.20)	{	colRGB.G = 0.20f ;	}
			if (colRGB.B < 0.20)	{	colRGB.B = 0.20f ;	}
			}
		if (0.80*3 < rgbcol) {
			if (0.80 < colRGB.R)	{	colRGB.R = 0.80f ;	}
			if (0.80 < colRGB.G)	{	colRGB.G = 0.80f ;	}
			if (0.80 < colRGB.B)	{	colRGB.B = 0.80f ;	}
			}
		}

ColorRGB.R などは float で,RGB のそれぞれを 0.0 ~ 1.0 で表現したもの.
最初 if (colRGB.R < 0.25) { colRGB.R = 0.25 ; }  の様にしていたが,0.2 に変更した.
すると C4305 の warning .0.2f の様にすれば良いのはわかっているが,他の値で調べてみた.


0.0 , 1.0 , 7.0 などは大丈夫だが,0.2 や 7.1 は C4305 になってしまう.
warning C4305: '=' : truncation from 'const double' to 'float'
コンパイラやオプションの指定にもよると思うが,float で表現できない場合のみ warning となるのか?

カテゴリー: VC, Windows | コメントする

Synology NAS DSM 7.2

Synology NAS DS220+ で DSM 7.2 に更新ができる様になっていた.
本当は DS116 で試してからにしたかったが…  DS220+ を更新した.
DSM の更新は 30 分程度.その後 Joomla! や WordPress などで 30 分.


今回の更新で,Joomla! は 3.10 から 4.2.9 に,WordPress は 5.8.3 から 6.1.1 に.
まだ全ての確認はできていないが,以前の更新と比べて影響は少なそう.
DSM 7.1DSM 7
DSM 7.2  Web Station  Web サービス

カテゴリー: Synology NAS | コメントする

SetForegroundWindow

他 AP から,HWND を指定して前面に移動する方法.

bool	Window_Foreground	(HWND hWnd)
{
	if (hWnd == NULL)	{	return	false ;		}
	if (!::IsWindow(hWnd))	{	return	false ;		}
	{
		if (::IsIconic(hWnd)) {
			WINDOWPLACEMENT	wndpl = { 0 } ;
			::GetWindowPlacement(hWnd,&wndpl) ;
			wndpl.showCmd = SW_RESTORE ;
			::SetWindowPlacement(hWnd,&wndpl) ;
			}
		SetForegroundWindow(hWnd) ;
		}
	return	true ;
	}

SetForegroundWindow


CWnd::SetWindowPos(&wndTopMost,…)

カテゴリー: Windows | 1件のコメント

FBX SDK 2020.3.4

Windows Update があり,それに合わせて VS も更新.
その VS のリリース情報をみると,FBX に関するものが幾つかあった.
それで FBX SDK のページを見ると 2020.3.4 があった.
今回から VS 2015 は外れ,VS 2022 までになったみたい.他にも 32 ビット版が外れている.
FBX SDK 2020.3.4

カテゴリー: FBX | コメントする

ゼロからの OS 自作入門 第 3 章

main.cpp のコンパイル,リンク.
$ cd ~/workspace/mikanos
$ git checkout osbook_day03a
$ cd kernel
$ clang++ -O2 -Wall -g –target=x86_64-elf -ffreestanding -mno-red-zone -fno-exceptions -fno-rtti -std=c++17 -c main.cpp
$ ld.lld –entry KernelMain -z norelro –image-base 0x100000 –static -o kernel.elf main.o
第 3 章 min.cpp コンパイル,リンク
ブートローダのビルドと実行.
$ cd ~/edk2
$ source edksetup.sh
$ build
$ ~/osbook/devenv/run_qemu.sh Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi ~/workspace/mikanos/kernel/kernel.elf
第 3 章 ブートローダのビルドと実行
うまくいっているのか,ちょっとわからず.


2023/06/15
$ cd ~/workspace/mikanos
$ git checkout osbook_day03b
$ cd ~/edk2
$ source edksetup.sh
$ build
$ ~/osbook/devenv/run_qemu.sh Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi ~/workspace/mikanos/kernel/kernel.elf
第 3 章 白で塗りつぶす


$ cd ~/workspace/mikanos
$ git checkout osbook_day03c
$ source ~/osbook/devenv/buildenv.sh
$ cd ~/workspace/mikanos/kernel/
$ clang++ $CPPFLAGS -O2 –target=x86_64-elf -fno-exceptions -ffreestanding -c main.cpp
$ ld.lld $LDFLAGS –entry KernelMain -z norelro –image-base 0x100000 –static -o kernel.elf main.o
$ cd ~/edk2
$ source edksetup.sh
$ build
$ ~/osbook/devenv/run_qemu.sh Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi ~/workspace/mikanos/kernel/kernel.elf
第 3 章 適当な模様?
これもうまく動作しない.どうも kernel の呼出しがうまく行っていない?

カテゴリー: OS | コメントする

ゼロからの OS 自作入門 第 2 章

本にある通り
$ cd ~/workspace/mikanos
$ git checkout osbook_day02a

$ cd ~/edk2
$ ln -s ~/workspace/mikanos/MikanLoaderPkg ./

$ source edksetup.sh
$ build
第 2 章 Conf/target.txt を設定していないため Failed
Conf/target.txt を「表 2.1」に変更しなければならない?


すると今度は…

build.py...
/home/iwao/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc(...): error 4000: Instance of library class [RegisterFilterLib] is not found
	in [/home/iwao/edk2/MdePkg/Library/BaseLib/BaseLib.inf] [X64]
	consumed by module [/home/iwao/edk2/MikanLoaderPkg/Loader.inf]

第 2 章  error 4000 Instance of library class [RegisterFilterLib] is not foud
error 4000: Instance of library class [RegisterFilterLib] is not found」で検索すると
FAQ(よくある質問とその回答)
次の方法で対応.
$ git checkout 38c8be123aced4cc8ad5c7e0da9121a181b94251
うまくビルドできた.
第 2 章 Hello Mikan World


$ cd ~/workspace/mikanos/
$ git checkout osbook_day02b
$ cd ~/edk2/
$ source edksetup.sh
$ build
$ cd Build/MikanLoaderX64/DEBUG_CLANG38/X64/
$ ~/osbook/devenv/run_qemu.sh ./Loader.efi
第 2 章  day2b hello


2023/06/09 メモリマップの確認
第 2 章 メモリマップ

カテゴリー: OS | コメントする

QNAP NAS 証明書の更新

QNAP NAS の Let’s Encrypt での証明書の更新が安定しない.
以前は,自動で更新できていた頃もあったと思う
手動で「証明書更新」としても,うまく更新できない.
今回は,代替名の ts.mish.work を外して,証明書を取得することができた.
QNAP NAS 証明書の更新

カテゴリー: QNAP NAS | コメントする