stl文件html预览,【stl文件在线预览】示例源码
【实例简介】
【实例截图】
【核心代码】
WebViewer - STL
var container;
var camera, cameraTarget, scene, renderer;
var cameraType = 1;
var perspectiveAngle = 45;
var cameraPosX = 200;
var cameraPosY = 200;
var cameraPosZ = 200;
var cameraTargetX = 0;
var cameraTargetY = 0;
var cameraTargetZ = 0;
var upVectorX = 0;
var upVectorY = 1;
var upVectorZ = 0;
var cameralScale = 5;
init();
animate();
function getQueryStringByName(name){
var result = location.search.match(new RegExp("[\?\&]" name "=([^\&] )","i"));
if(result == null || result.length < 1){
return "";
}
return result[1];
}
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
// set camera
var cameraTypeStr = getQueryStringByName('cameraType');
cameraType = cameraTypeStr == "" ? cameraType : parseInt(cameraTypeStr);
var perspectiveAngleStr = getQueryStringByName('perspectiveAngle');
perspectiveAngle = perspectiveAngleStr == "" ? perspectiveAngle : parseFloat(perspectiveAngleStr);
var cameraPosXStr = getQueryStringByName('cameraPosX');
cameraPosX = cameraPosXStr == "" ? cameraPosX : parseFloat(cameraPosXStr) * cameralScale;
var cameraPosYStr = getQueryStringByName('cameraPosY');
cameraPosY = cameraPosYStr == "" ? cameraPosY : parseFloat(cameraPosYStr) * cameralScale;
var cameraPosZStr = getQueryStringByName('cameraPosZ');
cameraPosZ = cameraPosZStr == "" ? cameraPosZ : parseFloat(cameraPosZStr) * cameralScale;
var cameraTargetXStr = getQueryStringByName('cameraTargetX');
cameraTargetX = cameraTargetXStr == "" ? cameraTargetX : parseFloat(cameraTargetXStr) * cameralScale;
var cameraTargetYStr = getQueryStringByName('cameraTargetY');
cameraTargetY = cameraTargetYStr == "" ? cameraTargetY : parseFloat(cameraTargetYStr) * cameralScale;
var cameraTargetZStr = getQueryStringByName('cameraTargetZ');
cameraTargetZ = cameraTargetZStr == "" ? cameraTargetZ : parseFloat(cameraTargetZStr) * cameralScale;
var upVectorXStr = getQueryStringByName('upVectorX');
upVectorX = upVectorXStr == "" ? upVectorX : parseFloat(upVectorXStr) * cameralScale;
var upVectorYStr = getQueryStringByName('upVectorY');
upVectorY = upVectorYStr == "" ? upVectorY : parseFloat(upVectorYStr) * cameralScale;
var upVectorZStr = getQueryStringByName('upVectorZ');
upVectorZ = upVectorZStr == "" ? upVectorZ : parseFloat(upVectorZStr) * cameralScale;
if(cameraType == 0) {
camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10000 );
}
else {
camera = new THREE.PerspectiveCamera( perspectiveAngle, window.innerWidth / window.innerHeight, 1, 10000 );
}
camera.position.set( cameraPosX, cameraPosY, cameraPosZ);
camera.up.set(upVectorX, upVectorY, upVectorZ);
cameraTarget = new THREE.Vector3( cameraTargetX, cameraTargetY, cameraTargetZ );
camera.lookAt( cameraTarget );
scene = new THREE.Scene();
scene.fog = new THREE.Fog( 0xffffff, 1, 10000 );
// load file
var loader = new THREE.STLLoader();
var modelName = getQueryStringByName('modelName');
loader.load( '../Models/' modelName, function ( geometry ) {
var material = new THREE.MeshPhongMaterial( { color: 0x808080, specular: 0x111111, shininess: 200 } );
var mesh = new THREE.Mesh( geometry, material );
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add( mesh );
} );
// lights
scene.add( new THREE.AmbientLight( 0x333333 ) );
addDirectionalLight(-1, 1, 1, 0xFFFFFF, 1.35);
addDirectionalLight(1, -1, -1, 0xFFFFFF, 1);
// renderer
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setClearColor( scene.fog.color );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.gammaInput = true;
renderer.gammaOutput = true;
renderer.shadowMapEnabled = true;
renderer.shadowMapCullFace = THREE.CullFaceBack;
container.appendChild( renderer.domElement );
// orbit control
control = new THREE.OrbitControls( camera, renderer.domElement );
// events
window.addEventListener( 'resize', onWindowResize, false );
}
function addDirectionalLight( x, y, z, color, intensity ) {
var directionalLight = new THREE.DirectionalLight( color, intensity );
directionalLight.position.set( x, y, z )
scene.add( directionalLight );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
function animate() {
requestAnimationFrame( animate );
render();
}
function render() {
//var timer = Date.now() * 0.0005;
//
//camera.position.x = Math.cos( timer ) * 3;
//camera.position.z = Math.sin( timer ) * 3;
renderer.render( scene, camera );
}
stl文件html预览,【stl文件在线预览】示例源码相关推荐
- uniapp - 超详细录音上传功能,点击开始录音 / 最后保存文件上传到服务器功能(附带详细示例源码及整个过程的实现方法,注释详细小白轻松上手改造)全端兼容!
效果图 网上的教程太乱用不了,无法改造成自己想要的效果. 在uniapp中开发中,实现点击录音功能,并支持保存录音文件.uniapp编译后全平台兼容通用, 你可以直接复制示例源码,跟着教程一步步配置, ...
- Python Web在线考试管理系统【源码+毕设论文】
本文参考之前Python+Django Web在线考试管理系统的博文,协助某同学完成的毕业设计论文. 有需要的同学请也可以自行参考以下系列文章: Python+Django Web在线考试管理系统设计 ...
- 前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件
前端江太公 前端实现文档在线预览功能 最直接的就是使用XDOC 文档云服务 XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本.带参数文本.html文本.json文本.公 ...
- 基于java投标文件在线制作系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java投标文件在线制作系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java投标文件在线制作系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...
- vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码
效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...
- Asp.Net Web Api 2 实现多文件打包并下载文件示例源码
前言 最近由于工作和个人事务,站点也好久没更新了,但这并不影响我对.NET的热情.站点的更新工作还是得想办法抽时间来完成的. 提要 今天利用中午的时间来写一篇关于Asp.Net Web Api下载文件 ...
- [共享]一个文件上传的控件,绝对是精品源码
[共享]一个文件上传的控件,绝对是精品源码 前段时候在www.codeproject.com上看到一个文件上传的控件,觉得很好,共享给园子里的朋友. 原文链接:http://www.codeproje ...
- springboot:实现文件上传下载实时进度条功能【附带源码】
0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...
- php - 基于 webuploader 视频大文件分片分段上传,支持断点续传(刷新、关闭页面、重新上传、网络中断等情况)带进度条,前端后端都有示例源码详细教程
效果图 文件上传前先检测该文件是否已上传,如果已上传提示 "文件已存在",如果未上传则直接上传. 基于 php+webuploader的大文件分片上传,带进度条,支持断点续传(刷新 ...
- 基于mycncart开发PHP在线定制商城网站源码
简介: PHP在线定制商城网站源码,免费开源.免费下载.本商城基于mycncart开发.安装成功后即可浏览,你可以在后台->安装扩展功能上传安装插件,在代码调整中点击刷新后系统会重新建立缓存,此 ...
最新文章
- 计算机编程免费ppt,计算机编程与C概述课件.ppt
- 连续处理函数reduce
- java基础---集合之HashSet
- linux mint 18.3浏览器,在Linux Mint 19/Ubuntu 18.04中安装Tor Browser浏览器的方法
- Python21天打卡Day14-随机字符串
- Windows防火墙增加访问端口
- python列表方法图解_python中list(列表)的使用方法总结(图文)
- c# textbox和listbox多行显示
- Maven—Eclipse中配置Maven
- python情感词提取_Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)...
- 等比数列求和python_Python科学计算
- 常用正则表达式(英文单词、数字、中文 、URL 、电话、身份证、输入内容必须以逗号隔开等)
- [OpenCV实战]39 在OpenCV中使用ArUco标记的增强现实
- SSD1306显示屏--躲避类游戏
- 皇甫懒懒 华清远见Java学习笔记-身份证校验
- sealos+rook 部署 kubeSphere+TiDB
- 华为任正飞关于“活下去”的呼声不断刷屏,《Android市场寒气十足,该如何存活》?
- 使用Python实现量化交易机器人定时启动或停止小工具
- 赵钟秋谈又拍网架构中的消息/任务系统
- U8资产变动怎么处理