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

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

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

Регистрация: Mar 2010
Сообщений: 44
По умолчанию Пропадают полигоны

Здравствуйте, хочу создать 3Д панораму в Away3D. Создал 6 плоскостей и расположил их во круг камеры по кубу. Только с плоскостями проблема (((. Их полигоны при вращении камеры исчезают. Что можно сделать?
Вот код AS:
Код AS3:
package {
 import away3d.containers.Scene3D;
 import away3d.containers.View3D;
 import away3d.cameras.Camera3D;
 import away3d.primitives.Sphere;
  import away3d.primitives.Plane;
 
 import flash.display.MovieClip;
 import flash.media.Camera;
 import away3d.cameras.Camera3D;
 
 
 [SWF (width="600",height="400",frameRate="31",backgroundColor="0x000000")]
 public class away3d_prj01_world extends MovieClip
 {
  private var view:View3D;
 
  private var front:Plane=new Plane;
  private var back:Plane=new Plane;
  private var left:Plane=new Plane;
  private var right:Plane=new Plane;
  private var top:Plane=new Plane;
  private var bottom:Plane=new Plane;
 
  public var vrx:Number=0;
  public var vry:Number=0;
  private var cam:Camera3D=new Camera3D;
 
  public function away3d_prj01_world()
  {
   view=new View3D({camera:cam, x:300, y:200, z:-100});
   addChild(view);
 
   view.x=300;
   view.y=200;
 
   vrx=0;
   vry=0;
   // set view postion
 
   var scene:Scene3D=new Scene3D;
   view.scene=scene;
 
 
   front.z=500;
   front.rotationX=90;
   front.width=1000;
   front.height=1000;
 
   scene.addChild(front);
 
   back.z=-500;
   back.rotationX=-90;
   back.width=1000;
   back.height=1000;
 
   scene.addChild(back);
 
   left.x=-500;
   left.rotationY=90;
   left.rotationX=-90;
   left.width=1000;
   left.height=1000;
 
   scene.addChild(left);   
 
   right.x=500;
   right.rotationY=-90;
   right.rotationX=-90;
   right.width=1000;
   right.height=1000;
 
   scene.addChild(right);   
 
   top.y=500;
   top.rotationX=180;
   top.width=1000;
   top.height=1000;
 
   scene.addChild(top);  
 
   bottom.y=-500;
   bottom.width=1000;
   bottom.height=1000;
 
   scene.addChild(bottom);  
 
   // lets visualyze
   view.render();
  }
 
 
 
   public function zoom(r:int):void
   {
	   cam.zoom+=r;
	   view.render();
   }
   public function rotx(r:int):void
   {if((cam.rotationX+r<90)&&(cam.rotationX+r>-90))
	   {
	   cam.rotationX+=r;
	   if(cam.rotationX>360)
	   {
		   cam.rotationX-=360;
	   }
	   if(cam.rotationX<0)
	   {
		   cam.rotationX+=360;
	   }
	   view.render();
	   }
   }
   public function roty(r:int):void
   {
	   cam.rotationY+=r;
	   if(cam.rotationY>360)
	   {
		   cam.rotationY-=360;
	   }
	   if(cam.rotationY<0)
	   {
		   cam.rotationY+=360;
	   }
	   view.render();
   }
 }
}
И вот код fla:
Код AS3:
import away3d_prj01_world;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.display.*;
 
 
import away3d.containers.*;
 
import away3d.core.base.*;
 
import away3d.primitives.*;
 
import away3d.materials.*;
 
import away3d.core.utils.Cast;
 
import away3d.cameras.*;
 
import flash.filters.BitmapFilter;
 
import flash.filters.BitmapFilterQuality;
 
import flash.filters.BitmapFilterType;
 
import flash.filters.GlowFilter;
import flash.sampler.NewObjectSample;
import away3d.test.Button;
import flash.display.MovieClip;
 
var m_x:int=0;
var m_y:int=0;
var log:Boolean=false;
 
var r_x:int=0;
var r_y:int=0;
var bit_rot:int=0;
 
var r:Number=0;
var lastKey:uint=0;
var keyIsDown:Boolean = false;
this.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
this.stage.addEventListener(KeyboardEvent.KEY_UP,keyUp);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN,clik);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE,mov);
this.stage.addEventListener(MouseEvent.MOUSE_UP,up);
this.stage.addEventListener(MouseEvent.MOUSE_WHEEL,plus);
 
 
function plus(e:MouseEvent):void
{if((cam.zoom<=5)&&(e.delta<0))
{
	cam.zoom=6;
	view.render();
}
	else 
 
	if(cam.zoom+e.delta>5) zoom(e.delta);
 
}
 
function up(e:MouseEvent):void
{
	log=false;
	vrx=0;
	vry=0;
}
 
function clik(e:MouseEvent):void
{
	m_x=mouseX;
	m_y=mouseY;
	log=true;
}
 
function mov(e:MouseEvent):void
{
	if(log==true)
	{
	if((mouseX-m_x)/30<10)
	vry=(mouseX-m_x)/30;
	else
	vry=10;
	if((m_y-mouseY)/30<10)
	vrx=(m_y-mouseY)/30;
	else
	vrx=10;
	}
}
 
 
var tex_fr:
 
 
 
function keyDown(e:KeyboardEvent):void
		{
			lastKey = e.keyCode;
			keyIsDown = true;
		}
function keyUp(e:KeyboardEvent):void
		{
			keyIsDown = false;
		}
 
root.addEventListener(Event.ENTER_FRAME,myFun);
 
function myFun(e:Event):void
{
	rotx(vrx);
	roty(vry);
	if(keyIsDown){
                // if the key is still pressed, just keep on moving
                switch(lastKey){
                    case 87				: r_x=34; r_y=245; bit_rot=1; break;
                    case 83				: rotx(-3); break;
                    case 65				: roty(-3); break;
                    case 68				: roty(3); break;
 
                }
	}
}
 
var but_up:MovieClip=new btn_rot_up();
var but_down:MovieClip=new btn_rot_up();
var but_left:MovieClip=new btn_rot_left();
var but_right:MovieClip=new btn_rot_left();
var but_in:MovieClip=new Zoom_in();
var but_out:MovieClip=new Zoom_out();
 
addChild(but_down);
addChild(but_up);
addChild(but_left);
addChild(but_right);
addChild(but_in);
addChild(but_out);
 
but_up.x=250;
but_up.y=350;
 
but_down.x=330;
but_down.y=390;
but_down.scaleY=-1;
 
but_left.x=170;
but_left.y=350;
 
but_right.x=470;
but_right.y=350;
but_right.scaleX=-1;
 
but_in.x=20;
but_in.y=350;
 
but_out.x=100;
but_out.y=350;
 
 
but_up.addEventListener(MouseEvent.MOUSE_DOWN,turn_up);
but_down.addEventListener(MouseEvent.MOUSE_DOWN,turn_down);
root.addEventListener(MouseEvent.MOUSE_UP,stop_turn_x);
root.addEventListener(Event.ENTER_FRAME,rot_x);
 
but_left.addEventListener(MouseEvent.MOUSE_DOWN,turn_left);
but_right.addEventListener(MouseEvent.MOUSE_DOWN,turn_right);
root.addEventListener(MouseEvent.MOUSE_UP,stop_turn_y);
root.addEventListener(Event.ENTER_FRAME,rot_y);
 
but_in.addEventListener(MouseEvent.MOUSE_DOWN,zoom_in);
but_out.addEventListener(MouseEvent.MOUSE_DOWN,zoom_out);
root.addEventListener(MouseEvent.MOUSE_UP,stop_zoom);
root.addEventListener(Event.ENTER_FRAME,zoom1);
 
var x_rot:int=0;
var y_rot:int=0;
var zooming:int=0;
 
function zoom1(e:Event):void
{ if((cam.zoom<=3)&&(zooming<0))
	trace("Нельзя уменьшать!!!");
	else
	if((cam.zoom>=10)&&(zooming>0))
	trace("Нельзя увеличивать!!!");
	else
	cam.zoom+=zooming;
}
 
function zoom_in(e:MouseEvent):void
{
	zooming=1;
}
 
function zoom_out(e:MouseEvent):void
{
	zooming=-1;
}
 
function stop_zoom(e:MouseEvent):void
{
	zooming=0;
}
 
 
function rot_x(e:Event):void
{
	rotx(x_rot);
}
 
function turn_up(e:MouseEvent):void
{
	x_rot=3;
}
 
function turn_down(e:MouseEvent):void
{
	x_rot=-3;
}
 
function stop_turn_x(e:MouseEvent):void
{
	x_rot=0;
}
 
function rot_y(e:Event):void
{
	roty(y_rot);
}
 
function turn_left(e:MouseEvent):void
{
	y_rot=-3;
}
 
function turn_right(e:MouseEvent):void
{
	y_rot=3;
}
 
function stop_turn_y(e:MouseEvent):void
{
	y_rot=0;
}
root.addEventListener(Event.ENTER_FRAME,fresh);
 
function fresh(e:Event):void
{
	view.render();
}
 
 
 
function turn_to(e:Event)
{	
	if(bit_rot==1)
	{
	if(cam.rotationX>r_x)
	{
		rotx(-1);
	}
	if(cam.rotationX<r_x)
	{
		rotx(1);
	}
	if(cam.rotationY>r_y)
	{
		roty(-1);
	}
	if(cam.rotationY<r_y)
	{
		roty(1);
	}
 
 
	}
	if((Math.abs(r_x-cam.rotationX)<0)&&(Math.abs(r_y-cam.rotationY))<0) 
	{
 
		bit_rot=0;
		r_y=0;
		r_x=0;
 
	}
}

Старый 05.10.2011, 03:07
knaka вне форума Посмотреть профиль Отправить личное сообщение для knaka Найти все сообщения от knaka
  № 2  
Ответить с цитированием
knaka

Регистрация: Apr 2008
Сообщений: 29
у меня есть аналогичная проблема, на сцене приметивы (текстурированые кубы) с анимацией вращения по роловеру. также при анимации некоторые полигоны екоторых кубов могут пропасть. как правило пропадают полигоны кубов которые находятся рядом друг с другом. мне помогает от этог избавится увеличение сегментов у кубов. но тогда сильно падает производительность, а если кубов добавить 30-40 штук то анимация начинает подормаживать. заметил что все матонвится намного лучше если убрать свет или Phong материалы. Но тогда выглядеть все начинает намного печальнее - не подскажите как можно оптимизировать сцену? есть ли какойто секрет как добится максимальной производительности со светом и материалми?

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

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

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


 


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


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