Cesium 纹理贴图完整_第1页
Cesium 纹理贴图完整_第2页
Cesium 纹理贴图完整_第3页
Cesium 纹理贴图完整_第4页
Cesium 纹理贴图完整_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Cesium纹理贴图根据纹理坐标(2,2)实现2X2的纹理贴图,实现如下效果:首次测试代码如下:constmaterial=Material.fromType(Material.ImageType);material.uniforms.image=image;material.shaderSource=`uniformvec4color_2;uniformvec2repeat_1;uniformsampler2Dimage_0;czm_materialczm_getMaterial(czm_materialInputmaterialInput){czm_materialmaterial=czm_getDefaultMaterial(materialInput);vec2st=materialInput.st;material.diffuse=czm_gammaCorrect(texture2D(image_0,fract(st))).rgb;material.alpha=texture2D(image_0,fract(st)).a;returnmaterial;}`letpositions=newFloat64Array([0.0,0.0,0.0,5000.0,0.0,0.0,5000.0,5000.0,0.0,0.0,5000.0,0.0]);/*纹理坐标*/letuv=[0.0,0.0,2.0,0.0,2.0,2.0,0.0,2.0,];/*发现线*/letnormal=[0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,];letgeometry=newGeometry({attributes:{position:newGeometryAttribute({componentDatatype:ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:positions}),st:newGeometryAttribute({componentDatatype:ComponentDatatype.FLOAT,//数据类型componentsPerAttribute:2,//定义几个为一组values:uv//坐标值}),normal:newGeometryAttribute({componentDatatype:ComponentDatatype.FLOAT,componentsPerAttribute:3,values:normal})},indices:newUint16Array([0,1,2,0,2,3]),primitiveType:PrimitiveType.TRIANGLES,boundingSphere:BoundingSphere.fromVertices(positions)});letrectangleInstance=newGeometryInstance({modelMatrix:Matrix4.multiplyByTranslation(Transforms.eastNorthUpToFixedFrame(this.position),newCartesian3(0.0,0.0,100),newMatrix4()),geometry:geometry,id:'rectangle',});letappr=newMaterialAppearance({material:material});letprimitive=scene.primitives.add(newPrimitive({asynchronous:false,geometryInstances:rectangleInstance,appearance:appr,}));实现效果变成2X1的效果图,而不是2X2的效果图出现这种效果原因:在Cesium源码中Primitive源代码中查看:在如下这段代码中发现,执行了代码纹理压缩,而压缩纹理部分是S部分,而T部分是不压缩的,导致T纹理值为1,而S部分正常functionmodifyForEncodedNormals(primitive,vertexShaderSource){if(!pressVertices){returnvertexShaderSource;}varcontainsNormal=vertexShaderSource.search(/attribute\s+vec3\s+normal;/g)!==-1;varcontainsSt=vertexShaderSource.search(/attribute\s+vec2\s+st;/g)!==-1;if(!containsNormal&&!containsSt){returnvertexShaderSource;}varcontainsTangent=vertexShaderSource.search(/attribute\s+vec3\s+tangent;/g)!==-1;varcontainsBitangent=vertexShaderSource.search(/attribute\s+vec3\s+bitangent;/g)!==-1;varnumComponents=containsSt&&containsNormal?2.0:1.0;numComponents+=containsTangent||containsBitangent?1:0;vartype=numComponents>1?"vec"+numComponents:"float";varattributeName="compressedAttributes";varattributeDecl="attribute"+type+""+attributeName+";";varglobalDecl="";vardecode="";if(containsSt){globalDecl+="vec2st;\n";varstComponent=numComponents>1?attributeName+".x":attributeName;decode+="st=czm_decompressTextureCoordinates("+stComponent+");\n";}if(containsNormal&&containsTangent&&containsBitangent){globalDecl+="vec3normal;\n"+"vec3tangent;\n"+"vec3bitangent;\n";decode+="czm_octDecode("+attributeName+"."+(containsSt?"yz":"xy")+",normal,tangent,bitangent);\n";}else{if(containsNormal){globalDecl+="vec3normal;\n";decode+="normal=czm_octDecode("+attributeName+(numComponents>1?"."+(containsSt?"y":"x"):"")+");\n";}if(containsTangent){globalDecl+="vec3tangent;\n";decode+="tangent=czm_octDecode("+attributeName+"."+(containsSt&&containsNormal?"z":"y")+");\n";}if(containsBitangent){globalDecl+="vec3bitangent;\n";decode+="bitangent=czm_octDecode("+attributeName+"."+(containsSt&&containsNormal?"z":"y")+");\n";}}varmodifiedVS=vertexShaderSource;modifiedVS=modifiedVS.replace(/attribute\s+vec3\s+normal;/g,"");modifiedVS=modifiedVS.replace(/attribute\s+vec2\s+st;/g,"");modifiedVS=modifiedVS.replace(/attribute\s+vec3\s+tangent;/g,"");modifiedVS=modifiedVS.replace(/attribute\s+vec3\s+bitangent;/g,"");modifiedVS=ShaderSource.replaceMain(modifiedVS,"czm_non_compressed_main");varcompressedMain="voidmain()\n"+"{\n"+decode+"czm_non_compressed_main();\n"+"}";return[attributeDecl,globalDecl,modifiedVS,compressedMain].join("\n");}解决问题:将compressVertices设置为false即可letprimitive=scene.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论