Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.02.2013, 13:37
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 1  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
По умолчанию Away3d chrome material

Привет, товарищи
Делал ли кто-нибудь в away3d эффект хромовой поверхности?
Вот я рою интернет и нахожу ссылки на любопытные примеры:
http://away3d.com/comments/chrome-ball // здесь используется SkyBox
http://www.closier.nl/blog/?p=46 // здесь тоже SkyBox
http://away3d.com/comments/ // здесь описываются новые потрясающие свойства, доступные в Away3d 4.1 alpha
В том числе на этой последней странице есть ссылка на демо, и в этом демо как раз то что нужно. Однако, исходников этой демки, как ни печально, нет. А есть только отсылка к уроку, рассказывающему про ATF текстуры.

Теперь про суть проблемы. В приложении есть флешка, где реализованы мои попытки сделать хромовую ножку стола. Если нажимать пробел, то можно увидеть два варианта:
1) По-умолчанию вместо цилиндрической ножки стола выводится правильная прямоугольная призма, грани которой суть плоскости PlanarReflectionTexture (демку можно посмотреть здесь). На этой же странице приводится пример натягивания отражающей текстуры на шар, но для цилиндра это работает плохо (совсем не как хромированная поверхность).
2) Второй вариант – это использование цилиндра с текстурой отражающей SkyBox (используется метод EnvMapMethod). Совсем уже не хром.

Так вот я и мучаюсь. Может ли кто-нибудь ткнуть носом в хороший урок или совет о том как сделать хромовую ножку у стола, чтобы он отражал не только SkyBox, но и нижнюю цилиндрическую ногу?
table.swf   (844.4 Кб)


UPD: у меня при попытке просмотра флешки на форуме вылезает Context3d error. При скачивании и локальном запуске все нормально.
Вложения
Тип файла: swf table.swf (844.4 Кб, 350 просмотров)


Последний раз редактировалось bav; 15.02.2013 в 23:45.
Старый 21.02.2013, 14:10
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Привет еще раз
Я оказался слеп и не заметил, что эта демка с отражающей головой вполне себе мило предоставляет исходники. Достаточно было кликнуть правой кнопкой и вот они 'View source'. Однако, этот отражающий материал никак не хочет "красиво" работать на цилиндрической поверхности. На более или менее сферических поверхностях – сказка! А вот с цилиндром туго. Собственно приложу демку, в которой можно нажимать пробел и смотреть различные объекты (цилиндр, конус, сфера, капсула, тор, параллелепипед) с этим материалом, чтобы понять о чем я говорю.

Есть ли у кого-нибудь мысли, как и цилиндр сделать былью?
table_2.swf   (847.1 Кб)
Вложения
Тип файла: swf table_2.swf (847.1 Кб, 291 просмотров)

Старый 21.02.2013, 15:04
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 3  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Я бы стучался на родной форум Away3d и там бы спрашивал, тут слишком мала концентрация людей, знакомых с away3d, а уж таких, которые бы заморачивались отражающими поверхностями...
__________________
мой пустой блог

Старый 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);
					}
				}			
			}		
		}

Старый 22.02.2013, 22:47
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 5  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
А какой метод отражения используется? Мне кажется тут рефракшен поможет достичь нужного эфекта.. Правда у него нельзя маску для отражения по спекуляру задавать
Кстати еще скажу что с динамическим отражением, лучше его отрендерить один раз . Все таки он довольно нагрузный. Конечно если не нужно динамику видить активно, а просто окружение.

Старый 26.02.2013, 17:40
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 6  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Asfel, используется метод FresnelEnvMapMethod. Попытка использования RefractionEnvMapMethod ни к чему хорошему не привела – начинает отражаться один только SkyBox, а нужно чтобы отражались и другие объекты.
vorodis2, спасибо на информацию. Немного поколдовав с точками меша, удалось добиться лучшего эффекта (но все же недостаточного, см. приложение). Что, по сути, произошло: я сдвинул точки, образующие боковую поверхность цилиндра, по оси Y вниз, и экспериментальным путем определил значение для еще одной магической переменной в массиве, описывающем точки.
Код AS3:
for (j = 0; j < mesh.extra.arrSM[iSub].length; j += 13)
{
	// Это условие определяет точки внизу цилиндра.
	if ((j / 13) >= cylinderSegments * 15 - 2)
	{
		vTest[j + 1] -= (75 + vTest[j + 1]) / 1.3;
		vTest[j + 4] = -0.3;
	}
}
Вообще я попробовал вывести все числа из vertexData для цилиндра (радиус = 8, высота = 150, вертик.сегменты = 8, горизонт.сегменты = 8) и разобраться что за что отвечает. Получилось такая таблица (здоровенная):
Код:
 0       1      2      3     4     5     6    7     8    9    10   11   12
 X       Y      Z      |     |     |     |    |     |    |    |    |    |
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 16.0    75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  1.0  0.5  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 11.3    75.0   11.3   0.0   1.0   0.0   1.0  0.0   0.0  0.9  0.9  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 0.1     75.0   16.0   0.0   1.0   0.0   1.0  0.0   0.0  0.5  1.0  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-11.3    75.0   11.3   0.0   1.0   0.0   1.0  0.0   0.0  0.1  0.9  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-16.0    75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.0  0.5  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-11.3    75.0  -11.3   0.0   1.0   0.0   1.0  0.0   0.0  0.1  0.1  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-0.0     75.0  -16.0   0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.0  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 11.3    75.0  -11.3   0.0   1.0   0.0   1.0  0.0   0.0  0.9  0.1  0.0  0.0
 0.0     75.0   0.0    0.0   1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 16.0    75.0  -0.0    0.0   1.0   0.0   1.0  0.0   0.0  1.0  0.5  0.0  0.0
 --------------------------------------------------------------------------
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 16.0   -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  1.0  0.5  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 11.3   -75.0   11.3   0.0  -1.0   0.0   1.0  0.0   0.0  0.9  0.9  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 0.1    -75.0   16.0   0.0  -1.0   0.0   1.0  0.0   0.0  0.5  1.0  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-11.3   -75.0   11.3   0.0  -1.0   0.0   1.0  0.0   0.0  0.1  0.9  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-16.0   -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.0  0.5  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-11.3   -75.0  -11.3   0.0  -1.0   0.0   1.0  0.0   0.0  0.1  0.1  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
-0.0    -75.0  -16.0   0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.0  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 11.3   -75.0  -11.3   0.0  -1.0   0.0   1.0  0.0   0.0  0.9  0.1  0.0  0.0
 0.0    -75.0   0.0    0.0  -1.0   0.0   1.0  0.0   0.0  0.5  0.5  0.0  0.0
 16.0   -75.0  -0.0    0.0  -1.0   0.0   1.0  0.0   0.0  1.0  0.5  0.0  0.0
 --------------------------------------------------------------------------
 16.0    75.0   0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.0  0.0  0.0
 11.3    75.0   11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.0  0.0  0.0
 0.1     75.0   16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.0  0.0  0.0
-11.3    75.0   11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.0  0.0  0.0
-16.0    75.0   0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.0  0.0  0.0
-11.3    75.0  -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.0  0.0  0.0
-0.0     75.0  -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.0  0.0  0.0
 11.3    75.0  -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.0  0.0  0.0
 16.0    75.0  -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.0  0.0  0.0
 --------------------------------------------------------------------------
 16.0    56.3   0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.1  0.0  0.0
 11.3    56.3   11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.1  0.0  0.0
 0.1     56.3   16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.1  0.0  0.0
-11.3    56.3   11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.1  0.0  0.0
-16.0    56.3   0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.1  0.0  0.0
-11.3    56.3  -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.1  0.0  0.0
-0.0     56.3  -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.1  0.0  0.0
 11.3    56.3  -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.1  0.0  0.0
 16.0    56.3  -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.1  0.0  0.0
 --------------------------------------------------------------------------
 16.0    37.5   0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.3  0.0  0.0
 11.3    37.5   11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.3  0.0  0.0
 0.1     37.5   16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.3  0.0  0.0
-11.3    37.5   11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.3  0.0  0.0
-16.0    37.5   0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.3  0.0  0.0
-11.3    37.5  -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.3  0.0  0.0
-0.0     37.5  -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.3  0.0  0.0
 11.3    37.5  -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.3  0.0  0.0
 16.0    37.5  -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.3  0.0  0.0
 --------------------------------------------------------------------------
 16.0    18.8   0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.4  0.0  0.0
 11.3    18.8   11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.4  0.0  0.0
 0.1     18.8   16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.4  0.0  0.0
-11.3    18.8   11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.4  0.0  0.0
-16.0    18.8   0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.4  0.0  0.0
-11.3    18.8  -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.4  0.0  0.0
-0.0     18.8  -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.4  0.0  0.0
 11.3    18.8  -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.4  0.0  0.0
 16.0    18.8  -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.4  0.0  0.0
 --------------------------------------------------------------------------
 16.0    0.0    0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.5  0.0  0.0
 11.3    0.0    11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.5  0.0  0.0
 0.1     0.0    16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.5  0.0  0.0
-11.3    0.0    11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.5  0.0  0.0
-16.0    0.0    0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.5  0.0  0.0
-11.3    0.0   -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.5  0.0  0.0
-0.0     0.0   -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.5  0.0  0.0
 11.3    0.0   -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.5  0.0  0.0
 16.0    0.0   -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.5  0.0  0.0
 --------------------------------------------------------------------------
 16.0  -18.8    0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.6  0.0  0.0
 11.3  -18.8    11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.6  0.0  0.0
 0.1   -18.8    16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.6  0.0  0.0
-11.3  -18.8    11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.6  0.0  0.0
-16.0  -18.8    0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.6  0.0  0.0
-11.3  -18.8   -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.6  0.0  0.0
-0.0   -18.8   -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.6  0.0  0.0
 11.3  -18.8   -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.6  0.0  0.0
 16.0  -18.8   -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.6  0.0  0.0
 --------------------------------------------------------------------------
 16.0  -37.5    0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.8  0.0  0.0
 11.3  -37.5    11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.8  0.0  0.0
 0.1   -37.5    16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.8  0.0  0.0
-11.3  -37.5    11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.8  0.0  0.0
-16.0  -37.5    0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.8  0.0  0.0
-11.3  -37.5   -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.8  0.0  0.0
-0.0   -37.5   -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.8  0.0  0.0
 11.3  -37.5   -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.8  0.0  0.0
 16.0  -37.5   -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.8  0.0  0.0
 --------------------------------------------------------------------------
 16.0  -56.3    0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  0.9  0.0  0.0
 11.3  -56.3    11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  0.9  0.0  0.0
 0.1   -56.3    16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  0.9  0.0  0.0
-11.3  -56.3    11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  0.9  0.0  0.0
-16.0  -56.3    0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  0.9  0.0  0.0
-11.3  -56.3   -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  0.9  0.0  0.0
-0.0   -56.3   -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  0.9  0.0  0.0
 11.3  -56.3   -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  0.9  0.0  0.0
 16.0  -56.3   -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  0.9  0.0  0.0
 --------------------------------------------------------------------------
 16.0  -75.0    0.0    1.0   0.0   0.0   0.0  0.0  -1.0  0.0  1.0  0.0  0.0
 11.3  -75.0    11.3   0.7   0.0   0.7   0.7  0.0  -0.7  0.1  1.0  0.0  0.0
 0.1   -75.0    16.0   0.1   0.0   1.0   1.0  0.0  -0.1  0.3  1.0  0.0  0.0
-11.3  -75.0    11.3  -0.7   0.0   0.7   0.7  0.0   0.7  0.4  1.0  0.0  0.0
-16.0  -75.0    0.0   -1.0   0.0   0.0   0.0  0.0   1.0  0.5  1.0  0.0  0.0
-11.3  -75.0   -11.3  -0.7   0.0  -0.7  -0.7  0.0   0.7  0.6  1.0  0.0  0.0
-0.0   -75.0   -16.0  -0.0   0.0  -1.0  -1.0  0.0   0.0  0.8  1.0  0.0  0.0
 11.3  -75.0   -11.3   0.7   0.0  -0.7  -0.7  0.0  -0.7  0.9  1.0  0.0  0.0
 16.0  -75.0   -0.0    1.0   0.0  -0.0  -0.0  0.0  -1.0  1.0  1.0  0.0  0.0
 X       Y      Z      |     |     |     |    |     |    |    |    |    |
 0       1      2      3     4     5     6    7     8    9    10   11   12
Из нее становится видно, что те самые еретические 0, 1, 0, 1, 0, 0, не одинаковы для всех вершин. Кроме того между некоторыми столбцами наблюдается закономерность:
Код:
 [3] - это [0] / diameter
 [5] - это [2] / diameter
 [8] - это [3] * -1
Еще интересны 9-й и 10-й столбцы, видимо они отражают какой-то порядок следования точек. Первый и второй большие разделы таблицы (по 16 точек) относятся, по всей видимости, к верхнему и нижнему основанию цилиндра, что ясно из их координат.
Вот такая шляпа.
table_3.swf   (716.6 Кб)


Может кто-нибудь знает, за что отвечают значения в таблице с индексами 3-12?
И кстати, у всех вылезает Context3D Error при просмотре флешки на форуме?
Вложения
Тип файла: swf table_3.swf (716.6 Кб, 268 просмотров)


Последний раз редактировалось bav; 26.02.2013 в 19:34.
Старый 26.02.2013, 19:27
vorodis2 вне форума Посмотреть профиль Отправить личное сообщение для vorodis2 Найти все сообщения от vorodis2
  № 7  
Ответить с цитированием
vorodis2

Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
3,4,5- отвечает за тень, то есть как ее визуализировать и ее интенсивность, в Вашем случии наверно очень важные.
9,10 - это положения текстуры на точке, то есть как растягивать текстуру.

Старый 26.02.2013, 19:45
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 8  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Очень странно с рефракшен методом отражаться тоже должно было все . Но рефракшен имеет такие свойства как изменение положения текстуры отражения и ее масштабирования, так что мог бы дать более приемлемый эффект. Я кстати не совсем понимаю какого вы эфекта хотите добится, но возможно стоит ковыряться с самим текстур рендером в Рендер текстуре... Хотя все это костыль какой то но возможно выставление другйо камеры, линзы и тд.. при рендере даст нужный эфект

Старый 26.02.2013, 20:52
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 9  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Цитата:
3,4,5- отвечает за тень, то есть как ее визуализировать и ее интенсивность, в Вашем случии наверно очень важные.
Это несомненно :-)
Выложу-ка я код и полные исходники, чтобы было понятно, что и как я делаю, может это поможет найти проблему.
Вот главный класс:
Код AS3:
package
{
	import away3d.containers.*;
	import away3d.core.base.*;
	import away3d.entities.*;
	import away3d.lights.*;
	import away3d.materials.*;
	import away3d.materials.methods.*;
	import away3d.primitives.*;
	import away3d.textures.*;
	import away3d.utils.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.ui.*;
 
	[SWF(backgroundColor="#000000", frameRate="30", quality="LOW")]
 
	public class Main extends Base
	{
		// Текстуры
		[Embed(source = "../lib/images/allum.png")]
		public static var Allum:Class;
		[Embed(source = "../lib/images/green_metal.png")]
		public static var GMetal:Class;
		[Embed(source = "../lib/images/trinket_diffuse.jpg")]
		public static var TrinketDiffuse:Class;
		[Embed(source = "../lib/images/radial_gray_2.jpg")]
		public static var RadialBlue:Class;
		[Embed(source = "../lib/images/st.jpg")]
		public static var Photo:Class;
 
		private var reflectionTexture:CubeReflectionTexture;
		private var reflectiveMaterial : ColorMaterial;
		private var cylinderSegments:int = 16;
		private var cylinderRadius:int = 8;
 
		private var texs:Array;
 
		//setup the cube texture
		private var cubeTexture:BitmapCubeTexture;
		private var skyBox:SkyBox;
 
		private var b:Boolean = false;
		private var texture:BitmapTexture;
		private var material:TextureMaterial;
 
		private var atexture:BitmapTexture;
		private var amaterial:TextureMaterial;
 
		// Свет
		private var light:PointLight;
		private var light_2:PointLight;
 
		// Контейнеры
		private var _topSquare:ObjectContainer3D;
		private var _bottomCircle:ObjectContainer3D;
		private var _legCylinder:ObjectContainer3D;
		// Меши
		private var _topSquareMesh:Mesh;
		private var _legCylinderMesh:Mesh;
		private var _bottomCircleMesh:Mesh;
 
		private var _legMeshes:Vector.<Mesh> = new Vector.<Mesh>();
		private var _currLegTexture:int = 0;
 
		public function Main() {
			super();
		}
 
		override protected function onSetup():void {
			// Создаем освещение
			createSun();
			// Создаем объекты
			createObjects();
			// Включаем переключение текстур по пробелу
			stage.addEventListener(KeyboardEvent.KEY_DOWN, clickHand);
			// Массив переключаемых текстур.
			texs = [GMetal, TrinketDiffuse, Allum, Photo];
		}
 
		/**
		 * В этой функции переключаются текстуры.
		 */
		private function clickHand(e:KeyboardEvent):void 
		{
			if (e.keyCode == Keyboard.SPACE)
			{
				++_currLegTexture;
				if (_currLegTexture == texs.length)
					_currLegTexture = 0;
				amaterial.texture = Cast.bitmapTexture( texs[_currLegTexture] );
			}
		}
 
		/**
		 * Здесь создаются объекты и настраиваются текстуры.
		 */
		private function createObjects():void
		{
			// Текстура для SkyBox'а.
			cubeTexture = new BitmapCubeTexture(Cast.bitmapData(RadialBlue), Cast.bitmapData(RadialBlue), Cast.bitmapData(RadialBlue), Cast.bitmapData(RadialBlue), Cast.bitmapData(RadialBlue), Cast.bitmapData(RadialBlue));
 
			//==========================================================================================
			// REFLECTION TEXTURE
			// create reflection texture with a dimension of 512x512x512
			reflectionTexture = new CubeReflectionTexture(512);
			reflectionTexture.farPlaneDistance = 3000;
			reflectionTexture.nearPlaneDistance = 1;
 
			// center the reflection at (0, 0, 0) where our reflective object will be
			reflectionTexture.position = new Vector3D(0, 0, 0);
 
			// setup fresnel method using our reflective texture in the place of a static environment map
			var fresnelMethod : FresnelEnvMapMethod = new FresnelEnvMapMethod(reflectionTexture);
			fresnelMethod.normalReflectance = .6;
			fresnelMethod.fresnelPower = 2;
 
			var refractionMethod : RefractionEnvMapMethod = new RefractionEnvMapMethod( cubeTexture );
 
			//setup the reflective material
			reflectiveMaterial = new ColorMaterial(0x000000);
			reflectiveMaterial.addMethod(fresnelMethod);
 
			// Следующая строка включает refractionMethod.
			//reflectiveMaterial.addMethod(refractionMethod);
 
			// Создание текстур ==========================================================================
			// Текстура для столешницы
			material = new TextureMaterial( Cast.bitmapTexture( TrinketDiffuse ) );
			material.lightPicker = _lightPicker;
 
			// Начальная текстура для нижнего подстолья
			atexture = Cast.bitmapTexture( Photo );
			amaterial = new TextureMaterial( atexture );
			amaterial.lightPicker = _lightPicker;
 
			// SkyBox
			skyBox = new SkyBox(cubeTexture);
			_view.scene.addChild(skyBox);
 
			// Создание квадратного стола =================================================================
			var topSquareSurfaceGeometry:CubeGeometry = new CubeGeometry( 100, 2, 100, 1, 1, 1, false );
			_topSquareMesh = new Mesh( topSquareSurfaceGeometry, material );
			_topSquare = new ObjectContainer3D();
			_view.scene.addChild( _topSquare );
			_topSquareMesh.y = 75;
			_topSquare.addChild( _topSquareMesh );
 
			// Создание цилиндрической ноги =================================================================
			// (массив _legMeshes сохранился с прошлых версий)
			_legMeshes.push(new Mesh( new CylinderGeometry( cylinderRadius, cylinderRadius, 150, cylinderSegments, cylinderSegments ), reflectiveMaterial ));
 
			_legCylinder = new ObjectContainer3D();
			_view.scene.addChild( _legCylinder );
			_legCylinder.addChild( _legMeshes[_currLegTexture] );
 
 
			// Колдунство
			twist(_legCylinder, 1.5);
 
 
			// Создание круглого подстолья ================================================================
			var bottomCircleSurfaceGeometry:CylinderGeometry = new CylinderGeometry( 50, 50, 3, 64 );
			_bottomCircleMesh = new Mesh( bottomCircleSurfaceGeometry, amaterial );
			_bottomCircle = new ObjectContainer3D();
			_view.scene.addChild( _bottomCircle );
			_bottomCircleMesh.y = -75;
			_bottomCircle.addChild( _bottomCircleMesh );
 
		}
 
		/**
		 * Твиситит все мешы по обьекту
		 * @param	content3D
		 * @param	twistX
		 * @param	twistY
		 * @param	twistZ
		 * @param	startBool в первый раз создают клон геометриии
		 */
		private 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)
					{
						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)
						{
							// Вот здесь все изменения ============================================
							if ((j / 13) >= cylinderSegments * 15 - 2)
							{
								vTest[j + 1] -= (75 + vTest[j + 1]) / 1.3;
								vTest[j + 4] = -0.3;
							}
							// ====================================================================
						}
						subGeom = mesh.subMeshes[iSub].subGeometry as CompactSubGeometry;
						subGeom.updateData(vTest);
					}
				}			
			}		
		}
 
		private function createSun():void
		{
			// Light objects.
			light = new PointLight();
			light.ambient = 0.3;
			light.diffuse = 2;
			light.specular = 0.75;
			light.x = 500;
			light.z = 300;
			light.y = 200;
 
			light_2 = new PointLight();
			light_2.ambient = 0.3;
			light_2.diffuse = 2;
			light_2.specular = 0.75;
			light_2.x = -500;
			light_2.z = 300;
			light_2.y = 200;
 
			_lightPicker.lights = [ light, light_2 ];
		}
 
		override protected function onUpdate():void
		{
			reflectionTexture.render(_view);
			super.onUpdate();
		}
 
	}
}
А вот чего хочется:
Нажмите на изображение для увеличения
Название: wish.jpg
Просмотров: 411
Размер:	14.9 Кб
ID:	29192
Кстати попытка применить reflectiveMaterial к нижнему плоскому подстолью не приносит желаемого результата – в нем не отражается вертикальная цилиндрическая нога.
Вложения
Тип файла: zip table.zip (533.7 Кб, 178 просмотров)
Тип файла: swf table_4.swf (722.9 Кб, 172 просмотров)

Старый 26.02.2013, 21:23
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 10  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Нужно отрендерить ножку на плоскую текстуру, затем положить ее как планар рефлек на подножку. Для ножки отрендерить куб который находится гораздо ближе к ножке либо плоскую стену %)

Добавлено через 5 минут
Ах да, для того чтобы отражалось то что нужно нужно игратся с центром отражения

Код:
reflectionTexture.position = new Vector3D()
.

На деле для меня оказалось очень сложно управлять динамическим отражением т.е чтобы оно отражало то что мне нужно и там где нужно. Поэтому я либо рендерю отражение 1 раз на лету и патом использую как текстуру отражения. Либо отражаю заранее подготовленные текстуры. Кроме того динамическое отражение довольно таки сильно грузит систему

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.