java整合webgl stl_使用WebGL实现一个Viewer来显示STL文件

2023-05-16

WebViewer - STL

varcontainer;varcamera, cameraTarget, scene, renderer;varcameraType= 1;varperspectiveAngle= 45;varcameraPosX= 200;varcameraPosY= 200;varcameraPosZ= 200;varcameraTargetX= 0;varcameraTargetY= 0;varcameraTargetZ= 0;varupVectorX= 0;varupVectorY= 1;varupVectorZ= 0;varcameralScale= 5;

init();

animate();functiongetQueryStringByName(name){varresult=location.search.match(newRegExp("[\?\&]" +name+ "=([^\&]+)","i"));if(result== null ||result.length< 1){return "";

}returnresult[1];

}functioninit() {

container=document.createElement('div');

document.body.appendChild( container );//set camera

varcameraTypeStr=getQueryStringByName('cameraType');

cameraType=cameraTypeStr== "" ?cameraType : parseInt(cameraTypeStr);varperspectiveAngleStr=getQueryStringByName('perspectiveAngle');

perspectiveAngle=perspectiveAngleStr== "" ?perspectiveAngle : parseFloat(perspectiveAngleStr);varcameraPosXStr=getQueryStringByName('cameraPosX');

cameraPosX=cameraPosXStr== "" ?cameraPosX : parseFloat(cameraPosXStr)*cameralScale;varcameraPosYStr=getQueryStringByName('cameraPosY');

cameraPosY=cameraPosYStr== "" ?cameraPosY : parseFloat(cameraPosYStr)*cameralScale;varcameraPosZStr=getQueryStringByName('cameraPosZ');

cameraPosZ=cameraPosZStr== "" ?cameraPosZ : parseFloat(cameraPosZStr)*cameralScale;varcameraTargetXStr=getQueryStringByName('cameraTargetX');

cameraTargetX=cameraTargetXStr== "" ?cameraTargetX : parseFloat(cameraTargetXStr)*cameralScale;varcameraTargetYStr=getQueryStringByName('cameraTargetY');

cameraTargetY=cameraTargetYStr== "" ?cameraTargetY : parseFloat(cameraTargetYStr)*cameralScale;varcameraTargetZStr=getQueryStringByName('cameraTargetZ');

cameraTargetZ=cameraTargetZStr== "" ?cameraTargetZ : parseFloat(cameraTargetZStr)*cameralScale;varupVectorXStr=getQueryStringByName('upVectorX');

upVectorX=upVectorXStr== "" ?upVectorX : parseFloat(upVectorXStr)*cameralScale;varupVectorYStr=getQueryStringByName('upVectorY');

upVectorY=upVectorYStr== "" ?upVectorY : parseFloat(upVectorYStr)*cameralScale;varupVectorZStr=getQueryStringByName('upVectorZ');

upVectorZ=upVectorZStr== "" ?upVectorZ : parseFloat(upVectorZStr)*cameralScale;if(cameraType== 0) {

camera= newTHREE.OrthographicCamera( window.innerWidth/ - 2, window.innerWidth/ 2, window.innerHeight/ 2, window.innerHeight/ - 2,1,10000);

}else{

camera= newTHREE.PerspectiveCamera( perspectiveAngle, window.innerWidth/window.innerHeight,1,10000);

}

camera.position.set( cameraPosX, cameraPosY, cameraPosZ);

camera.up.set(upVectorX, upVectorY, upVectorZ);

cameraTarget= newTHREE.Vector3( cameraTargetX, cameraTargetY, cameraTargetZ );

camera.lookAt( cameraTarget );

scene= newTHREE.Scene();

scene.fog= newTHREE.Fog(0xffffff,1,10000);//load file

varloader= newTHREE.STLLoader();varmodelName=getQueryStringByName('modelName');

loader.load('../Models/' +modelName,function( geometry ) {varmaterial= newTHREE.MeshPhongMaterial( { color:0x808080, specular:0x111111, shininess:200} );varmesh= newTHREE.Mesh( geometry, material );

mesh.castShadow= true;

mesh.receiveShadow= true;

scene.add( mesh );

} );//lights

scene.add(newTHREE.AmbientLight(0x333333) );

addDirectionalLight(-1,1,1,0xFFFFFF,1.35);

addDirectionalLight(1,-1,-1,0xFFFFFF,1);//renderer

renderer= newTHREE.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= newTHREE.OrbitControls( camera, renderer.domElement );//events

window.addEventListener('resize', onWindowResize,false);

}functionaddDirectionalLight( x, y, z, color, intensity ) {vardirectionalLight= newTHREE.DirectionalLight( color, intensity );

directionalLight.position.set( x, y, z )

scene.add( directionalLight );

}functiononWindowResize() {

camera.aspect=window.innerWidth/window.innerHeight;

camera.updateProjectionMatrix();

renderer.setSize( window.innerWidth, window.innerHeight );

}functionanimate() {

requestAnimationFrame( animate );

render();

}functionrender() {//var timer = Date.now() * 0.0005;//

//camera.position.x = Math.cos( timer ) * 3;//camera.position.z = Math.sin( timer ) * 3;

renderer.render( scene, camera );

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java整合webgl stl_使用WebGL实现一个Viewer来显示STL文件 的相关文章

随机推荐

  • 第三方银联支付接口对接_从支付系统到银行系统,五个接口就能全方位对接

    前一篇文章里我们简单介绍了商户对接银行存管的三个链路 xff0c 即子商户开会 订单生成与支付和分账的结算 从商户系统到银行系统 xff0c 其实主要就是商户的支付系统到银行的存管系统 平台商户的支付系统对接银行的存管系统 xff0c 有很
  • Android连上USb不充电,手机连接电脑只显示充电没有usb连接怎么办?

    手机连接电脑只显示充电没有usb连接怎么办 xff1f 我们在办公室的时候 xff0c 经常会使用usb数据线来为手机充电 xff0c 正常情况下 xff0c 不仅可以充电 xff0c 也可以连接电脑传输数据 xff0c 然而有用户反馈说手
  • Android-使用RecyclerView的ItemDecoration 实现炫酷的 吸顶效果

    转载请注明出处 xff1a 李诗雨 http blog csdn net cjm2484836553 article details 53453982 开始逐渐领略到 ItemDecoration的美 源码已上传至github xff0c
  • 这是什么问题main.c(40): error C267: 'led_blink_off': requires ANSI-style prototype

    这是一个编译错误 它表示在 main c 文件的第 40 行发现了一个函数 34 led blink off 34 xff0c 但是这个函数缺少 ANSI 风格的原型 prototype ANSI 风格的原型是一种函数声明的格式 xff0c
  • 如何调用OpenAI接口

    要调用OpenAI的接口 首先你需要在OpenAI的网站上注册一个帐号 然后去控制台里申请一个API Key 申请完之后 你就可以在你的代码里使用这个API Key来调用OpenAI的接口了 具体的方法是 使用你喜欢的编程语言 调用相应的A
  • python如何实现每月执行一次程序

    要在每月执行一次程序 xff0c 可以使用 Python 的第三方库 schedule 安装 schedule xff1a pip span class hljs keyword install span span class hljs k
  • 如何在中国使用openAI

    在中国使用 OpenAI 的方法与在其他国家使用 OpenAI 的方法大致相同 首先 xff0c 您可以在 OpenAI 网站上浏览有关公司及其产品的信息 xff0c 并在该网站上注册账户 接下来 xff0c 您可以使用 OpenAI 的
  • 用java写一个微信支付代码

    首先 您需要在微信支付开发平台上申请商户账号 并获取到相应的 API 密钥和商户 ID 然后 可以使用如下步骤来实现微信支付 引入微信支付所需的依赖包 创建微信支付配置类 并在其中设置 API 密钥和商户 ID 等信息 创建支付请求对象 并
  • 给我用C语言写一个二叉树的遍历

    我可以给你一个例子 xff1a include lt stdio h gt struct node int data struct node left right function to print leaf nodes of a bina
  • 如何配置vscode,使其能编写并运行urho3d的lua脚本?

    答 xff1a 要配置VSCode以编写和运行Urho3D的Lua脚本 xff0c 您需要安装Lua插件 xff0c 并在VSCode中设置Lua语言支持 您还可以为VSCode添加Urho3D相关的代码提示和自动完成功能 xff0c 以便
  • C语言课程设计 《 运动会比赛计分系统

    我可以为您提供一些建议 xff1a 1 首先了解C语言的基础语法 xff1b 2 明确比赛计分系统的功能要求 xff0c 以及实现这些功能所需的数据结构 xff1b 3 确定程序的结构 xff0c 并编写相应的函数 xff1b 4 测试程序
  • Java判断链表是否有环?

    可以使用双指针法来判断链表是否有环 具体来说 可以定义两个指针 一个指针每次移动一步 另一个指针每次移动两步 如果链表有环 那么两个指针最终一定会相遇 如果没有环 那么两个指针就会到达链表的末尾 退出循环 下面是一个示例代码 span cl
  • 使用html时如何引入module

    使用 HTML 时 可以使用 lt script gt 标签引入模块 首先 你需要在 HTML 文件中添加一个 lt script gt 标签 然后在 src 属性中指定模块的路径 例如 如果你想引入一个名为 myModule js 的模块
  • 如何使用火狐浏览器的Poster插件进行post请求

    不诗意的女程序猿不是好厨师 转载请注明出处 xff1a From 李诗雨 http blog csdn net cjm2484836553 article details 72453907 善假于物者 xff0c 正途也 学会利用身边的工具
  • c++进程间通信

    C 语言中的进程间通信方式有多种 xff0c 包括共享内存 消息队列 信号量 套接字等 共享内存是指多个进程可以访问同一块内存 xff0c 从而实现进程间的通信 共享内存的优点是速度快 xff0c 但实现较为复杂 xff0c 需要自己维护同
  • Ubuntu如何全局设置系统字体

    在 Ubuntu 系统中 xff0c 可以使用 34 gnome tweak tool 34 或 34 unity tweak tool 34 来设置全局字体 安装 34 gnome tweak tool 34 或 34 unity twe
  • re.compile()函数解析

    re compile 是 Python 中正则表达式库 re 中的一个函数 它的作用是将正则表达式的字符串形式编译为一个正则表达式对象 xff0c 这样可以提高正则匹配的效率 使用 re compile 后 xff0c 可以使用该对象的方法
  • 仓库温度湿度控制措施_一般仓库的温湿度控制范围是多少合适?

    仓库类型很多 xff0c 茶叶 冷库 医药 危险品 烟草等等 xff0c 不同库房有不同的温湿度标准 xff0c 库房必须按照规定 xff0c 将其保持在规范的恒温 恒湿状态 xff0c 才能让货物长期保存 xff0c 不变质 那一般仓库的
  • pythonplot绘图xrd_学术干货 | 手把手教你如何快速绘制XRD标准图

    如何作出如下图所示的规范XRD谱图 xff0c 是SCI论文写作的一项基本素质 今天就谈一下我个人的作图经验 xff0c 供大家参考 xff01 图1 某材料的XRD图谱 首先样品经过XRD分析仪分析后 xff0c 可以输出供Jade打开的
  • java整合webgl stl_使用WebGL实现一个Viewer来显示STL文件

    WebViewer STL varcontainer varcamera cameraTarget scene renderer varcameraType 61 1 varperspectiveAngle 61 45 varcameraP