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

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

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

Регистрация: Jan 2006
Сообщений: 27
Cool Освещение

Вот я решил сделать красивое освещение.
Должно получиться примерно так:

[IMG]http://img182.**************/img182/2743/21kp4.png[/IMG]

Пока всё, что получилось - вот

Не могу понять, как выбрать стороны по ктотрым рисовать тень.

Вот, собственно, код:

Код:
import flash.geom.Point;
var lights = new Array();
var objs = new Array();
var rad = Math.PI/180;
lights.push(new Point(Stage.width/2, Stage.height/2));
objs.push({pos:new Point(0, 0), size:50, r:0});
_root.createEmptyMovieClip("render", 0);
function drawRBox(coners) {
	render.lineStyle(2, 0x000080, 50);
	render.moveTo(corners[0].x, corners[0].y);
	render.lineTo(corners[1].x, corners[1].y);
	render.lineTo(corners[2].x, corners[2].y);
	render.lineTo(corners[3].x, corners[3].y);
	render.lineTo(corners[0].x, corners[0].y);
}
function getRBoxCorners(pos, size, rot) {
	return new Array(new Point(pos.x+Math.cos(rot-45*rad)*size, pos.y+Math.sin(rot-45*rad)*size), new Point(pos.x+Math.cos(rot+45*rad)*size, pos.y+Math.sin(rot+45*rad)*size), new Point(pos.x+Math.cos(rot+135*rad)*size, pos.y+Math.sin(rot+135*rad)*size), new Point(pos.x+Math.cos(rot+225*rad)*size, pos.y+Math.sin(rot+225*rad)*size));
}
function calcCorners(corners) {
	corners2 = new Array();
	for (i=0; i<4; i++) {
		v = corners[i].subtract(lights[0]);
		corners2[i] = {vec:v.add(lights[0]), len:v.length};
	}
	corners2.sortOn("len", 16); // TODO разобраться с сортировкой
}
function drawShadow() {
	render.lineStyle(2, 0x800000, 50);
	render.beginFill(0x800000, 25);
	v = corners2[0].vec;
	render.moveTo(v.x, v.y);
	v2 = v.subtract(lights[0]);
	v2.normalize(400);
	v2 = v2.add(lights[0]);
	v2.subtract(v);
	render.lineTo(v2.x, v2.y);
	v = corners2[1].vec;
	render.moveTo(v.x, v.y);
	v2 = v.subtract(lights[0]);
	v2.normalize(400);
	v2 = v2.add(lights[0]);
	v2.subtract(v);
	render.lineTo(v2.x, v2.y);
	v = corners2[2].vec;
	render.moveTo(v.x, v.y);
	v2 = v.subtract(lights[0]);
	v2.normalize(400);
	v2 = v2.add(lights[0]);
	v2.subtract(v);
	render.lineTo(v2.x, v2.y);
	v = corners2[3].vec;
	render.moveTo(v.x, v.y);
	v2 = v.subtract(lights[0]);
	v2.normalize(400);
	v2 = v2.add(lights[0]);
	v2.subtract(v);
	render.lineTo(v2.x, v2.y);
	render.endFill();
}
Point.prototype.toCursorSmooth = function() {
	this.x += (_xmouse-this.x)/20;
	this.y += (_ymouse-this.y)/20;
};
function drawCross(pos) {
	render.lineStyle(2, 0x008000, 50);
	render.moveTo(pos.x-5, pos.y-5);
	render.lineTo(pos.x+5, pos.y+5);
	render.moveTo(pos.x+5, pos.y-5);
	render.lineTo(pos.x-5, pos.y+5);
}
function drawLine(from, to) {
	render.moveTo(from.x, from.y);
	render.lineTo(to.x, to.y);
}
onEnterFrame = function () {
	render.clear();
	objs[0].r += Math.PI/180;
	objs[0].pos.toCursorSmooth();
	corners = getRBoxCorners(objs[0].pos, objs[0].size, objs[0].r);
	drawRBox(corners);
	calcCorners(corners);
	drawShadow();
	drawCross(lights[0]);
};

Старый 01.10.2006, 05:59
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 2  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 LiQuiDaToR:
Не совсем понятно...
1. Тень от какого обьекта?
2. На какой обьект должна падать тень от первого обьекта?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 01.10.2006, 12:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Вероятно это куб, а крестик — источник света.

Старый 03.10.2006, 05:26
LiQuiDaToR вне форума Посмотреть профиль Отправить личное сообщение для LiQuiDaToR Найти все сообщения от LiQuiDaToR
  № 4  
Ответить с цитированием
LiQuiDaToR

Регистрация: Jan 2006
Сообщений: 27
2 Хемуль:
Есть такая игра, Gish называется. Вот там именно такое освещение.
вот

Старый 03.10.2006, 21:31
D12 вне форума Посмотреть профиль Отправить личное сообщение для D12 Найти все сообщения от D12
  № 5  
Ответить с цитированием
D12
меценат
 
Аватар для D12

блогер
Регистрация: Jan 2004
Адрес: D
Сообщений: 1,592
Записей в блоге: 2
Цитата:
Есть такая игра, Gish называется. Вот там именно такое освещение.
всю прошел =)
__________________
Безвыходных положений небывает © Барон Мюнхаузен=)Исходники

Старый 03.10.2006, 22:53
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 6  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Цитата:
Сообщение от LiQuiDaToR
Вот я решил сделать красивое освещение.
Должно получиться примерно так:

Не могу понять, как выбрать стороны по ктотрым рисовать тень.
Можно посчитать расстояния от источника до центров сторон квадрата.
Есть два случая:
1) источник вне области квадрата;
2) источник в этой области; //тень от всех граней

Если источник вне области, занимаемой квадратом, то все просто:
стороны(в случае квадрата их может быть две), расстояние до центров которых минимально, не будут отбрасывать тени.

Нужно найти набор расстояний(предельный чтоли) при котором источник находится внутри области квадрата. (как это сделать мне неизвестно, к сожалению)
+
p.s.Не претендую на абсолютную истину и проч.

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

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

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


 


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


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