- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过使用Three.js挤压形状来给SVG路径(lineto和moveto)3D感觉,但是该过程会导致一些我无法删除的瑕疵。
什么会导致渲染的3D形状出现奇异的伪像?有没有办法删除它们?
这些伪像在下面的示例图像中用箭头标记。
现场示例在这里:
http://jsfiddle.net/pHn2B/24/
代码在这里:
//通过回调选择
// three.js r.52
var容器,
信息,
相机,
现场,
光,
几何,
网格
投影仪
渲染器
控制;
对象= [];
// dom
container = document.createElement('div');
document.body.appendChild(container);
//资讯
信息= document.createElement('div');
info.style.position ='绝对';
info.style.top ='10px';
info.style.width ='100%';
info.style.textAlign ='中心';
info.innerHTML =“拖动以旋转相机;单击以选择”;
container.appendChild(info);
//渲染器
renderer = new THREE.CanvasRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
container.appendChild(renderer.domElement);
//场景
场景=新的THREE.Scene();
//相机
camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight,1,10000);
camera.position.set(0,300,500);
scene.add(camera);
//控件
控件=新的THREE.OrbitControls(camera);
//轻
scene.add(新的THREE.AmbientLight(0x222222));
//轻
light =新的THREE.PointLight(0xaaaaaa);
light.position =摄影机位置;
scene.add(light);
//几何
geometry = new THREE.CubeGeometry(100,100,500);
//材质
材质=新的THREE.MeshLambertMaterial({颜色:0xff0000,环境:0xff0000,透支:true});
//网格
mesh = new THREE.Mesh(geometry,material);
mesh.position.set(-100,-100,200);
mesh.name =“红色物体”;
mesh.callback = function(){info.innerHTML = this.name; }
scene.add(mesh);
objects.push(mesh);
//几何
////////////
//自定义//
////////////
var starPoints2 =新的THREE.Shape();
starPoints2.moveTo(307.94,275.49);
starPoints2.lineTo(296.26,275.23);
starPoints2.lineTo(286.64,272.99);
starPoints2.lineTo(279.78,269.31);
starPoints2.lineTo(274.14,263.55);
starPoints2.lineTo(271.65,260.21);
starPoints2.lineTo(269.2,261.06);
starPoints2.lineTo(254.83,268.51);
starPoints2.lineTo(242.11,272.97);
starPoints2.lineTo(227.59,275.23);
starPoints2.lineTo(209.91,275.48);
starPoints2.lineTo(197.47,273.63);
starPoints2.lineTo(187.91,270.13);
starPoints2.lineTo(180.48,265.09);
starPoints2.lineTo(175.32,258.88);
starPoints2.lineTo(172.2,251.44);
starPoints2.lineTo(171.1,242.23);
starPoints2.lineTo(172.24,233.63);
starPoints2.lineTo(175.49,226.24);
starPoints2.lineTo(181,219.54);
starPoints2.lineTo(189.42,213.3);
starPoints2.lineTo(201.36,207.73);
starPoints2.lineTo(217.23,203.25);
starPoints2.lineTo(238.28,200.1);
starPoints2.lineTo(269.37,198.47);
starPoints2.lineTo(269.98,182.93);
starPoints2.lineTo(268.74,171.32);
starPoints2.lineTo(266.05,163.7);
starPoints2.lineTo(261.58,157.72);
starPoints2.lineTo(255.24,153.24);
starPoints2.lineTo(247.06,150.32);
starPoints2.lineTo(235.44,149.13);
starPoints2.lineTo(224.71,150.05);
starPoints2.lineTo(215.91,153);
starPoints2.lineTo(210.23,156.86);
starPoints2.lineTo(207.64,160.85);
starPoints2.lineTo(207.19,165.28);
starPoints2.lineTo(209.34,169.86);
starPoints2.lineTo(212.01,174.15);
starPoints2.lineTo(212.14,177.99);
starPoints2.lineTo(209.8,181.78);
starPoints2.lineTo(204.22,185.79);
starPoints2.lineTo(197.62,187.68);
starPoints2.lineTo(188.65,187.43);
starPoints2.lineTo(182.41,185.39);
starPoints2.lineTo(178.45,181.77);
starPoints2.lineTo(176.2,176.9);
starPoints2.lineTo(176.03,170.64);
starPoints2.lineTo(178.2,164.13);
starPoints2.lineTo(183.09,157.69);
starPoints2.lineTo(191.04,151.36);
starPoints2.lineTo(202.01,145.82);
starPoints2.lineTo(216.09,141.57);
starPoints2.lineTo(232.08,139.24);
starPoints2.lineTo(250.07,139.18);
starPoints2.lineTo(266.13,141.23);
starPoints2.lineTo(279.05,145.06);
starPoints2.lineTo(289.15,150.3);
starPoints2.lineTo(295.91,156.19);
starPoints2.lineTo(300.73,163.41);
starPoints2.lineTo(303.85,172.47);
starPoints2.lineTo(305.07,183.78);
starPoints2.lineTo(305.07,241.97);
starPoints2.lineTo(306,251.51);
starPoints2.lineTo(308.18,256.39);
starPoints2.lineTo(311.72,259.09);
starPoints2.lineTo(317.31,260.01);
starPoints2.lineTo(324.71,259.01);
starPoints2.lineTo(332.45,255.86);
starPoints2.lineTo(335.57,257.53);
starPoints2.lineTo(337.6,260.44);
starPoints2.lineTo(336.94,262.33);
starPoints2.lineTo(328.27,268.74);
starPoints2.lineTo(317.89,273.41);
starPoints2.lineTo(307.94,275.49);
/ *
starPoints2.moveTo(245.79,125.33);
starPoints2.lineTo(232.93,124.53);
starPoints2.lineTo(222.21,121.74);
starPoints2.lineTo(213.14,117.11);
starPoints2.lineTo(207.36,111.92);
starPoints2.lineTo(203.7,105.75);
starPoints2.lineTo(201.94,98.18);
starPoints2.lineTo(202.34,90.12);
starPoints2.lineTo(204.86,83.4);
starPoints2.lineTo(210.01,76.81);
starPoints2.lineTo(217.49,71.33);
starPoints2.lineTo(227.17,67.31);
starPoints2.lineTo(238.35,65.2);
starPoints2.lineTo(243.99,64.95);
starPoints2.lineTo(255.92,66.06);
starPoints2.lineTo(266.21,69.28);
starPoints2.lineTo(274.98,74.44);
starPoints2.lineTo(280.64,80.19);
starPoints2.lineTo(284.02,86.85);
starPoints2.lineTo(285.26,94.52);
starPoints2.lineTo(284.27,102.84);
starPoints2.lineTo(281.24,109.66);
starPoints2.lineTo(276.03,115.43);
starPoints2.lineTo(267.89,120.46);
starPoints2.lineTo(257.68,123.93);
starPoints2.lineTo(245.79,125.33);
* /
var smileyEye1Path =新的THREE.Path();
smileyEye1Path.moveTo(221.69,258.13);
smileyEye1Path.lineTo(215.2,255.08);
smileyEye1Path.lineTo(210.86,250.57);
smileyEye1Path.lineTo(208.4,244.49);
smileyEye1Path.lineTo(207.92,237.03);
smileyEye1Path.lineTo(209.69,230.71);
smileyEye1Path.lineTo(213.82,224.85);
smileyEye1Path.lineTo(220.9,219.34);
smileyEye1Path.lineTo(230.95,214.67);
smileyEye1Path.lineTo(245.76,210.86);
smileyEye1Path.lineTo(266.59,208.36);
smileyEye1Path.lineTo(269.48,208.76);
smileyEye1Path.lineTo(269.99,212.88);
smileyEye1Path.lineTo(269.99,244.81);
smileyEye1Path.lineTo(269.34,247.02);
smileyEye1Path.lineTo(266.07,250.04);
smileyEye1Path.lineTo(255.27,255.23);
smileyEye1Path.lineTo(242.52,258.58);
smileyEye1Path.lineTo(230.57,259.43);
smileyEye1Path.lineTo(221.69,258.13);
/ *
smileyEye1Path.moveTo(238.44,116.65);
smileyEye1Path.lineTo(231.99,114.29);
smileyEye1Path.lineTo(227.23,110.22);
smileyEye1Path.lineTo(223.94,104.53);
smileyEye1Path.lineTo(222.41,96.92);
smileyEye1Path.lineTo(223.05,88.57);
smileyEye1Path.lineTo(225.65,82.21);
smileyEye1Path.lineTo(230.07,77.36);
smileyEye1Path.lineTo(235.93,74.4);
smileyEye1Path.lineTo(243.68,73.34);
smileyEye1Path.lineTo(246.08,73.43);
smileyEye1Path.lineTo(253.37,75.08);
smileyEye1Path.lineTo(258.65,78.43);
smileyEye1Path.lineTo(262.47,83.41);
smileyEye1Path.lineTo(264.59,90.25);
smileyEye1Path.lineTo(264.64,98.93);
smileyEye1Path.lineTo(262.63,106.12);
smileyEye1Path.lineTo(258.87,111.5);
smileyEye1Path.lineTo(253.73,115.1);
smileyEye1Path.lineTo(246.81,116.94);
smileyEye1Path.lineTo(238.44,116.65);
* /
var starShape = starPoints2;
starShape.holes.push(smileyEye1Path);
vartrusionSettings = {
//大小:1,高度:1,曲线段:100,步长= 10,
//字体,粗细,样式,
数量:20,
bevelEnabled:是的,
斜角厚度:0.5,
斜面尺寸:0.5,
斜角段:8,
// extrudePath:
// bendPath:
材料:0
挤出材料:1
//,
// uvGenerator:绑定UVGenerator
//uvGenerator:THREE.ExtrudeGeometry.WorldUVGenerator
};
var starGeometry =新的THREE.ExtrudeGeometry(starShape,trusionSettings);
var materialFront = new THREE.MeshLambertMaterial({颜色:0xffff00,环境:0xffff00,透支:false,透明:false,不透明度:1.0,侧面:THREE.DoubleSide});
var materialSide =新的THREE.MeshLambertMaterial({颜色:0xff8800,环境:0xff8800,透支:false,透明:false,不透明度:1.0,侧面:THREE.DoubleSide});
// var crateTexture = new THREE.ImageUtils.loadTexture('http://www.kahkonen.com/asiakkaat/crate2.gif');
// var crateTexture = new THREE.ImageUtils.generateDataTexture(10,10,{r:255,g:0,b:0});
// var materialFront = new THREE.MeshBasicMaterial({map:crateTexture});
var materialArray = [materialFront,materialSide];
var materialArray = [materialFront,materialSide];
var starMaterial =新的THREE.MeshFaceMaterial(materialArray);
var star = new THREE.Mesh(starGeometry,starMaterial);
star.position.set(-150,-150,0);
scene.add(star);
/ *
//为模型添加线框
var wireframeTexture = new THREE.MeshBasicMaterial({color:0x000000,wireframe:true,transparent:false});
var star = new THREE.Mesh(starGeometry,wireframeTexture);
star.position.set(50,10,0);
scene.add(star);
* /
objects.push(star);
//投影仪
投影仪=新的THREE.Projector();
//听众
document.addEventListener('mousedown',onDocumentMouseDown,false)
//键盘处理程序
函数onDocumentMouseDown(event){
event.preventDefault();
var vector = new THREE.Vector3(
(event.clientX / window.innerWidth)* 2-1
-(event.clientY / window.innerHeight)* 2 + 1,
0.5);
projection.unprojectVector(vector,camera);
var ray = new THREE.Ray(camera.position,vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(objects);
if(intersects.length> 0){
相交[0] .object.callback();
}
}
//渲染
函数render(){
controls.update()
renderer.render(场景,相机);
}
//动画
(函数animate(){
requestAnimationFrame(animate);
render();
}());
我试图通过附加纹理来消除伪影,但是纹理根本没有显示:
其他问题(可能与或可能与伪影问题无关)是可以通过边缘看到背景。
纹理不是必须的,但是去除伪影是必须的。
下面是我用来添加纹理的代码,小提琴中有完整的代码(链接在代码后面):
var crateTexture = new THREE.ImageUtils.loadTexture( 'http://www.kahkonen.com/asiakkaat/crate.gif');
var crateTexture = new THREE.ImageUtils.generateDataTexture(10,10,{r:255,g:0,b:0});
var materialFront = new THREE.MeshBasicMaterial( { map: crateTexture } );// http://jsfiddle.net/pHn2B/27/
样本图片来自Chrome。 Firefox中也会发生相同的行为。
最佳答案
这是由z缓冲问题引起的CanvasRenderer
的已知限制。具有许多细长面的几何形状会使情况更糟。使用WebGLRenderer
可以正确渲染模型。ExtrudeGeometry
最初是为文本编写的,如果您查看它生成的UV,它仅使用UV顶点位置的x和y分量,在您的情况下,它们会产生超出[0]范围的值,1]。您可以选择在回调函数中提供自己的UV生成器。
确保首先可以成功将纹理添加到多维数据集。
three.js r.58
关于three.js - three.js中奇特的工件和挤压形状中的空纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106239/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!