Javascript three.js-ipad管状几何图形上的画布纹理
我有一个管状几何体的3d模型。生产方面有18000个坐标。我每取9个坐标,这样就可以绘制9000个坐标来构建一个管状几何体。我只能使用Javascript three.js-ipad管状几何图形上的画布纹理,javascript,json,ipad,html5-canvas,three.js,Javascript,Json,Ipad,Html5 Canvas,Three.js,我有一个管状几何体的3d模型。生产方面有18000个坐标。我每取9个坐标,这样就可以绘制9000个坐标来构建一个管状几何体。我只能使用CanvasRenderer 现在,当我在WebGLRenderer中使用vertexColors:THREE.vertexColors时,模型在每个面上显示不同的颜色。当我将其更改为CanvasRenderer时,模型将仅变为白色。即使我更改了顶点颜色:三种.FaceColors,结果也是一样的 请在下面找到jsfiddle的链接和我之前的链接,其中mrdoob
CanvasRenderer
现在,当我在WebGLRenderer
中使用vertexColors:THREE.vertexColors
时,模型在每个面上显示不同的颜色。当我将其更改为CanvasRenderer
时,模型将仅变为白色。即使我更改了顶点颜色:三种.FaceColors
,结果也是一样的
请在下面找到jsfiddle的链接和我之前的链接,其中mrdoob为CanvasRenderer添加了对material.vertexColors=THREE.FaceColors
的支持
请在下面的图像中查找,以便根据值应用颜色。
如图所示,每个坐标有12个不同角度的12个值。所以我创建了一个半径段为12的管。然后我将这些值存储到JSON文件中,但当有18000个点时,文件变得很重。即使我画了2000点,也花了太多时间。对于2000个管段,每个管段有12个面,管上有24000个面
请在下面找到根据参数值应用颜色的编程逻辑
//获取res值并应用颜色
var lblSeg=0;var pntId;var d=0;变量faceLength=tube.faces.length;
变量度=['30','60','90','120','150','180','210','240','270','300','330'];
变量面=管面;var degreeCntr=0;var degreeProp;
//控制台日志(面);
变量res30=0,res60=0,res90=0,res120=0,res150=0,res180=0,res210=0,res240=0,res270=0,res300=0,res330=0;
var-res;变异程度;var-pnt=0
// fetching json data of resistivity values at different degree as //shown in the image
var result = getResValue();
for(var k=0; k<faceLength; k++){
resDegree = degrees[degreeCntr];
degreeProp = "r"+resDegree;
res = result.resistivity[pnt][degreeProp];
objects.push(result.resistivity[pnt]);
f = faces[k];
color = new THREE.Color( 0xffffff );
if(res<5){
color.setRGB( 197/255, 217/255, 241/255);
}
else if(res>=5 && res<50){
color.setRGB( 141/255, 180/255, 226/255);
}
else if(res>=50 && res<100){
color.setRGB( 83/255, 141/255, 213/255);
}
else if(res>=100 && res<200){
color.setRGB( 22, 54, 92);
}
else if(res>=200 && res<300){
color.setRGB( 15/255,36/255,62/255);
}
else if(res>=300 && res<400){
color.setRGB( 220/255, 230/255, 241/255);
}
else if(res>=400 && res<700){
color.setRGB( 184/255, 204/255, 228/255);
}
else if(res>=700 && res<1200){
color.setRGB( 149/255, 179/255, 215/255);
}
else if(res>=1200 && res<1500){
color.setRGB( 54/255, 96/255, 146/255);
}
else if(res>=1700 && res<1800){
color.setRGB( 36/255, 84/255, 98/255);
}
else if(res>1900){
color.setRGB( 128/255, 128/255, 128/255);
}
for(var j=0;j<4;j++)
{
tube.vertices.push(f.centroid);
vertexIndex = f[ faceIndices[ j ] ];
p = tube.vertices[ vertexIndex ];
f.vertexColors[ j ] = color;
}
degreeCntr++;
if(degreeCntr==10){
degreeCntr=0;
}
if(k%12==0 && k!=0){
pnt++;
}
}
//获取不同程度电阻率值的json数据//如图所示
var result=getResValue();
对于(var k=0;k我相信这将给您带来更好的性能+如果您能够想出一些自动计算每个角度偏移的颜色的方法,您可以直接设置十六进制颜色:
for ( var i = 0; i < tube.faces.length; i ++ ) {
tube.faces[ i ].color.setHex( Math.random() * 0xffffff );
}
for(变量i=0;i
正如我在上一条消息中向您解释的,如果您试图渲染如此多的面,那么使用画布纹理只会增加fps的负载
如果你真的想在画布渲染器上渲染24000张脸,还希望它能在iPad上显示得很好,那你就疯了!)
以下是我目前能想到的唯一解决方案:
1) 将管状体设置为仅1段
2) 创建12个画布元素(每个半径段),宽度等于管长度(请参见上面的我的链接)
3) 现在想象一下,您将在每个画布内创建2000个片段。所以,你把你的画布长度除以2000,并为每一部分设置你的计算颜色!!!(就像Stats()FPS栏显示它的栏一样,但每个栏都有不同的颜色)
4) 然后你只需将你的彩色条画布纹理应用到12个半径段中的每一个,你就可以开始了
这样你只会得到初始页面加载(计算24000条彩色条),而你的整个管道只有12个面
现在,我知道你们的下一个问题是:我将如何选择我的脸来用标记文本显示我的线条
嗯,很简单!只需获取当前面(12个中的1个)拾取位置坐标并将它们转换回JSON,就像处理24000个面一样;)
希望有帮助 小提琴正在演奏r.50。变化是r.52。同样,如果你一次只问一个问题,并且保持你的例子简单,你会得到更多的帮助。这个问题会让读者的眼睛变得呆滞。好的,我会把它改成r.52。我的问题是在画布地图上,所以我解释了整个场景,因为最终我只能在画布上渲染模型。如何从github下载旧版本的three.js?因为最新版本是r53。我可以从标签中选择它,但它没有显示下载r52包的选项@Westlangley设置“无库”,并将其包括在内。这里是一个有着脸的颜色和画布的:感谢如此伟大的高性能逻辑。我已经开始更改为r.53,段=1,画布上的12个面重新绘制。但当我和电子管互动时,它突然消失并再次出现。原因可能是什么-@Alex在“创建宽度等于管长度的12个画布元素(每个半径段)”-如何查找管长度。你能详细解释一下这个步骤吗?——@Alex UnderPlease提供一些例子(JSFiddle?)。现在,对于管状体长度-为什么不自己设置它,使管状体在场景中看起来很好(就像它已经做的那样?),然后获得画布宽度;)你能解释一下你的逻辑吗?——@Alex Under——还有一条路要走。我发现我的方法有些问题。1) 您将无法仅处理12个面(因为画布渲染器)。2) 您可能无法使用“路径”中的管几何体。我认为最好的方法是以30度角组合12个平面。这样你可以操纵他们的纹理贴图,但不是现在这样。看看,告诉我你的想法。