WebGL three.js OBJLoader ‘l’
以前 OBJ 内の線の情報を使えないかと思い調べたが,その時はわからないでいた.
Wiki Wavefront .obj file を参考に OBJ ファイルを編集して three.js で読み込んだがうまく読めなかった.
ちょっと別件で詰まってしまったので気分転換に調べていたら…
次の様な指定だとうまくいきそうとわかった.
l 1/ 2/
l 1/ 2/ 2/ 3/ 3/ 4/ 4/ 1/
UWP アプリ
2016/03 に試してうまく動作しなかった UWP アプリ.
一度起動するがすぐにエラーメッセージ.
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘5a7750b3-af94-47d7-a064-b9adc49f8813_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘操作はサポートされていません。不明なエラー: 0x80040904’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————
「そんなもん」と思い触らないでいたが,DirectX があったので今の開発機で試してみた.
するとうまく動作する.
どこかの設定が違うのだろうか?それともライセンスの関係?
VC Linux でのデバッグ
VC Linux で GLUT
GLUT を使用したコード
ビルドするとリンクでのエラーとなってしまう.
1>------ ビルド開始: プロジェクト: T_GL2, 構成: Debug x64 ------ 1>ソースを検証します 1>リモートでソースを 'fedora' にコピーします 1>アーキテクチャを検証します 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Application Type\Linux\1.0\Linux.targets(184,5): warning : 配置で使用されるリモート システムに互換性のないプラットフォーム アーキテクチャ ('x64'、'ARM') があります。 1>アーキテクチャを検証します 1>リモート ビルドを開始しています 1>ソースをコンパイルします: 1>オブジェクトをリンクしています 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/obj/x64/Debug/main.o: in function `idle()': 1>D:\Document\VS\VS\2019\T_Linux\T_GL2\main.cpp(51): error : undefined reference to `glutPostRedisplay' 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/obj/x64/Debug/main.o: in function `display()': 1>D:\Document\VS\VS\2019\T_Linux\T_GL2\main.cpp(56): error : undefined reference to `glClear' 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/main.cpp:63: undefined reference to `glMatrixMode' 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/main.cpp:64: undefined reference to `glLoadIdentity' 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/main.cpp:65: undefined reference to `gluLookAt' 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/main.cpp:67: undefined reference to `glColor3d' ... 1>/usr/bin/ld : error : /home/Iwao/projects/T_GL2/main.cpp:165: undefined reference to `glutMainLoop' 1>collect2 : error : エラー: ld はステータス 1 で終了しました 1>プロジェクト "T_GL2.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
コマンドでの -l オプションにあたる指定が足りないため.
「リンカー」-「コマンドライン」-「追加のオプション」に以下を追加.
-lglut -lGL -lGLU
VC Linux の include 設定
VC Linux プロジェクトの include 設定
次のようなコードをビルドするのに include の設定がわからなかった.
#include <cstdio> #include "gettickc.hxx" int main() { printf("VC 2019 hello !\n"); for (long index = 0; index < 100; index++) { ::Sleep_ms(100); printf("hello \t"); fflush(stdout); if (index%5 == 4) { printf("\n"); } } printf("VC 2019 hello !\n"); return 0; }
MFC のプロジェクトなどであれば,次の所で指定している.
C:\Users\Iwao\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
共通のインクルードディレクトリは,次の様なもの.
\\DevS\Documents\Develop\_.SRC\__CPR_;\\DevS\Documents\Develop\_.SRC\__Iwao;…
ソース内で次の様に指定してもエラーに.
#include “\\DevS\Documents\Develop\_.SRC\__CPR_\i_define.hxx”
1>main.cpp 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Application Type\Linux\1.0\Linux.targets(412,5): error : g++ がコード 1 で終了しました。詳細については、出力ウィンドウでビルド出力をご確認ください (注: 出力ウィンドウで詳細を確認するには、ツール オプションでビルド出力の詳細度を変更する必要があります)。 1>プロジェクト "ConsoleApplication2.vcxproj" のビルドが終了しました -- 失敗。
他に #include “//devs/documents/develop/_.src/__cpr_/i_define.hxx” としてみたが変わらず.
Raspberry Pi でビルドするともう少しわかりやすいエラーの表示になった.
1>main.cpp 1>D:\Document\VS\VS\2019\T_Linux\ConsoleApplication2\main.cpp(18,10): error : \\DevS\Documents\Develop\_.SRC\__CPR_\i_define.hxx: そのようなファイルやディレクトリはありません 1>D:\Document\VS\VS\2019\T_Linux\ConsoleApplication2\main.cpp(18,10): error : #include "\\DevS\Documents\Develop\_.SRC\__CPR_\i_define.hxx" 1>D:\Document\VS\VS\2019\T_Linux\ConsoleApplication2\main.cpp(18,10): error : ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1>D:\Document\VS\VS\2019\T_Linux\ConsoleApplication2\main.cpp(18,10): error : compilation terminated. 1>プロジェクト "ConsoleApplication2.vcxproj" のビルドが終了しました -- 失敗。
いろいろやって,次の様に指定することでうまくいった.
#include “/mnt/_.src/__cpr_/i_define.hxx”
プロジェクトの設定で次のものを指定することでビルドできることを確認.
/mnt/_.src/__CPR_;/mnt/_.src/__Iwao;/mnt/_.src/__Mlt_;/mnt/_.src/_gcc;/mnt/_.src/Test
/mnt/_.src はマウントしている.
Linux から Windows 環境への接続
g++ インクルードパスの設定
Fedora への ssh 接続
Fedora では「設定」-「共有」-「リモートログイン」がそれにあたる.
VS でのリモートの設定 は「ツール」-「オプション」で開いた「クロスプラットフォーム」にある.
プロジェクトの設定も必要で「構成プロパティ」-「全般」の「リモートビルドマシン」.
これが合っていないとビルドエラーになる.
1>------ ビルド開始: プロジェクト: ConsoleApplication1, 構成: Release x64 ------ 1>Validating sources 1>Copying sources remotely to '192.168.1.34' 1>Validating architecture 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Application Type\Linux\1.0\Linux.targets(151,5): error : Current project architecture 'x64' is incompatible with the remote system architecture 'ARM' ('ARM'). Please switch the project architecture to 'ARM' in Configuration Manager. 1>プロジェクト "ConsoleApplication1.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
Ubuntu では ssh サーバが入っていないみたいで次のコマンドでインストール.
$ sudo apt install openssh-server
何故か password を受け付けない?
Win10 19h1 のコマンドプロンプトで次の様にしても接続できない.
C:\Users\Iwao\AppData\Local\Temp>ssh -l Iwao -p 22 192.168.1.39 Iwao@192.168.1.39's password: Permission denied, please try again. Iwao@192.168.1.39's password:
何か他の設定が足りないのか?
設定関連のドキュメントは次の所にあった.
Linux ワークロードのダウンロード、インストール、セットアップ
VC 2017 Linux プロジェクト
VC 2017 を弄っていたら,Linux のプロジェクトの作成が可能になっていたので試してみた.
どのタイミングだったか忘れたが,SSH 接続が必要になる.
今まで設定してある Raspberry Pi に接続してみた.
Raspberry Pi 側の設定は「Raspberry Pi の設定」-「インターフェイス」にある.
ビルド時に使用する include は以下にコピーされている.これは Raspberry Pi の /user/include と同じ内容?
C:\Users\Iwao\AppData\Local\Microsoft\Linux\HeaderCache\1.0\-1277036696\usr\include
ビルドして出来上がった .out は /home/pi/projects/…/bin/ARM/Release にある.
WebGL three.js r91 – r109
WebGL three.js の r91 以降の変更による影響のメモ
OBJ と MTL を使用しているので webgl_loader_obj_mtl.html の変更内容.
r91 → r96
var mtlLoader = new THREE.MTLLoader(); mtlLoader.setPath( 'models/obj/male02/' ); mtlLoader.load( 'male02_dds.mtl', function( materials ) { materials.preload(); var objLoader = new THREE.OBJLoader(); objLoader.setMaterials( materials ); objLoader.setPath( 'models/obj/male02/' ); objLoader.load( 'male02.obj', function ( object ) { object.position.y = - 95; scene.add( object ); }, onProgress, onError ); });
new THREE.MTLLoader() .setPath( 'models/obj/male02/' ) .load( 'male02_dds.mtl', function ( materials ) { materials.preload(); new THREE.OBJLoader() .setMaterials( materials ) .setPath( 'models/obj/male02/' ) .load( 'male02.obj', function ( object ) { object.position.y = - 95; scene.add( object ); }, onProgress, onError ); } );
→ r97
js/Detector.js がなくなった.
→ r99
r97 var onError = function ( xhr ) { };
r99 var onError = function () { };
→ r101
jsm が追加されている.
→ r105
style が main.css に.
→ r106
module を使用する様に変更されている.
→ r109
setTexturePath が使えなくなったのでコメントに.
// mtlLdr.setTexturePath (imoPath) ; mtlLdr.setPath (imoPath) ;
SDI exe で変換後ドキュメントを開く
SDI exe で,変換後のデータをそのまま開きたかった.
OnOpenDocument で開くことは可能だが,幾つかうまくない所がある.
CDocument の OnOpenDocument 前後の動作をデバッガで追いかけると,ビューの初期化が足りない.
CView* を求めて OnInitialUpdate で対応.
void CX__Doc::OnConvert() { if (GetPathName().IsEmpty()) { return ; } tstring new_name ; { // ... ::G3_to_NEW(...,new_name.c_str()) ; } { OnNewDocument () ; OnOpenDocument(new_name.c_str()) ; SetPathName (new_name.c_str()) ; { CFrameWnd* frame = (CFrameWnd*)AfxGetMainWnd() ; if (frame != NULL) { CView* view = frame->GetActiveView() ; if (view != NULL) { view->OnInitialUpdate() ; } } } } }