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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Dec 2007
Сообщений: 14
Отправить сообщение для Foristel с помощью ICQ
Question drawTriangles() и lineStyle()

Есть грань-четырёхугольник, созданная методом drawTriangles(),
она состоит из двух треугольников.
Управляя lineStyle(), можно сделать все рёбра невидимыми или видимыми.
Как сделать видимыми только рёбра контура (а диагональные - невидимыми) - ?
Т.е. возможно ли выборочно прорисовывать рёбра методом drawTriangles() - ?
Если да, то как?
Возможно, для этого потребуется модифицировать сам метод drawTriangles(),
можно ли где-то увидеть исходный код этого метода?

Старый 04.03.2013, 18:57
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
с родным drawTriangles ничего этого нельзя - ни выборочно рисовать, ни посмотреть код, ни модифицировать
остается рисовать треугольники с пустым lineSyle(), а затем линии обычным lineTo
если данные для drawTriangles составляются по каким-то определенным правилам, то можно все это в какую-то утилиту завернуть
например, для варианта когда диагональ обязательно последняя в каждой тройке
Код AS3:
public function Main():void 
{
 
	var vertices:Vector.<Number> = Vector.<Number>([10, 10, 100, 10, 100, 100, 10, 100]);
	var indices:Vector.<int> = Vector.<int>([0, 1, 3, 2, 3, 1]);
	graphics.beginFill(0xC0C0C0);
	drawEdgedTriangles(graphics, vertices, indices, 0, 0xFF0000);
 
}
static public function drawEdgedTriangles(graphics:Graphics, vertices:Vector.<Number>, indices:Vector.<int>, thickness:Number=0,color:uint=0x0):void
{
 
	graphics.drawTriangles(vertices, indices);
	graphics.lineStyle(thickness, color);
 
	for (var i:int = 0; i < indices.length; i+=3) 
	{
		graphics.moveTo(vertices[2 * indices[i]], vertices[2 * indices[i] + 1]);
		graphics.lineTo(vertices[2 * indices[i + 1]], vertices[2 * indices[i + 1] + 1]);
		graphics.moveTo(vertices[2 * indices[i]], vertices[2 * indices[i] + 1]);
		graphics.lineTo(vertices[2 * indices[i + 2]], vertices[2 * indices[i + 2] + 1]);
 
	}
 
}

Старый 04.03.2013, 20:39
Foristel вне форума Посмотреть профиль Отправить личное сообщение для Foristel Посетить домашнюю страницу Foristel Найти все сообщения от Foristel
  № 3  
Ответить с цитированием
Foristel

Регистрация: Dec 2007
Сообщений: 14
Отправить сообщение для Foristel с помощью ICQ
ясно.
думаю, что отдельные ребра (и любые линии в этой плоскости)
можно делать самим drawTriangles (задавая очень малое расстояние между одной парой вершин),
тогда и с видимостью рёбер при вращении всего объекта всё должно быть в порядке,
только громоздко получится.
...а жаль, что нельзя залезть в drawTriangles

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Как сделать видимыми только рёбра контура (а диагональные - невидимыми) - ?
Наложить растровую текстуру с контуром квадрата.

Добавлено через 19 минут
Модифицированный пример от Adobe
Код AS3:
package
{
	import flash.display.BitmapData;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Rectangle;
	import flash.utils.getTimer;
 
	public class Triangles extends Sprite
	{
		// plane vertex coordinates (and t values) 
		private var x1:Number = -100,    y1:Number = -100,    z1:Number = 0,    t1:Number = 0; 
		private var x2:Number = 100,    y2:Number = -100,    z2:Number = 0,    t2:Number = 0; 
		private var x3:Number = 100,    y3:Number = 100,    z3:Number = 0,    t3:Number = 0; 
		private var x4:Number = -100,    y4:Number = 100,    z4:Number = 0,    t4:Number = 0; 
		private var focalLength:Number = 200;      
		// 2 triangles for 1 plane, indices will always be the same 
		private var indices:Vector.<int>; 
 
		private var container:Sprite;
 
		private var bitmapData:BitmapData;
 
		public function Triangles()
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
 
			indices =  new Vector.<int>(); 
			indices.push(0,1,3, 1,2,3);
 
			bitmapData = new BitmapData(200, 200, false, 0x00000000);
			bitmapData.fillRect(new Rectangle(2, 2, 196, 196), 0xFFFFFF);
 
			container = new Sprite(); // container to draw triangles in 
			container.x = 200; 
			container.y = 200;
			addChild(container);
 
			addEventListener(Event.ENTER_FRAME, rotatePlane); 
		}
 
		private function rotatePlane(event:Event):void { 
			// rotate vertices over time 
			var ticker:Number = getTimer()/400; 
			z2 = z3 = -(z1 = z4 = 100*Math.sin(ticker)); 
			x2 = x3 = -(x1 = x4 = 100*Math.cos(ticker)); 
 
			// calculate t values 
			t1 = focalLength/(focalLength + z1); 
			t2 = focalLength/(focalLength + z2); 
			t3 = focalLength/(focalLength + z3); 
			t4 = focalLength/(focalLength + z4); 
 
			// determine triangle vertices based on t values 
			var vertices:Vector.<Number> = new Vector.<Number>(); 
			vertices.push(x1*t1,y1*t1, x2*t2,y2*t2, x3*t3,y3*t3, x4*t4,y4*t4); 
			// set T values allowing perspective to change 
			// as each vertex moves around in z space 
			var uvtData:Vector.<Number> = new Vector.<Number>(); 
			uvtData.push(0,0,t1, 1,0,t2, 1,1,t3, 0,1,t4); 
 
			// draw 
			container.graphics.clear(); 
			container.graphics.beginBitmapFill(bitmapData); 
			container.graphics.drawTriangles(vertices, indices, uvtData); 
		} 
	}
}
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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