差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
en:stpc-sxxx-3568b [2026/11/14 01:21]
wjj Complete manual: chapters 3-7, pin definitions, development resources; add 3D teardown view
en:stpc-sxxx-3568b [2026/11/14 05:26] (当前版本)
wjj Typographic fix: en dash in 7.4 note
行 277: 行 277:
 } }
 .sml-3d{position:absolute;inset:0;display:none;z-index:4;background:#f3f6fa;}.sml-g-stage.on3d{height:430px;}.sml-g-stage.on3d>*:not(.sml-3d){visibility:hidden;}.sml-g-stage.on3d .sml-3d{display:block;}.sml-g-side.on3d{justify-content:flex-start;}.sml-g-side.on3d button.sml-g-thumb{flex:0 0 auto;min-height:38px;}button.sml-g-thumb[data-3d] svg{display:block;width:100%;height:100%;}@media (max-width:900px){.sml-g-stage.on3d{height:330px;}.sml-g-side{flex-wrap:wrap!important;gap:4px!important;}button.sml-g-thumb{flex:1 1 calc(33.333% - 3px)!important;min-width:0;}.sml-g-side.on3d button.sml-g-thumb{min-height:44px;}.sml-g-cap{max-width:calc(100% - 78px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}} .sml-3d{position:absolute;inset:0;display:none;z-index:4;background:#f3f6fa;}.sml-g-stage.on3d{height:430px;}.sml-g-stage.on3d>*:not(.sml-3d){visibility:hidden;}.sml-g-stage.on3d .sml-3d{display:block;}.sml-g-side.on3d{justify-content:flex-start;}.sml-g-side.on3d button.sml-g-thumb{flex:0 0 auto;min-height:38px;}button.sml-g-thumb[data-3d] svg{display:block;width:100%;height:100%;}@media (max-width:900px){.sml-g-stage.on3d{height:330px;}.sml-g-side{flex-wrap:wrap!important;gap:4px!important;}button.sml-g-thumb{flex:1 1 calc(33.333% - 3px)!important;min-width:0;}.sml-g-side.on3d button.sml-g-thumb{min-height:44px;}.sml-g-cap{max-width:calc(100% - 78px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}}
 +.sml-g-side{flex:0 0 168px;}
 </style></html> </style></html>
 <html><script> <html><script>
行 403: 行 404:
 <div class="sml-gallery"> <div class="sml-gallery">
 <div class="sml-g-head"><div><div class="sml-g-kicker">PRODUCT GALLERY</div><div class="sml-g-title">sTPC-SXXX-3568B Series · Exterior</div></div><div class="sml-g-note">Shown on the S156 model · click a view on the right</div></div> <div class="sml-g-head"><div><div class="sml-g-kicker">PRODUCT GALLERY</div><div class="sml-g-title">sTPC-SXXX-3568B Series · Exterior</div></div><div class="sml-g-note">Shown on the S156 model · click a view on the right</div></div>
-<div class="sml-g-body"><div class="sml-g-stage"><img id="sml-g-main" class="sml-g-main" src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front_v.jpg" alt="Front view · Full-flat capacitive touch glass, plastic bezel"><div class="sml-g-badge">PANEL PC</div><a id="sml-g-zoom" class="sml-g-zoom" href="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front.jpg" target="_blank" rel="noopener">Open full size ↗</a><div class="sml-3d" id="sml-3d"></div><div class="sml-g-cap" id="sml-g-cap">Front view · Full-flat capacitive touch glass, plastic bezel</div><div class="sml-g-count" id="sml-g-count">01 / 06</div></div>+<div class="sml-g-body"><div class="sml-g-stage"><img id="sml-g-main" class="sml-g-main" src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front_v.jpg" alt="Front view · Full-flat capacitive touch glass, plastic bezel"><div class="sml-g-badge">PANEL PC</div><a id="sml-g-zoom" class="sml-g-zoom" href="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front.jpg" target="_blank" rel="noopener">Open full size ↗</a><div class="sml-3d" id="sml-3d"></div><div class="sml-g-cap" id="sml-g-cap">Front view · Capacitive touch panel</div><div class="sml-g-count" id="sml-g-count">01 / 06</div></div>
 <div class="sml-g-side"><div class="sml-g-side-hd">06 VIEWS</div> <div class="sml-g-side"><div class="sml-g-side-hd">06 VIEWS</div>
-<button type="button" class="sml-g-thumb on" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front.jpg" data-idx="01" data-cap="Front view · Full-flat capacitive touch glass, plastic bezel"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_01.jpg" alt="Front view"></span><span class="sml-g-tx"><b>VIEW 01</b>Front view</span></button> +<button type="button" class="sml-g-thumb on" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_front.jpg" data-idx="01" data-cap="Front view · Capacitive touch panel"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_01.jpg" alt="Front view"></span><span class="sml-g-tx"><b>SLC</b>Front view</span></button> 
-<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_persp_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_persp.jpg" data-idx="02" data-cap="Perspective · Raised rear expansion bay, fanless structure"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_02.jpg" alt="Perspective"></span><span class="sml-g-tx"><b>VIEW 02</b>Perspective</span></button> +<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_persp_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_persp.jpg" data-idx="02" data-cap="Perspective · Main module"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_02.jpg" alt="Perspective"></span><span class="sml-g-tx"><b>SLC</b>Perspective</span></button> 
-<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_back_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_back.jpg" data-idx="03" data-cap="Back view · Brushed SUS201 stainless rear housing, VESA holes"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_03.jpg" alt="Back view"></span><span class="sml-g-tx"><b>VIEW 03</b>Back view</span></button> +<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_back_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_back.jpg" data-idx="03" data-cap="Back view · Mounting back plate"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_03.jpg" alt="Back view"></span><span class="sml-g-tx"><b>SLC</b>Back view</span></button> 
-<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_a_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_a.jpg" data-idx="04" data-cap="Lower I/O row · Power, serial, HDMI, LAN and USB in one row"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_04.jpg" alt="Lower I/O row"></span><span class="sml-g-tx"><b>VIEW 04</b>Lower I/O row</span></button> +<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_a_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_a.jpg" data-idx="04" data-cap="Lower I/O row · Power and network"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_04.jpg" alt="Lower I/O row"></span><span class="sml-g-tx"><b>SLC</b>Lower I/O row</span></button> 
-<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_b_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_b.jpg" data-idx="05" data-cap="Upper I/O row · SIM, antennas, speaker and GPIO header"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_05.jpg" alt="Upper I/O row"></span><span class="sml-g-tx"><b>VIEW 05</b>Upper I/O row</span></button> +<button type="button" class="sml-g-thumb" data-view="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_b_v.jpg" data-full="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_io_b.jpg" data-idx="05" data-cap="Upper I/O row · SIM and antennas"><span class="sml-g-tn"><img src="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_thumb_05.jpg" alt="Upper I/O row"></span><span class="sml-g-tx"><b>SLC</b>Upper I/O row</span></button> 
-<button type="button" class="sml-g-thumb" data-3d="1" data-idx="06" data-zip="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_3d.zip" data-lang="en" data-cap="Interactive 3D teardown · drag to orbit, scroll to zoom, click a part"><span class="sml-g-tn"><svg viewBox="0 0 44 30" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g fill="none" stroke="#0b5394" stroke-width="1.3" stroke-linejoin="round"><path d="M12 8 L22 3 L32 8 L22 13 Z"/><path d="M12 8 L12 20 L22 25 L22 13"/><path d="M32 8 L32 20 L22 25"/><path d="M17 5.5 L27 10.5" stroke="#8fb2d6" stroke-width="1"/></g></svg></span><span class="sml-g-tx"><b>VIEW 06</b>3D Teardown</span></button>+<button type="button" class="sml-g-thumb" data-3d="1" data-idx="06" data-zip="/dokuwiki/lib/exe/fetch.php?media=wiki:stpc_s156_3d.zip" data-lang="en" data-size="about 1.3 MB" data-rear="3" data-parts="[[&quot;机身中框&quot;,&quot;Mid Frame&quot;,&quot;#363a3f&quot;,0.0,1],[&quot;视窗玻璃&quot;,&quot;Front Glass&quot;,&quot;#101113&quot;,1.55,1],[&quot;显示模组&quot;,&quot;Display Module&quot;,&quot;#2a2e33&quot;,1.05,1],[&quot;后盖&quot;,&quot;Rear Cover&quot;,&quot;#f3f5f7&quot;,1.45,-1],[&quot;主板载板&quot;,&quot;Carrier Board&quot;,&quot;#2f6f59&quot;,0.55,1],[&quot;屏线组件&quot;,&quot;Panel Cable&quot;,&quot;#c9a227&quot;,0.55,1],[&quot;天线/顶条&quot;,&quot;Antenna Bar&quot;,&quot;#7b5ea7&quot;,0.6,-1],[&quot;固定卡扣&quot;,&quot;Clip&quot;,&quot;#8e99a6&quot;,0.3,-1],[&quot;固定卡扣&quot;,&quot;Clip&quot;,&quot;#8e99a6&quot;,0.3,-1],[&quot;紧固件&quot;,&quot;Fastener&quot;,&quot;#8e99a6&quot;,0.3,-1],[&quot;下侧接口座&quot;,&quot;I/O Block&quot;,&quot;#a45a52&quot;,0.45,-1],[&quot;接地弹片&quot;,&quot;Ground Spring&quot;,&quot;#9aa4b0&quot;,0.2,-1],[&quot;竖向排线&quot;,&quot;Vertical FPC&quot;,&quot;#c9a227&quot;,0.45,-1],[&quot;接地弹片&quot;,&quot;Ground Spring&quot;,&quot;#9aa4b0&quot;,0.2,-1],[&quot;喇叭&quot;,&quot;Speaker&quot;,&quot;#a45a52&quot;,0.45,-1],[&quot;主板组件&quot;,&quot;Main Board&quot;,&quot;#2f6f5c&quot;,0.75,-1],[&quot;前面框&quot;,&quot;Front Bezel&quot;,&quot;#191b1e&quot;,1.75,1]]" data-cap="3D Teardown · Part structure"><span class="sml-g-tn"><svg viewBox="0 0 44 30" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g fill="none" stroke="#0b5394" stroke-width="1.3" stroke-linejoin="round"><path d="M12 8 L22 3 L32 8 L22 13 Z"/><path d="M12 8 L12 20 L22 25 L22 13"/><path d="M32 8 L32 20 L22 25"/><path d="M17 5.5 L27 10.5" stroke="#8fb2d6" stroke-width="1"/></g></svg></span><span class="sml-g-tx"><b>SLC</b>3D Teardown</span></button>
 </div></div> </div></div>
 <div class="sml-g-specs"><div class="sml-g-spec"><b>RK3568</b><em>Quad Cortex-A55 · 1TOPS NPU</em></div><div class="sml-g-spec"><b>10.1″–21.5″</b><em>Three sizes · capacitive</em></div><div class="sml-g-spec"><b>Fanless</b><em>VESA / panel cutout</em></div><div class="sml-g-spec"><b>Dual OS</b><em>Android 11 / Ubuntu 22.04</em></div></div> <div class="sml-g-specs"><div class="sml-g-spec"><b>RK3568</b><em>Quad Cortex-A55 · 1TOPS NPU</em></div><div class="sml-g-spec"><b>10.1″–21.5″</b><em>Three sizes · capacitive</em></div><div class="sml-g-spec"><b>Fanless</b><em>VESA / panel cutout</em></div><div class="sml-g-spec"><b>Dual OS</b><em>Android 11 / Ubuntu 22.04</em></div></div>
行 536: 行 537:
     var zoom=document.getElementById('sml-g-zoom');     var zoom=document.getElementById('sml-g-zoom');
     var bs=document.querySelectorAll('button.sml-g-thumb');     var bs=document.querySelectorAll('button.sml-g-thumb');
-    var stage=st.parentNode, side=document.querySelector('.sml-g-side'); 
-    var host=document.getElementById('sml-3d'), v3=null; 
-    function to3d(btn){ 
-      stage.className='sml-g-stage on3d'; 
-      if(side) side.className='sml-g-side on3d'; 
-      if(!v3){ 
-        if(!window.SML3D){ cap.textContent=btn.getAttribute('data-cap'); return; } 
-        v3=window.SML3D(host,{url:btn.getAttribute('data-zip'),lang:btn.getAttribute('data-lang')}); 
-        v3.start(); 
-      } 
-    } 
-    function toPhoto(){ 
-      stage.className='sml-g-stage'; 
-      if(side) side.className='sml-g-side'; 
-    } 
     for(var i=0;i<bs.length;i++){     for(var i=0;i<bs.length;i++){
       bs[i].addEventListener('click',function(){       bs[i].addEventListener('click',function(){
行 556: 行 542:
         this.className='sml-g-thumb on';         this.className='sml-g-thumb on';
         var self=this;         var self=this;
-        var tot=bs.length; cnt.textContent=self.getAttribute('data-idx')+' / '+(tot<10?'0'+tot:tot); 
-        cap.textContent=self.getAttribute('data-cap'); 
-        if(self.getAttribute('data-3d')){ to3d(self); return; } 
-        toPhoto(); 
         st.style.opacity='0.35';         st.style.opacity='0.35';
         window.setTimeout(function(){         window.setTimeout(function(){
行 566: 行 548:
           st.style.opacity='1';           st.style.opacity='1';
         },90);         },90);
 +        cap.textContent=self.getAttribute('data-cap');
 +        var tot=bs.length; cnt.textContent=self.getAttribute('data-idx')+' / '+(tot<10?'0'+tot:tot);
         zoom.href=self.getAttribute('data-full');         zoom.href=self.getAttribute('data-full');
       });       });
行 713: 行 697:
  
 ==== 2.3 Interface Pin Definitions ==== ==== 2.3 Interface Pin Definitions ====
-All external connectors on the unit are finished connectors; no bare board pin headers. The serial ports and speaker use pluggable terminal blocks with 3.5mm / 2.0mm pitch; align wiring with the silkscreen labels. Recommended wire gauge: 0.2 ~ 1.5mm²; strip length: 6 ~ 7mm.+All external connectors on the unit are finished connectors; no bare board pin headers. The serial ports and speaker use pluggable terminal blocks with 2.5mm / 2.0mm pitch; align wiring with the silkscreen labels. Recommended wire gauge: 0.2 ~ 1.5mm²; strip length: 6 ~ 7mm.
  
 **DC 12V (5.5×2.1mm Barrel Connector)** **DC 12V (5.5×2.1mm Barrel Connector)**
行 723: 行 707:
 | Protection | Overvoltage protection, overcurrent protection | | Protection | Overvoltage protection, overcurrent protection |
  
-**RS485 (3.5mm 3P Terminal, 2 Groups: ttyS1 / ttyS3)**+**RS485 (2.5mm 3P Terminal, 2 Groups: ttyS1 / ttyS3)**
  
 ^ Pin ^ RS485-1 (ttyS1)^ RS485-2 (ttyS3)^ Description ^ ^ Pin ^ RS485-1 (ttyS1)^ RS485-2 (ttyS3)^ Description ^
行 732: 行 716:
 Half duplex; transmit/receive direction is switched automatically by hardware; no software RTS control is required. Half duplex; transmit/receive direction is switched automatically by hardware; no software RTS control is required.
  
-**RS232 (3.5mm 3P Terminal, 2 Groups: ttyS2 / ttyS4)**+**RS232 (2.5mm 3P Terminal, 2 Groups: ttyS2 / ttyS4)**
  
 ^ Pin ^ RS232-1 (ttyS2)^ RS232-2 (ttyS4)^ Description ^ ^ Pin ^ RS232-1 (ttyS2)^ RS232-2 (ttyS4)^ Description ^
行 1060: 行 1044:
 **Precautions** **Precautions**
  
-  - The unit has a 3.5mm 3P pluggable terminal (no DB9); use a crimp terminal or adapter cable. Adapter cable pinouts may differ between manufacturers; reversing A / B or R / T directly causes communication failure+  - The unit has a 2.5mm 3P pluggable terminal (no DB9); use a crimp terminal or adapter cable. Adapter cable pinouts may differ between manufacturers; reversing A / B or R / T directly causes communication failure
   - RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive   - RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive
  
行 1476: 行 1460:
 **Precautions** **Precautions**
  
-  - The unit uses a 3.5mm 3P pluggable terminal (no DB9); use with crimp terminals or an adapter cable; reversing the wire order (A / B, R / T) will directly cause communication failure+  - The unit uses a 2.5mm 3P pluggable terminal (no DB9); use with crimp terminals or an adapter cable; reversing the wire order (A / B, R / T) will directly cause communication failure
   - RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive   - RS485 is half-duplex; direction is switched automatically by hardware, so observe the frame interval when switching between transmit and receive
   - If permission is denied, add the current user to the dialout group: sudo usermod -aG dialout $USER (takes effect after re-login)   - If permission is denied, add the current user to the dialout group: sudo usermod -aG dialout $USER (takes effect after re-login)
行 2180: 行 2164:
  
 ==== 7.4 Development Resources ==== ==== 7.4 Development Resources ====
-Datasheets, drivers, SDK, firmware and flashing tools are published per model; the entry point is:+Datasheets, drivers, SDK, firmware and flashing tools are maintained per model; contact Sales or Technical Support to obtain them.
  
-**Resources:** [[https://www.showdoc.com.cn/nodka01/11559011770088384|sTPC-SXXX-3568B product development resources]] — ShowDoc online documentation +**Note:** Flashing, ADB, serial and GPIO procedures are described in chapters 3–7 of this page; for interface count and location see 2.2.
- +
-**Note:** These resources are authoritative; fetch the latest files there after a version update. Flashing, ADB, serial and GPIO procedures are described in sections 3–7 of this page; interface count and location follow section 2.2.+
  
 <html><style> <html><style>
行 2399: 行 2381:
 "use strict"; "use strict";
  
-/* ===== 零件信息:按结构位置命名(STEP 无零件名,名称按几何位置推定) ===== */ +/* ===== 默认零件表(仅 sTPC-S156-3568B;其它机型由 cfg.parts 传入) ===== */ 
-var PARTS = [+var PARTS_S156 = [
   /* 0 */ {n:'机身中框',   e:'Mid Frame',        col:'#b8c2cd', k:0.00, d:[0,0,0]},   /* 0 */ {n:'机身中框',   e:'Mid Frame',        col:'#b8c2cd', k:0.00, d:[0,0,0]},
   /* 1 */ {n:'视窗玻璃',   e:'Front Glass',      col:'#1e2a36', k:1.55, d:[0,0,1]},   /* 1 */ {n:'视窗玻璃',   e:'Front Glass',      col:'#1e2a36', k:1.55, d:[0,0,1]},
行 2419: 行 2401:
   /*16 */ {n:'前面框',     e:'Front Bezel',      col:'#cbd3dc', k:1.75, d:[0,0,1]}   /*16 */ {n:'前面框',     e:'Front Bezel',      col:'#cbd3dc', k:1.75, d:[0,0,1]}
 ]; ];
-var REAR = 3;                       /* 后盖索引 */+var REAR_S156 = 3;                  /* 后盖索引 */
  
 var UI = { var UI = {
行 2559: 行 2541:
   cfg=cfg||{};   cfg=cfg||{};
   var L=UI[cfg.lang==='en'?'en':'zh'];   var L=UI[cfg.lang==='en'?'en':'zh'];
 +  var PARTS=cfg.parts||PARTS_S156, REAR=cfg.rear!==undefined?cfg.rear:REAR_S156;
   if(!document.getElementById('sml3d-css')){   if(!document.getElementById('sml3d-css')){
     var st=document.createElement('style');st.id='sml3d-css';st.textContent=CSS;document.head.appendChild(st);     var st=document.createElement('style');st.id='sml3d-css';st.textContent=CSS;document.head.appendChild(st);
行 2578: 行 2561:
    +'<div class="ebar"><span class="lb">'+L.exp+'</span><input type="range" min="0" max="100" value="0"><span class="pv">0%</span></div>'    +'<div class="ebar"><span class="lb">'+L.exp+'</span><input type="range" min="0" max="100" value="0"><span class="pv">0%</span></div>'
    +'<div class="tip"></div>'    +'<div class="tip"></div>'
-   +'<div class="cover"><button class="b">'+L.load+'</button><span class="s">'+L.size+'</span></div>';+   +'<div class="cover"><button class="b">'+L.load+'</button><span class="s">'+(cfg.size||L.size)+'</span></div>';
   host.appendChild(root);   host.appendChild(root);
  
行 2587: 行 2570:
   var VS=['#version 300 es','in vec3 aP;in vec3 aN;uniform mat4 uP,uV;uniform vec3 uO;out vec3 vP;out vec3 vN;',   var VS=['#version 300 es','in vec3 aP;in vec3 aN;uniform mat4 uP,uV;uniform vec3 uO;out vec3 vP;out vec3 vN;',
     'void main(){vec3 p=aP+uO;vP=p;vN=aN;gl_Position=uP*uV*vec4(p,1.0);}'].join('\n');     'void main(){vec3 p=aP+uO;vP=p;vN=aN;gl_Position=uP*uV*vec4(p,1.0);}'].join('\n');
-  var FS=['#version 300 es','precision highp float;in vec3 vP;in vec3 vN;uniform vec3 uC,uE;uniform float uS,uD,uX;out vec4 f;',+  var FS=['#version 300 es','precision highp float;in vec3 vP;in vec3 vN;uniform vec3 uC,uE;uniform float uS,uD,uX,uA;uniform mat4 uV;out vec4 f;',
     'void main(){vec3 N=normalize(vN),V=normalize(uE-vP);if(dot(N,V)<0.0)N=-N;',     'void main(){vec3 N=normalize(vN),V=normalize(uE-vP);if(dot(N,V)<0.0)N=-N;',
-    'vec3 L1=normalize(vec3(-0.45,0.72,0.62)),L2=normalize(vec3(0.72,-0.28,0.44));', +    'mat3 R=mat3(uV);vec3 Nv=normalize(R*N),Vv=normalize(R*V);vec3 L1=normalize(vec3(-0.42,0.58,0.70)),L2=normalize(vec3(0.60,-0.30,0.74));', 
-    'float k1=max(dot(N,L1),0.0),k2=max(dot(N,L2),0.0);vec3 H=normalize(L1+V);', +    'float k1=max(dot(Nv,L1),0.0),k2=max(dot(Nv,L2),0.0);vec3 H=normalize(L1+Vv);', 
-    'float sp=pow(max(dot(N,H),0.0),46.0)*0.30;float rm=pow(1.0-max(dot(N,V),0.0),3.0)*0.20;', +    'float sp=pow(max(dot(Nv,H),0.0),46.0)*0.30;float rm=pow(1.0-max(dot(Nv,Vv),0.0),3.0)*0.20;', 
-    'vec3 c=uC*(0.40+0.66*k1+0.24*k2)+vec3(sp)+vec3(rm)*0.55;', +    'vec3 c=uC*(0.34+0.52*k1+0.20*k2)+vec3(sp)+vec3(rm)*0.55;', 
-    'if(uS>0.5)c=mix(c,vec3(0.12,0.40,0.85),0.34);if(uD>0.5)c=mix(c,vec3(0.72,0.76,0.81),0.62);', +    'if(uS>0.5)c=mix(c,vec3(0.12,0.40,0.85),0.34);if(uX>0.5)c=mix(c,vec3(0.40,0.48,0.58),0.55);else if(uD>0.5)c=mix(c,vec3(0.72,0.76,0.81),0.62);', 
-    'float a=1.0-0.62*uX;if(uD>0.5)a*=0.40;f=vec4(c,a);}'].join('\n');+    'float a=1.0;if(uD>0.5)a*=mix(0.40,1.0,uX);f=vec4(c,a*uA);}'].join('\n');
   function sh(t,s){var o=gl.createShader(t);gl.shaderSource(o,s);gl.compileShader(o);   function sh(t,s){var o=gl.createShader(t);gl.shaderSource(o,s);gl.compileShader(o);
     if(!gl.getShaderParameter(o,gl.COMPILE_STATUS))throw new Error(gl.getShaderInfoLog(o));return o;}     if(!gl.getShaderParameter(o,gl.COMPILE_STATUS))throw new Error(gl.getShaderInfoLog(o));return o;}
行 2600: 行 2583:
   gl.attachShader(pr,sh(gl.VERTEX_SHADER,VS));gl.attachShader(pr,sh(gl.FRAGMENT_SHADER,FS));   gl.attachShader(pr,sh(gl.VERTEX_SHADER,VS));gl.attachShader(pr,sh(gl.FRAGMENT_SHADER,FS));
   gl.bindAttribLocation(pr,0,'aP');gl.bindAttribLocation(pr,1,'aN');gl.linkProgram(pr);gl.useProgram(pr);   gl.bindAttribLocation(pr,0,'aP');gl.bindAttribLocation(pr,1,'aN');gl.linkProgram(pr);gl.useProgram(pr);
-  var U={};['uP','uV','uO','uC','uE','uS','uD','uX'].forEach(function(n){U[n]=gl.getUniformLocation(pr,n);});+  var U={};['uP','uV','uO','uC','uE','uS','uD','uX','uA'].forEach(function(n){U[n]=gl.getUniformLocation(pr,n);});
  
   var cam={th:0.60,ph:0.19,dist:3,tgt:[0,0,0],fov:34*Math.PI/180};   var cam={th:0.60,ph:0.19,dist:3,tgt:[0,0,0],fov:34*Math.PI/180};
行 2641: 行 2624:
     gl.viewport(0,0,cv.width,cv.height);     gl.viewport(0,0,cv.width,cv.height);
     gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);     gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);
-    gl.enable(gl.DEPTH_TEST);gl.disable(gl.CULL_FACE);gl.enable(gl.BLEND);+    if(xray){gl.disable(gl.DEPTH_TEST);}else{gl.enable(gl.DEPTH_TEST);}gl.disable(gl.CULL_FACE);gl.enable(gl.BLEND);
     gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);     gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);
     var e=eye();     var e=eye();
行 2657: 行 2640:
       gl.uniform3fv(U.uO,off(p));       gl.uniform3fv(U.uO,off(p));
       gl.uniform1f(U.uS,p.pi===sel?1:0);       gl.uniform1f(U.uS,p.pi===sel?1:0);
-      gl.uniform1f(U.uD,(any&&p.pi!==sel)||xray?1:0);+      gl.uniform1f(U.uD,(any&&p.pi!==sel)?1:0); 
 +      gl.uniform1f(U.uA, xray ? (p.pi===sel ? 1.0 : (Math.max(p.size[0],p.size[1],p.size[2])>0.075?0.20:0.62)) : 1.0);
       gl.uniform1f(U.uX,xray&&p.pi!==sel?1:0);       gl.uniform1f(U.uX,xray&&p.pi!==sel?1:0);
       gl.drawElements(gl.TRIANGLES,p.count,gl.UNSIGNED_INT,p.start*4);       gl.drawElements(gl.TRIANGLES,p.count,gl.UNSIGNED_INT,p.start*4);
行 2835: 行 2819:
       cam.tgt=[model.center[0],model.center[1],model.center[2]];       cam.tgt=[model.center[0],model.center[1],model.center[2]];
       cam.dist=fitDist();       cam.dist=fitDist();
 +      window.__parts=model.parts;
 +      if(cfg.only!==undefined){model.parts.forEach(function(q){q.vis=q.pi===cfg.only;});}
       buildList();draw();       buildList();draw();
       if(cfg.boom!==undefined){       if(cfg.boom!==undefined){
行 2861: 行 2847:
 })(); })();
  
 +</script></html>
 +<html><script>
 +/* 3D 拆解视角:捕获阶段接管图库按钮,不改动本页原有的切换脚本 */
 +(function () {
 +  var host = document.getElementById('sml-3d');
 +  if (!host) return;
 +  var stage = host.parentNode, side = document.querySelector('.sml-g-side');
 +  var v3 = null, on = false;
 +  function parseParts(btn) {
 +    try {
 +      var a = JSON.parse(btn.getAttribute('data-parts') || '[]');
 +      return a.map(function (r) { return {n: r[0], e: r[1], col: r[2], k: r[3], d: [0, 0, r[4]]}; });
 +    } catch (e) { return null; }
 +  }
 +  function enter(btn) {
 +    on = true;
 +    stage.className = 'sml-g-stage on3d';
 +    if (side) side.className = 'sml-g-side on3d';
 +    if (!v3) {
 +      if (!window.SML3D) return;
 +      v3 = window.SML3D(host, {
 +        url: btn.getAttribute('data-zip'),
 +        lang: btn.getAttribute('data-lang'),
 +        size: btn.getAttribute('data-size'),
 +        parts: parseParts(btn),
 +        rear: +btn.getAttribute('data-rear')
 +      });
 +      v3.start();
 +    }
 +  }
 +  function leave() {
 +    if (!on) return;
 +    on = false;
 +    stage.className = 'sml-g-stage';
 +    if (side) side.className = 'sml-g-side';
 +  }
 +  document.addEventListener('click', function (e) {
 +    var t = e.target;
 +    while (t && t !== document && !(t.tagName === 'BUTTON' && /sml-g-thumb/.test(t.className))) t = t.parentNode;
 +    if (!t || t === document) return;
 +    if (t.hasAttribute('data-3d')) {
 +      e.preventDefault();
 +      e.stopPropagation();
 +      var bs = document.querySelectorAll('button.sml-g-thumb');
 +      for (var i = 0; i < bs.length; i++) bs[i].className = (bs[i] === t ? 'sml-g-thumb on' : 'sml-g-thumb');
 +      var cap = document.getElementById('sml-g-cap'), cnt = document.getElementById('sml-g-count');
 +      if (cnt) cnt.textContent = t.getAttribute('data-idx') + ' / ' + (bs.length < 10 ? '0' + bs.length : bs.length);
 +      if (cap) cap.textContent = t.getAttribute('data-cap');
 +      enter(t);
 +    } else {
 +      leave();
 +    }
 +  }, true);
 +})();
 </script></html> </script></html>
  
导航

首页
帮助
联系我们

打印/导出