Тема: [Away3D] Away3d chrome material
Показать сообщение отдельно
Старый 21.02.2013, 16:34
vorodis2 вне форума Посмотреть профиль Отправить личное сообщение для vorodis2 Найти все сообщения от vorodis2
  № 4  
Ответить с цитированием
vorodis2

Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
я бы не сказал что форум Away3d уж так активен, из 6 вопросов что я там задавал, мне ответили только по 2 .
По поводу демок, первое что я сделал, когда начал въезжать в away это собрал все демки которые они предоставляют , там их штук 15, но очень помогло, bav рекомендую и вам собрать, там есть еще два примера с зеркальной поверхностью.
По поводу цилиндра, попробуйте.
1.Исказить целиндер, чуть чуть, то есть все вершины перемножить на Math.rendom()*0.2+0.9.
2. Может есть смысл тоже самое попробовать с точками нанесения текстуры, хотя ХЗ.

На всякий, я так добираюсь до вершин.
где
data= new Vector.<Number>();//Массив с точками для меша с шагом 13 тоесть это меш.геометрия.vertexData
data.push(v.x, v.y, v.z, 0, 1, 0, 1, 0, 0, point.x, point.y, 0, 0);
v= позиция точки
point= положения текстуры 0-1
3. там есть , 0, 1, 0, 1, 0, 0 - я понятия не имею что это за ересть, но можете тоже ее проверить, может даст какойто результат.
Код AS3:
/**
		 * Твиситит все мешы по обьекту
		 * @param	content3D
		 * @param	twistX
		 * @param	twistY
		 * @param	twistZ
		 * @param	startBool в первый раз создают клон геометриии
		 */
		public static function twist(content3D:ObjectContainer3D, twistX:Number, zX:Number=0, zZ:Number=0):void{
 
 
			var subGeom:CompactSubGeometry;
			var sah:Number = 0;
			var point0:Point=new Point(zX, zZ);
			var point1:Point=new Point();
 
			var ang:Number = 0;
			var dist:Number = 0;
			var maxY:Number = content3D.maxY;
			var mmY:Number = content3D.maxY- content3D.minY;
			var pros:Number = 0;
 
			var vTest:Vector.<Number>; //вершины субмеша			
			var iSub:int = 0;	//счетчик субмешей
			var lSub:uint = 0; //количество субмешей
			var i:int
			var j:int
 
			for (i = 0; i < content3D.numChildren; i++) {				
				if (content3D.getChildAt(i) is Mesh) {
 
					var mesh:Mesh = content3D.getChildAt(i) as Mesh;
					lSub = mesh.subMeshes.length; //количество субмешей
 
					if (mesh.extra == undefined) {						
						mesh.extra = { };
					}
					if (mesh.extra.arrSM == undefined||mesh.extra.arrSM == null) {	
						mesh.extra.arrSM = [];
					}
					for (iSub=0; iSub < lSub; iSub++) { //цикл по субмешам меша
						if (mesh.extra.arrSM[iSub] == undefined) {							
							mesh.extra.arrSM[iSub] = new Vector.<Number>;	
							for (j = 0; j < mesh.subMeshes[iSub].vertexData.length;j++) { //цикл по субмешам меша
								mesh.extra.arrSM[iSub].push(mesh.subMeshes[iSub].vertexData[j]);								
							}
						}
						vTest = new Vector.<Number>;						
						for (j = 0; j < mesh.subMeshes[iSub].vertexData.length;j++) { //цикл по субмешам меша							
							vTest.push(mesh.extra.arrSM[iSub][j]);								
						}
 
 
						for (j = 0; j < mesh.extra.arrSM[iSub].length;j+=13) { //цикл по субмешам меша							
							pros =1- (maxY - mesh.extra.arrSM[iSub][j + 1]) / mmY;
 
							point1.x = mesh.extra.arrSM[iSub][j];
							point1.y = mesh.extra.arrSM[iSub][j+2];
 
							ang = anglePoisk(point0, point1)-twistX*pros;
							dist = getDistance(point0, point1);
							point1 = getVector(dist, ang);
 
							vTest[j] = point0.x+point1.x;
							vTest[j+2] = point0.y+point1.y;
						}
						subGeom= mesh.subMeshes[iSub].subGeometry as CompactSubGeometry;
						subGeom.updateData(vTest);
					}
				}			
			}		
		}