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

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.08.2010, 14:51
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 11  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Котяра, ты наверное невнимательно читал мой пост выше.
В том то и дело, что ошибки округления мы исключаем.
Какие еще варианты, кроме полнолуния? =)
__________________
Поймай яблоко 2!

Старый 17.08.2010, 15:24
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 12  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Ну почему исключаем? как раз в них и дело.
Цитата:
Потому что два треугольника рядом имеют общую грань, отрисованную по ТЕМ ЖЕ точкам.
Движки самостоятельно рассчитывают для каждого треугольника его местонахождение в проекции экрана, исходя из положения камеры и еще кучи всяких параметров - вот и накапливаются ошибки - точки не ТЕ ЖЕ, чтобы их нивелировать желательно делать нахлёст на макс погрешность.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 17.08.2010 в 15:26.
Старый 17.08.2010, 15:37
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 13  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Давай абстрагируемся от подсчета координат точек. Анализируем только сам алгоритм прорисовки треугольника. Даже нет — линии.

Имеются две точки (x1, y1), (x2, y2). Максимальной точности со всеми там погрешностями и как никогда "криво" посчитанные 4 числа типа Number — неважно. Как можно нарисовать две линии из первой точки во вторую, так чтобы они не совпали? Это ж спецом надо монетку бросать в каких-то местах алгоритма, чтобы случайным образом выстроить точки и подрисовать antialiasing как-то иначе.

И все же, еще раз перечитай пост про мои пробы в инструменте free transform, потому что ты заставляешь меня повторяться — меня это удивляет =)

Добавлено через 5 минут
Цитата:
Сообщение от Котяра Посмотреть сообщение
точки не ТЕ ЖЕ
А вот с этого места поподробнее =)

Я всегда полагал, что 3d модель упрощенно можно записать как массив всех точек и массив треугольников, где каждый содержит в себе всего лишь указатель на точки, на которые он опирается.

И при просчете некая Point3D преобразуется в Point2D лишь один раз.

И при прорисовке двух (уже плоских) смежных треугольников у них по прежнему есть одна грань, которая точно проведена из ТЕХ ЖЕ точек.
__________________
Поймай яблоко 2!

Старый 17.08.2010, 15:59
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 14  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Я как-то писал free transform. Когда я пробовал искажать уже текстурированный треугольник, появлялись прострелы.
что значит уже текстурированный и что значит искажать? Ты искажаешь обёрнутый спрайт с битмапами?
Цитата:
И я решил делать наоборот — треугольник рисовать точно по точкам, а искажать непосредственно текстуру. Прострелы исчезли. Потому что два треугольника рядом имеют общую грань, отрисованную по ТЕМ ЖЕ точкам.
вот и ответ на твой вопрос - ТЕ ЖЕ ТОЧКИ

Цитата:
Отсюда и вопрос — почему отрисовка текстурированных треугольников по заранее просчитанным точкам в 2D происходит чистенько, а в 3D с прострелами?
не ТЕ ЖЕ точки.
__________________
Отряд Котовскага

Старый 17.08.2010, 16:05
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 15  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Котяра Посмотреть сообщение
не ТЕ ЖЕ точки.
Обоснуй. Ты просто продублировал утверждение, которое я аргументированно называю ложным.
__________________
Поймай яблоко 2!

Старый 17.08.2010, 16:07
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 16  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Я не увидел аргументов.
Цитата:
Я всегда полагал, что 3d модель упрощенно можно записать как массив всех точек и массив треугольников, где каждый содержит в себе всего лишь указатель на точки, на которые он опирается.
И при просчете некая Point3D преобразуется в Point2D лишь один раз.
Это не всегда так
3d модель - это набор полигонов, точки у них собственные, соответственно они могут отличаться для соседних полигонов при проецировании.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 17.08.2010 в 16:10.
Старый 17.08.2010, 16:16
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 17  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Котяра Посмотреть сообщение
Я не увидел аргументов.
Это плохо тебя характеризует ) пост №13 прочитай полностью.
И для того, чтобы меньше было бессмысленных/необоснованных ответов с твоей стороны почитай о том, как рисуются треугольники в самом Flash.

Пояснение очевидных фактов отвлекает от сути вопроса.

Добавлено через 9 минут
Цитата:
Сообщение от Котяра Посмотреть сообщение
Это не всегда так
3d модель - это набор полигонов, точки у них собственные, соответственно они могут отличаться для соседних полигонов при проецировании.
Вот теперь понятно. Сори, если был несколько... несдержан =) просто ты не утверждай, если не уверен на 107%.

Предполагаемый тобой метод описания модели будет по меньшей мере неоптимален как для хранения, так и для визуализации.

Чтобы два смежных треугольника не опирались на 2 общие точки — это надо еще так смоделировать специально!

Так что предлагаю вернуться к загадке о том, откуда берутся "прострелы".
__________________
Поймай яблоко 2!

Старый 17.08.2010, 16:33
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 18  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
3d модель - это набор полигонов, точки у них собственные, соответственно они могут отличаться для соседних полигонов при проецировании.
@Котяра, ты не прав. Даже старинный формат VRML основан на том, что
- есть точки, описываемые тремя координатами каждая
- есть текстурные координаты, описываемые двумя цифрами
- есть полигоны, описываемые тремя индексами точек и тремя индексами текстурных координат

@zebestov
Зачастую в целях повышения производительности во flash-движках различные части модели рендерятся в разные контейнеры - отсюда возникают искажения.

В свое время показывал silin'у свои эксперименты - если, образно говоря, делить модель на слои (по "глубине" ее частей относительно плоскости экрана) и рендерить по несколько полигонов в один Shape - то просветов никаких нет. Если же рендерить один полигон в один контейнер - то появляются косяки
__________________
...вселенская грусть

Старый 17.08.2010, 16:42
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 19  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
это из nd3d - смотри коммент про smoothing
Код AS3:
		public static function renderUV(stage:Sprite, material:Material, a:Vertex, b:Vertex, c:Vertex, uvMap:Array, colorFactor:Number, ambientColor:uint):void 
		{
 
			var x0:Number = a.screenX;
			var y0:Number = a.screenY;
			var x1:Number = b.screenX;
			var y1:Number = b.screenY;
			var x2:Number = c.screenX;
			var y2:Number = c.screenY;
 
			var texture:BitmapData = material.texture;
 
			var w:Number = texture.width;
			var h:Number = texture.height;
 
			var u0:Number = uvMap[0].u * w;
			var v0:Number = uvMap[0].v * h;
			var u1:Number = uvMap[1].u * w;
			var v1:Number = uvMap[1].v * h;
			var u2:Number = uvMap[2].u * w;
			var v2:Number = uvMap[2].v * h;
 
			var sMat:Matrix = new Matrix();
			var tMat:Matrix = new Matrix();
 
			tMat.tx = u0;
			tMat.ty = v0;
 
			tMat.a = (u1 - u0) / w;
			tMat.b = (v1 - v0) / w;
			tMat.c = (u2 - u0) / h;
			tMat.d = (v2 - v0) / h;
 
			sMat.a = (x1 - x0) / w;
			sMat.b = (y1 - y0) / w;
			sMat.c = (x2 - x0) / h;
			sMat.d = (y2 - y0) / h;
 
			sMat.tx = x0;
			sMat.ty = y0;
 
			tMat.invert();
			tMat.concat(sMat);
 
			var smoothing:Boolean = material.smoothed;
			// check if points are not to close to each other, disable smoothing
			// beginBitmapFill draw bug?!
			if(smoothing) 
			{ 
				var dx:Number = x1 - x0;
				var dx2:Number = x2 - x1;
				var dy:Number = y1 - y0;
				var dy2:Number = y2 - y1;
 
				if(Math.abs(dx / dy - dx2 / dy2) < 1) 
				{
					smoothing = false;
				}
			}
 
                        var gfx:Graphics = stage.graphics;
 
			gfx.beginBitmapFill(texture, tMat, false, smoothing);
			gfx.moveTo(x0, y0);
			gfx.lineTo(x1, y1);
			gfx.lineTo(x2, y2);
			gfx.lineTo(x0, y0);
			gfx.endFill();
насчёт разных точек -
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 17.08.2010 в 16:50.
Старый 17.08.2010, 16:47
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 20  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
gloomyBrain, вот это уже интересно, хотя по-прежнему непонятно.
Т.е. другими словами если я нарисую два треугольника ABC и CBD в разных контейнерах, то между ними будет вероятен просвет, а если в один — то нет?

Котяра, посмотрел.
Мне страшно за людей, которые смело без проверки делят на число, которое может вполне себе запросто оказаться нулем =)
Но в любом случае я не понял, что они там проверяют в этом условии?
Но главное в другом — тут не идет речь о разных точках для смежных поликов. Они там работают с опорными точками отдельно взятого полигона.
UPD: и шота это им нифига не помогло: http://www.nulldesign.de/nd3d/teaser/ =) простреливает.
__________________
Поймай яблоко 2!


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

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

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


 


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


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