[OpenGL] รับ Input จากเมาส์….

ก่อนอื่นขอขอบคุณมิตรรักแฟนบล็อกทุกท่าน ทั้งที่ Search เจอจาก Google หรือตามเว็บบอร์ดที่มีคนเอาลิงค์ไปแปะก็ตาม

ถึงแม้นาน ๆ จะอัพเกี่ยวกับ OpenGL ที แต่ก็มีคนตามมาอ่านเยอะแยะ ไม่แพ้เรื่อง MATLAB7 บน Windows 7

ช่วงนี้กำลังปั่นโปรเจคท์วิชา CG ว่าด้วยการทำเกม 3D ด้วย OpenGL

เลยไม่ค่อยมีเวลามาอัพบล็อก(ที่เป็นสาระ)เท่าไร

วันนี้ว่าง ๆ (หรอ…) เลยจะมาอัพบล็อกเกี่ยวกับ OpenGL ซะหน่อย

หลังจากอ่านมาหลายตอน (3 ตอนนี่นะ) ก็คิดว่าหลายคนน่าจะพอมีพื้นฐานกันบ้างแล้วนะครับ

วันนี้จะขอเพิ่มเติมจากโค้ดใน Entry ก่อน ๆ นิดหน่อยครับ

โดยใน main จะเพิ่มคำสั่งเหล่านี้เข้าไปก่อนคำสั่ง glutmainloop(); นะครับ

glutMouseFunc(processMouse);
glutMotionFunc(processMouseActiveMotion);
glutPassiveMotionFunc(processMousePassiveMotion);
glutEntryFunc(processMouseEntry);

อธิบายทีละคำสั่งนะครับ

glutMouseFunc ใช้รับคำสั่งเมื่อเมาส์มีการคลิ้ก

glutMotionFunc ใช้สำหรับตอนที่คลิ้กแล้วเคลื่อนไหวเมาส์ (Drag Mouse นั่นเอง)

glutPassiveMotionFunc ใช้สำหรับตอนที่ขยับเมาส์โดยไม่ได้กดปุ่มอะไร

และสุดท้าย glutEntryFunc ใช้เมื่อเลื่อนเมาส์เข้ามาในหน้าต่างโปรแกรมของเรา…

ตัวไปเป็นส่วนของ Function ที่จะเรียกใช้งาน

เริ่มที่ processmouse จะมีรูปแบบประมาณนี้ครับ

void processMouse(int button, int state, int x, int y)

โดยที่ button คือปุ่มที่ถูกกด state คือสถานะว่าถูกกด หรือ ถูกปล่อย x,y ตำแหน่งของcursorบนหน้าจอ

สำหรับการใช้งาน button ก็จะมีดังต่อไปนี้

  • GLUT_LEFT_BUTTON
  • GLUT_MIDDLE_BUTTON
  • GLUT_RIGHT_BUTTON
  • ต่อมาก็คือ state

  • GLUT_DOWN
  • GLUT_UP
  • อยากจะให้โปรแกรมเราทำอะไรเมื่อมีการคลิ้กขวาก็…

    if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
    {
    
    }

    ประมาณนี้ครับ

    ส่วน Function ที่เหลือ (ยกเว้น glutEntryFunc) จะมีแต่ค่า x,y เท่านั้น ตัวอย่าง…

    void processMouseActiveMotion(int x, int y)

    ส่วน glutEntryFunc จะเป็นแบบนี้ครับ

    void processMouseEntry(int state) {
    	if (state == GLUT_LEFT)
            {
            }
    	else
    }

    วันนี้พอแค่นี้ครับ…พรุ่งนี้มีควิซเรื่อง 2D&3D Viewing…ยังอ่านไม่จบ + ยังไม่รู้เรื่องเลย…

    Leave a Reply

    This site uses Akismet to reduce spam. Learn how your comment data is processed.