ホーム » 3D (ページ 3)

3D」カテゴリーアーカイブ

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930

カテゴリー

アーカイブ

ブログ統計情報

  • 99,469 アクセス


threejs requestAnimationFrame

使い方が間違ってた?


  function three_start() {
    init() ;
    loop() ;
    }
  function loop() {
    controls.update();
    renderer.clear();
    renderer.render( scene, camera );
    requestAnimationFrame( loop );
    }


正しくは loader / babylon
  function init() {
    // …
    animate() ;
    // …
    }
  function animate() {
    requestAnimationFrame( animate );
    render();
    }
  function render() {
    controls.update();
    renderer.render( scene, camera );
    }
この方法でも,環境により CPU リソースが食われる.


一先ずここまで
本当は,完全にロードが終わったタイミングが取れれば良いのだが…

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

threejs OrbitControls

以前(r58)調べた時,動作が変だったが…
  var controls = new THREE.OrbitControls( Camera, Renderer.domElement );
  controls.addEventListener( ‘change’, ThreeRender );
  controls.target.set(w/2,d/2,h/4) ;
  controls.update();
r84 では意図した動作になっている.


他にも幾つか動作を見直し中


r84 で
 3MFLoader は,うまく動作しない.
 AMFLoader は,テクスチャサポートなし?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

three.js OBJMTLLoader

以前調べた時と OBJMTLLoader の扱いが異なっているので,
 サンプルの該当部分を抽出.


r58
 var loader = new THREE.OBJMTLLoader();
 loader.addEventListener( ‘load’, function ( event ) {
  var object = event.content;
  object.position.y = – 80;
  scene.add( object );
  });
 loader.load( ‘obj/male02/male02.obj’, ‘obj/male02/male02_dds.mtl’ );


r66
 var loader = new THREE.OBJMTLLoader();
 loader.load( ‘obj/male02/male02.obj’, ‘obj/male02/male02_dds.mtl’, function ( object ) {
  object.position.y = – 80;
  scene.add( object );
  } );


r84
 var onProgress = function ( xhr ) {
  if ( xhr.lengthComputable ) {
   var percentComplete = xhr.loaded / xhr.total * 100;
   console.log( Math.round(percentComplete, 2) + ‘% downloaded’ );
   }
  };
 var onError = function ( xhr ) { };
 THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );
 var mtlLoader = new THREE.MTLLoader();
 mtlLoader.setPath( ‘obj/male02/’ );
 mtlLoader.load( ‘male02_dds.mtl’, function( materials ) {
  materials.preload();
  var objLoader = new THREE.OBJLoader();
  objLoader.setMaterials( materials );
  objLoader.setPath( ‘obj/male02/’ );
  objLoader.load( ‘male02.obj’, function ( object ) {
   object.position.y = – 95;
   scene.add( object );
   }, onProgress, onError );
  });


r74 から変更されていて,OBJMTLLoader が削除されたらしい.
https://github.com/mrdoob/three.js/releases?after=r75
Improved OBJLoader and MTLLoader and made OBJMTLLoader obsolete.
それで参考にさせてもらったのがここ
http://stackoverflow.com/questions/35380403/how-to-use-objloader-and-mtlloader-in-three-js-r74-and-later


他にも,OBJLoader のデータのチェックが厳しくなったみたいで,
r84 OBJLoader.js 632 行目で
 throw new Error( "Unexpected line: '" + line + "'" );


クラスによっては前からみたいだが,position が readonly .
position のメンバに対して代入すれば OK .


2023/08
https://dev.mish.work/wordpress/category/webgl/
https://itl.mish.work/_lib/js/i_lib/threejs/r131/c_3js_10.js

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

SceneJS

Cube.imo (0,0,0)-(1000,1000,1000) のデータに対して,
 translate X:-500 , y:-500 , z:500


spinYaw で,回転.spinPitch は上下方向.
yaw , pitch で最初の位置(角度で単位は度?).
zoom が中心までの相対位置?
zoomSensitivity は拡大率.
 yaw : 30 ,
 pitch : -10 ,
 zoom : 2500,
 zoomSensitivity : 100 ,
 spinYaw : 0.3 ,
cube_imo.html


yaw : 90 で右から.180 で後ろから.
pitch : -20 としているので,
 translate の y は中心でなく高さの 30% の位置にしている.
どうも材質の指定(obj の mtl など)は,効いてないみたい.
 script 内の type:”texture” , src: … で指定する?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win 10 10586 3D Builder

3MF 形式ではいたデータが,10586 にしてから開けないでいた.エラー : 0x80004005
model タグに,xmlns 属性が必要になった?
 <model unit= "millimeter " xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02 " >

ply だと,

3MF でのテクスチャは未だ.


2016/05/02 テクスチャなどの大文字,小文字も区別される?また,path も / から正しく指定する必要がある.
テクスチャの場合,colorid の指定が object の属性では効果がなくなった?
  triangle 内での指定が必要?


To3MF_1603.3mf
To3MF_1605.3mf
i_Tools i_S_asZ

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

3MF

今度は 3MF .
Win10 IP 10130 の 3D Builder では,テスクチャ付の 3MF がうまく読み込めてない?

それと,幾つかの 3MF は,XP 上で zip の解凍が出来ない.


2015/08/03
テクスチャ付の 3MF が開けなかったのは,出力された 3MF が完全でなかったみたい.
10130 の 3D Builder ではその様になるみたいで,テクスチャやサムネイルの情報が含まれてない?
10240 の 3D Builder で吐いた 3MF は,これらの情報が付加されていて正しく読み込みできる.


3D データ ビューア

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

AMF texture

AMF を調べていて,テクスチャ部分の変換テスト.


次の様なコードで,それぞれの色の成分の画像が出来ることを確認.
  inline AMF_Texture AMF_texture_To (const Xml_E& tex_e)
  {
     AMF_Texture tex ;
     if (tex_e.GetName() != AMF_texture) { return tex ; }
     tex.ID = tex_e.GetAttribute(AMF_id) ;
     tex.Width = ::ttou4 ( tex_e.GetAttribute(AMF_width)) ;
     tex.Height = ::ttou4 ( tex_e.GetAttribute(AMF_height)) ;
     tex.Texture = ::base64_decode(::To_v_char(tex_e.GetText())) ;
     {
       i_DIB dib ;
       dib.Create(tex.Width,tex.Height) ;
       for ( long y=0 ; y<dib.GetHeight() ; y++) {
         for (long x=0 ; x<dib.GetWidth () ; x++) {
           u_32 pc = *(dib.GetP_Pixel(x,y)) ;
           u_32 argb = pc ;
           if (unsigned(x+y*dib.GetWidth()) < tex.Texture.size()) {
             u__8 c = tex.Texture[x+y*dib.GetWidth()] ;
             argb = 0xff000000 + (c<<16) + (c<<8) + (c) ;
             }
           u_32* bits = (u_32*)dib.GetP_Bits() ;
           *(bits+(x+y*dib.GetWidth())) = argb ;
           }
         }
       tstring dibName ;
       {
         // …
         dibName = outPath + _T("\\") + tex.ID + _T("_") + ::To_tstring(Count) + _T(".dib") ;
         }
       ::HBITMAP_To(::ToHBITMAP(dib),dibName.c_str()) ;
       }
     return tex ;
     }


さらに,変更して


1.5 M 位の bmp をテクスチャとして求め,それを数100個?生成していて,メモリ不足.
原因はすぐわかったが,この上のコードでもある様に ToHBITMAP() で求めた HBITMAP を DeleteObject してない.
次の様にする必要がある.
   HBITMAP hBMP = ::ToHBITMAP(dib) ;
   ::HBITMAP_To(hBMP,dibName.c_str()) ;
   ::DeleteObject(hBMP) ;
幸いこの関係のコードを書いたのが今年になってからだったので,利用している部分は限定的.
検索をかけて変更が必要な所は 10 箇所程度?
  多くは,デバッグ版でのみ実行されるコード.


AMF_Texture のデータメンバを protected に.
v_char AMF_Texture::GetTexture() を用意して,それを利用する様に変更すると,デバッグ版で遅い.
ここでの対応はすぐわかったが,この類のコードが相当ありそう.
参照の関係の理解が不十分なので,もう少し調べる必要あり.


3D データ ビューア

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

頂点法線の計算

今まで GL_FLAT で処理していたので面の法線を利用していた.
そのため,既に法線の情報が設定されたデータでうまく表示できてないものがあった.
GL_FLAT での表示
glShadeModel(GL_SMOOTH) として,頂点に対して法線を設定することによりそれなりに表示する様にはなった.
GL_SMOOTH での表示


これらのデータの様に,頂点の法線を求める必要が出てきた.
ここ(スムージング角度)を参考にさせてもらい,何とかそれなりに表示できる様になった.
頂点の法線ベクトルを利用した表示


gonsfnc.hxx

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.