papervision 3d library เมพๆ บน flash/flex

posted on 22 Sep 2009 09:21 by studiooo  in mahn

สวัสดีครับพี่น้อง

 ขณะนี้กำลังเรียน stat อยู่แล้วเกิดเบื่อโลกแตกขึ้นมาเลย มานั่งเขียน entry เล่นๆ

วันนี้ข้าพเจ้าจะขอนำเสนอพี่น้องทั้งหลายเรื่อง Papervision ครับ

สินค้าที่นำมาเสนอวันนี้เป็นของแรง ที่ความจริงมันก้อแรงมานานแล้วอ่ะนะ ถ้าครัยรู็จัก ก้อลองมาดูกันว่ามันทำหยังได้มั่ง

papervision เป็น library บน flash/flex/actionscript มีอายุมาหลายขวบปีแล้ว พอตัว สิ้งที่มันทำได้คือ ช่วยให้สามารถ เขียน object 3d บน actionscript ได้อย่างงดงาม

วันนี้จะนำเสนอ ตัวปัญญาอ่อนๆให้ดูสักตัว

อย่างแรกที่คนเขียนโปรแกรมในโลก 3d ก้อคือ viewport ครับ viewport คือ...เรียกว่า canvas ละกัน มันเป็น canvas ที่เอาไว้ render ตัว 3d ลงไปนั่นเอง

ทีนี้ ใน papervision ก้อมี สิ่งนี้เช่นกัน

วิธีการใช้ library นั้นง่ายด๊ายๆ

อย่างแรกเราสร้าง Class extends BasicView ขึ้นมาก่อน อันนี้จะเป็นเหมือน กับ stage ของเราใน flash นะครับ

แต่ว่า stage ที่สามารถยัดของ 3 มิติทั้งหลายแหล่ลงไปได้อ่ะ

พอสร้าง basicview object เสร็จเราก้อ สามารถ เอา ไอ้นี่ไปยัดใน mxml / main class ของ action script / ของ flash ยังไงก้อได้อ่ะ 

มาดู BasicView ก่อนนิดเนิง ตัว BasicView นี้จะมี ตัวแปร ที่สำคัญ อยู่สองสามตัว

 1. camera - กล้อง...แหม่ ตรงตัวไปมั้ย แต่มันเป็นแค่นั้นจริงๆครับ โดยปกติแล้วกล้อง คือ object ที่แทนตัว เราอยุ๋ใน 3d space, มันมีความสามารถ ในการ ตั้งค่าว่าจะไปมองที่แห่งหนใด บน space นั้นๆ (ฟังก์ชั่น camera.lookAt(object_to_look_at)) 

 2. scene - ฉาก .. แหม่ ตรงตัวอีกอ่ะแหละ scene ก้อคือ ฉากเลยครับๆ ฉากๆๆๆ คือ อยากมีอะไรก้อใส่ๆ เข้าไป เพราะฉะนั้นเวลาอยากให้มี object อะไรใน ฉาก เราก้อ call scene.addChild(new Cone()); อะไรอย่างงี้ มันก้อจะเอา cone ไปยัดให้ใน ฉาก ง่าย! แหล่ม! แจ่มสุด!!

 3. viewport - อันนี้ เหมือน เลนส์ในตา เรานะครับ เราสามารถ apply filter ใส่ตาเราได้ (ใส่แว่น) อะไรอย่างงั้น นอกจากนั้น viewport เป็นส่วนที่กำหนดขนาด ของ viewing space ของเราด้วย 

ลองมาดู code ง่ายๆ ไม่ปวดไต ปวดตับกันหน่อย

 อันนี้เขียน view ให้มัน มี พื้นระนาบ อ่ะ 

ขโมยมาจาก

http://tutorials.osbo.com/papervision3d/basicview/ (คิเกียจเขียนเอง .. จะอัพบล๊อกยังจะคิเกียจอีก ฮ่าๆๆ) 

package

{

  import flash.events.Event;

  import org.papervision3d.events.InteractiveScene3DEvent;
  import org.papervision3d.materials.ColorMaterial;
  import org.papervision3d.objects.primitives.Plane;
  import org.papervision3d.view.BasicView;

  public class Papervision3DBasicViewExtension extends BasicView
  {
    private var material :ColorMaterial;
    private var object   :Plane;

    public function Papervision3DBasicViewExtension()
    {
      super(640, 480, true, true, "Target");

      material             = new ColorMaterial(0x000000);
      material.doubleSided = true;
      material.interactive = true;

      object = new Plane(material);
      scene.addChild(object);

      object.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver);
      object.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut);
      object.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleObjectPress);

      startRendering();
      //or
      //addEventListener(Event.ENTER_FRAME, handleEnterFrame);
    }

    override protected function onRenderTick(e:Event=null):void
    //or
    //private function handleEnterFrame(e:Event):void
    {
      object.yaw(1);

      super.onRenderTick(e);
      //or
      //singleRender();
      //or
      //renderer.renderScene(scene, camera, viewport);
    }

    private function handleObjectOver(e:InteractiveScene3DEvent):void
    {
      viewport.containerSprite.buttonMode = true;
    }

    private function handleObjectOut(e:InteractiveScene3DEvent):void
    {
      viewport.containerSprite.buttonMode = false;
    }

    private function handleObjectPress(e:InteractiveScene3DEvent):void
    {
      material.fillColor = Math.random() * 0xFFFFFF;
    }
  }
}

 พอจบ BasicView แล้ว เราก้อจะเอา class ไปยัด ตรงไหนก้อด่ะ ตามสบาย

 

โจบบ! 

ทีนี้ อันที่เพิ่งจบไป เป็นโลกของมนุดเดินดินเค้าเขียนกัน

 อยากดูของที่ พวกเทพเค้าเขียนกันมั้ย..

 http://www.smashingmagazine.com/2009/08/10/discovering-papervision3d-best-design-practices-and-tutorials/ 

 http://www.adobe.com/jp/events/cs3_web_edition_tour/page6.html 

(ชาบูๆ พวกเมิงเป็นคนป่ะเนี้ยยยย)

เรื่องมีอยู่ว่า... เมื่อวันก่อน กระผมรู้สึกนอยๆ เลยตั้งชื่อ เอมแบบว่าเข้าใจคนเดียว คนอื่นอย่าแจม

ปรากฏว่า เสือกมีคนเข้าใจจจ

โลกส่วนตัวถูกทำลายลงไปในพริบตา

แต่เป็นคนต้องหัดมองโลกในแงดี หรือมุมต่าง.. พลิกวิกิดให้เป็นโอกาก

เราจำเลือกให้มันเป็นเกมที่เอาไว้ประชันเขากับเพื่อนๆกัน

สิ่งที่กระผมได้ทำลงไปก้อคือว่า

1. เลือกคำที่ต้องการอยากให้คนอื่นมาแปล.. เช่น Mammoth went to siam by BTS

2. ตัดสระทิ้ง ... Mmmth wnt t sm by BTS

3. ตัดช่องว่างทิ้ง ... Mmmthwnttsmbybts

4. copy & paste ไปแปะบนชื่อ เอม แล้วต่อท้ายด้วย <<< "แน่จริงเมิงแปล"

 เอาไปเล่นดูนะครับ ฟังดูงี่เง่าปัญญาอ่อน แต่ก้อสนุกเหลือเชื่อ!!

 

เพิ่มสาระเข้าไปหน่อย สำหรับพวกที่คิเกียจ ตัดสระเอง หรือตัดช่องว่างเอง เรามีบริการเสริมครับ++

เป็น code C++:

const tstirng & removevowelandspace(const tstring & args)
{
// process words
int i = 0;
int _widx = 0;
TCHAR * _word = new TCHAR[args.size()];
for (i = 0; i < args.size();i++)
{
TCHAR _t = args.c_str()[i];
if (_t != 'a' && _t != 'e' && _t != 'i' && _t!='o' && _t!='u'
&& _t != 'A' && _t != 'E' && _t != 'I' && _t!='O' && _t!='U'
&& _t != ' ') {
_word[_widx++] = _t;
}
}
_word[_widx] = NULL; // terminate it
return new tstring(_word).c_str();

}

นำไปดัดแปลงใช้ให้สาแก่ใจเลยครับ

 

ขอทุกท่านจงพบแต่ความสุขความเจริญ

สวัสดี 

Can a cockroach survive a nuclear blast?



นี่ เป็นบทความล่าสุดที่กระผมอ่านจาก blog ของ howstuffworks ครับ น่าสนใจเป็นอย่างมาก(สำหรับไอ ตัวกระผมเอง) ดังนั้นก่อนที่จะเข้าไปถึงตัวบทความที่ว่านี้ กระผมขอเริ่มด้วย

"ทำไมไอตัวกระผมจึงสนใจกระจั๊วละ(วะ)ครับ?"

แน่ กว่าแช่แป้ง กระผมมั่นใจว่าพวกคุณ (เกือบ) ทุกท่านคงจะเคยประสบพบเจอเหตุการณ์ที่ทำให้คุณอุทาน ในใจหรือนอกใจออกมาว่า

ประโยคบังคับ - "เชรกเก้ววว"

ประโยคเพิ่มเติม (มีหรือไม่มีก้ได้) - "ทำไมมัน/แม่ง | อึด/น่าเกลียด/หยะแหยง/น่ารัก/น่ากอด/เก่ง etcetera | อย่างนี้วะ"

เลือกต่อประโยคกันตามอัธยาศัยครับ ส่วนตัวกระผมเองเหตุการณ์ที่มี น้องจั๊วเป็นตัวเอก ที่ทำให้กระผมอุทานออกมาว่า "เชรกเก้ววว ทำไม แม่งอึดอย่างนี้วะ" เป็นดังต่อไปนี้ครับ

เรื่องนี้เกิดขึ้นในราวๆ ปี พ.ศ. 2538 เมื่อ กระผมมีอายุได้ราวๆ 10 ขวบปี นะครับ ขณะนั้นครอบครัวกระผมนั้นพักอาศัยอยู่กับอาม่า ที่แถวๆ บางแค (ไม่ใช่บ้านพักคนชรานะ ><" ) ทำอาชีพค้าขายเป็ดพะโล้ แน่นอนว่ามีเห็ดสด เอ้ย เป็ดสดเก็บอยู่ เ็ต็มบ้าน ไหนจะเครื่องตุ๋นพะโล้ ไหนจะเป็ดและชิ้นส่วนที่ไม่ได้ใช้ของตัวเป็ด แน่นอนว่าสิ่งเหล่านี้ทำให้ บ้านของอาม่าเป็นสวรรค์ของเหล่ากระจั๊วไรเดอร์ดีๆ นี่เอง ไม่ใช่ว่าเราทำความสะอาดไม่ดีนะครับ เพียงแต่ ว่ามันมีตัวเหนี่ยวนำกระจั๊วที่ดีมากมาสุมกองกันในบ้าน

ส่วนตัวกระผมเองไม่ได้เกลียดกลัวกระ จั๊วอะไรมากมาย จับได้ แต่หยะแหยงนิดหน่อย ถ้าไม่จำเป็นจิงๆ จะไม่ยุ่งด้วย ฮ่าๆ ตอนนั้นกระจั๊วในบ้าน เยอะมาก ยิ่งตอนกลางคืนพวกกระผมหลับนอน นี่แทบจะเหมือนเวลาเปิดห้างของพวกกระจั๊วเลย วิ่งวน บินกันขวักไขว่ ชอปปิ้ง หาของกินกันใหญ่ สบายใจกันไป อาจจะมีแวะคุยกัน นินทาพวกกระผมไปบ้าง ก้ได้ใครจะรู้ ปัดโธ่!!

และในวันนั้นเอง กระผมและอาม่ากำลังง่วนอยู่กับการทำความสะอาดเป็ด สดที่เพิ่งรับมาจากตลาด




ทันใด นั้น!! มีกระจั๊วเดินผ่านมาหนึ่งตัว และถูกอาม่าผมจับการเคลื่อนไหวของมันได้




ถายในหนึ่ง กระพริบตา อาม่าผมคว้ามันขึ้นมาอยู่ในมือเรียบร้อย




นำมืออีก ข้างนึงจับหัว อีกข้างยึดลำตัวไว้แน่น




กระชากออกจากกันและโยนทิ้งอย่างไ่ม่ไยดี กระผมอุทานในใจ "เชรกเก้ววว!!"




มันไม่ ควรจะมีสิ่งมีชีวิตใดๆ ในโลกนี้ ที่สามารถเดินได้ขวักไขว่โดยปราศจากหัวของมัน แต่วันนั้นผมได้รู้ว่า ยก ไอจั๊วไว้ตัวนะ! ขณะที่หัวของมันแอ้งแม้งอยู่อีกที่ ตัวของมันยังเดินขวักไขว่ ขวักไขว่ และขวักไขว่




เปรี้ยงเข้าให้!! ขวางหูขวางตา อาม่าผมจัดการลงทัณฑ์มันแทนดวงจันทร์ ด้วยการกระตื้บตัวมันให้ด่าวดิ้น สูญสิ้นทั้งอาจม




กระผมได้แต่อุทานในใจว่า "เชรกเก้ววว!! ตัววรนุชอะไรแม่งอึดยังงี้ วะ"


วันนั้นทั้งวันผมได้แ่ต่เฝ้าถามตัวเองว่า ทำไมจั๊วมันอึดได้โลห์ขนาดนี้วะ จวบวันนั้นจนวันนี้ กระผมก็ยังทึ่งในความทนทานอึดถึกบึกบึนของกระจั๊วอยู่

จบความในใจ ฮ่าๆๆๆ มาต่อกันที่บทความจาก Howstuffworks นะ ครับ

++++++++++++++++++++++++++++++++++++++++++++++++++++

Can a cockroach survive a nuclear blast? again haha

กลับมาที่หัวเรื่องเดิม ฮ่าๆๆๆ

น้องจั๊วจะสามารถรอดชีวิตจากการถูกระเบิดปรมาณูหรือไม่ ?

แหม่ น่าสนใจจริงๆ ครับ ขนาดหัวหลุดออกไปแล้วยังร่าเริงได้ขนาดนั้น ก่อนอื่นเลยเราต้อง มาแยกโจทย์ของเราออกมาก่อน ถ้าน้องจั๊วของเราโดนระเบิดปรมาณูเข้าไปเต็มๆ แบบตกลงใส่หัว แน่นอน ไม่ต้องถามให้เมื่อยตุ้ม ตายแหน่ 1000% (ขนาดเหล็กยังกลายเป็นเถ้า ถ้าไม่ตายนี่.... ไม่รู้จะว่าไงนะครับ) อาจจะไม่ต้องขนาดตกใส่หัวเต็มใบก็ได้ครับ หากน้องจั๊วเราไปอยุ่ในบริเวณที่เค้าเรียกว่า Ground Zero หรือบริเวณที่อยุ่ในอาณาเขตของการระเบิดนั้น ก็คงไม่รอดครับ แน่นอนว่าเราก็ตายด้วย ฮ่าๆๆ

ถ้าอยู่นอกบริเวณนั้นละ? อืมม คำถามจะเปลี่ยนไปเล็กน้อยครับ เพราะตอนนี้ตัวปัญหาคือสารกัมมันตรังสี ที่กระจายออกมาจากตัวระเิบิดปรมาณูนั่นเอง สำหรับคำตอบในเรื่องนี้ เราไปติดตามคลิปด้านล่าง ครับ


แม่เจ้า!! น่าตกใจจริงๆ ครับ ผึ้งดอกไม้เป็นแมลงชนิดเดียวจากการทดลองที่สามารถมีชีวิตรอดจากการถูกสารกัมมันตรังสีในระดับ 100,000 RADs นั่นก็คือมันทนทานต่อกัมมันตรังสีมากกว่าน้องจั๊วของเราอีกแน่ะ!!


หมายเหตุ : 1 RADs คือปริมาณของกัมมันตรังสีที่สามารถทำให้มนุษย์เราเสียชีวิตได้

ดังนั้นแล้ว หากวันใด สงครามนิวเครียร์เกิดปะทุขึ้นมาบนโลกเบี้ยวๆ ใบนี้ จริงๆ วันนั้นโลกเราคงเหลือแต่เผ่าพันธ์แมลงนี่แหละ ครับ ฮือออ

แป่ว เกือบลืมสรุปแน่ะครับ

คำถาม :
น้องจั๊วจะสามารถรอดชีวิตจากการถูกระเบิดปรมาณูหรือไม่ ?
คำตอบ : อืมม ได้ครับ ถ้าอยู่นอกระยะระเบิด และถูกกัมมันตรังสีไม่เกิน 10,000 RADs

สำหรับวันนี้คงต้องลากันแค่นี้ครับ

สวัสดีครับ :)

Dinosao

ขอขอบคุณ :

  • Howstuffworks.com สำหรับเรื่องราวที่น่าสนใจ
  • น้องจั๊วดารารับเชิญที่มาแสดงบทบาทการตายอย่างสมจริงจาก Evilkid.com
  • wikipedia สำหรับข้อมูลที่ช่วยไขข้อข้องใจของคำว่า Groundzero