|
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
генерация UVW MAPPING
Планируется реалтайм подстановка фотографии лица в 3d модель. Не знаю как начать искать - как сделать руками текстуру гугл говорит, как сделать финт ушами и автоматизировать процесс без понятия.
пс. на фотографии будут проставлены пользователем контрольные точки - углы глаз, подбородок, губы, нос, углы губ. Тоесть надо сделать текстуру. Как нятянуть и тд, это уже другая задача, там я знаю более менее что делать. |
|
|||||
Так в чем вопрос то?
http://bash.org.ru/quote/408849 Последний раз редактировалось zuxul; 07.12.2010 в 16:02. Причина: добавил ссылку, очень похоже |
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
zuxul - если нечего сказать чего постить то?
Мой вопрос не из ряда "помогите мне сделать самолет я молоток держать умею". Нужно сгенерить текстуру. все. Наложить и тд я знаю как. Такого плана проекты есть, значит это возможно. |
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
Пользователь грузит фото. Раставляет метки. Я анализируя метки вырезаю лицо и выбираю 3d модель подходящую к лицу.
А вот тут я делаю финт ушами и накладываю лицо на 3d модель. Но просто так наложить нельзя. Надо перед этим ее покарежить чтобы она не покарежилась уже на модели. Вопрос - КАК? |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ну если морда триангулирована соответственно модели морды, на которую накладывается фотка, то в чем вопрос? Фотка - это и есть текстура, не надо ничего генерить)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
Короче мне сказали что достаточно обрезанный фотки а информацию по покареживанию будет заложена в 3d обьекте.
|
|
|||||
Lorem ipsum
|
ну как бы я это делал:
все-равно у тебя есть только вид лица спереди — фотография. значит мапинг будет планарным. значит у каждой точки на лице координата UV будет напрямую зависеть просто от координаты XY (проекция любой точки лица на плоскость параллельную экрану). и лицо прямо вырезать не надо — просто квадратный crop. ну и простой алгоритм подбора оптимального "попадания" разных моделей лиц под контрольные точки фотки.
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
А чего пытаюсь загрузить свф файл во вложения пишет некорректный файл, а на фтп залился http://murmadillo.tut.su/m/female-face.swf
__________________
Гоночка Последний раз редактировалось Alex Lexcuk; 07.12.2010 в 19:31. |
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
Спасибо всем за ответы.
Нет задней части не планируется, как и ушей. Все наложилось, анимация стартанула. Если кому интересно вот код с магией. package { import flash.display.MovieClip; import alternativa.engine3d.containers.ConflictContainer; import alternativa.engine3d.core.Camera3D; import alternativa.engine3d.core.View; import alternativa.engine3d.core.Object3D; import flash.display.Bitmap; import alternativa.engine3d.materials.TextureMaterial; import alternativa.engine3d.primitives.Box; import alternativa.engine3d.materials.FillMaterial; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import alternativa.engine3d.loaders.ParserCollada; import alternativa.engine3d.animation.Animation; import alternativa.engine3d.animation.AnimationController; import alternativa.engine3d.animation.AnimationTimer; import alternativa.engine3d.objects.Mesh; import flash.events.MouseEvent; public class main extends MovieClip { var l:URLLoader = new URLLoader ; var cont:ConflictContainer = new ConflictContainer(); var camera:Camera3D = new Camera3D ; var camera_target:Object3D; var material:FillMaterial = new FillMaterial(0xff0000,1,1,0x0000ff); var material1:TextureMaterial = new TextureMaterial(new fase_bmp()); var animation:Animation; var animationController:AnimationController = new AnimationController(); var animationTimer:AnimationTimer = new AnimationTimer(); public function main() { l.load(new URLRequest('a.DAE')); l.addEventListener(Event.COMPLETE,onLoadModel); } public function onLoadModel(e:Event) { var parser:ParserCollada = new ParserCollada; parser.parse(new XML(l.data)); trace(1) var obj:Mesh = parser.getObjectByName('Box01') as Mesh; trace(obj) obj.setMaterialToAllFaces(material1); trace(1) camera_target = parser.getObjectByName('Camera_1') as Object3D; animation = parser.getAnimationByObject(camera_target as Object3D); trace(animation.length); animationController.addAnimation('anim', animation); animationTimer.addController(animationController); animationController.play('anim'); animationTimer.start(); camera.view = new View(1000,1000); addChild(camera.view); cont.addChild(camera); cont.addChild(obj); //cont.addChild(obj2); //cont.addChild(obj3); camera.rotationX = camera_target.rotationX + 3.2; camera.rotationY = -camera_target.rotationY; camera.rotationZ = camera_target.rotationZ; camera.x = camera_target.x; camera.y = camera_target.y; camera.z = camera_target.z; camera.debug = true; addChild(camera.diagram); addEventListener(Event.ENTER_FRAME, onEntFr); stage.addEventListener(MouseEvent.CLICK,function(){ removeEventListener(Event.ENTER_FRAME, onEntFr) }); } var ii:int = 0; public function tyRad(value:Number):Number { return (value*Math.PI)/180; } public function tyGrad(value:Number):Number { //trace(value); return (value/Math.PI)*180; } public function onEntFr(e:Event):void { camera.rotationX = camera_target.rotationX + 3.2; camera.rotationY = -camera_target.rotationY; camera.rotationZ = camera_target.rotationZ; camera.x = camera_target.x; camera.y = camera_target.y; camera.z = camera_target.z; //camera.rotationX+=0.01; animationTimer.update(); camera.render(); } } } Последний раз редактировалось kyzi007; 09.12.2010 в 00:16. Причина: пысы... код тестовый, вы не думайте что такое будет в проекте:) |
Часовой пояс GMT +4, время: 17:33. |
|
« Предыдущая тема | Следующая тема » |
|
|