30 เมษายน 2553

Coordinate Transformation ใน OpenGL

Coordinate Transformation ใน OpenGL
ใน OpenGl มี Transformation 5 แบบคือ
Transformation
การใช้งาน
Viewing
ใช้เซ็ตตำแหน่งกล้องหรือตา
Modeling
ใช้กับตำแหน่งของวัตถุ
ModelView
อธิบายความสัมพันธ์ระหว่า View กับ Model
Projection
กำหนด Viewing Volume
Viewport
Scales ภาพบนก่อนฉายบนจอ

สามารถแสดงเป็นขั้นตอนดังนี้

Eye Coordinate คือ ไม่ใช่ Coordinateจริงๆ แต่เอาไว้อ้างอิงเพื่อสร้างภาพขึ้นมา โดยการเคลื่อนย้ายวัตถุแต่ละอย่างก็เช่นจะทำการหมุน ก็จะใช้ Eye Coordinate ตัวนี้แหละเป็นตัวอ้างอิง

ภาพการหมุน 45องศาโดยอ้างอิงจากeye coordinate

Viewing Transformation คือ Transformation แรกของ OpenGl ทำหน้าที่ย้ายจุดจาก Coordinate ที่ใช้อยู่ อ้างอิงกับแกนของ Eye Coordinate

Modeling Transformations ใช้สร้าง Model ทำการย่อขยาย เลื่อน หมุน

Projection Transformations ใช้สร้างภาพบนจอจาก Model หรือการแปลงจาก 3 มิติ ให้เหลือ 2 มิติ มีแบบ Orthographic และแบบ Perspective ซึ่งใน Thesis จะใช้แบบ Perspective เท่านั้น คือภาพจะใหญ่เมื่อใกล้ตา และจะเล็กเมื่ออยู่ไกลตา เราควบคุมเมตริซ์นี้โดยการกำหนด Viewing Volume

Viewport Transformations
ใช้ย่อขยายปรับ aspect ratio ของภาพ 2 มิติ ให้เหมาะสมกับขนาดของ Windows ที่แสดงผล จะmap ระหว่าง logical กับจอภาพที่เป็น Physical


เยี่ยมชมศูนย์ศึกษาการพัฒนาอ่าวคุ้งกระเบนอันเนื่องมาจากพระราชดำริจังหวัด จันทบุรี

เยี่ยมชมศูนย์ศึกษาการพัฒนาอ่าวคุ้งกระเบนอันเนื่องมาจากพระราชดำริจังหวัดจันทบุรี

ภาพอ่าวคุ้งกระเบนจาก google maps

สภาพชายหาดได้รับการอนุรักษ์ไว้อย่างดี สังเกตุได้จาก

ปูลมบริเวณชายหาดมีจำนวนมาก จับเล่นได้สบายๆ

เราได้เดินเที่ยวอควอเรี่ยม แม้จะไม่ใหญ่แต่ทางเจ้าหน้าที่บอกว่าพันธ์สัตว์น้ำที่จัดแสดงมีความหลากหลายมากกว่าที่บึงฉวากอีก

ปลาเยอะมากแต่ดันชอบหอยที่เกาะตู้ปลาอยู่

ปลากระเบนตัวนี้เป็นสีสันของงานเลยก็ว่าได้

การให้อาหารกระเบน ค่อนข้างยุ่งยากเพราะมันมีตาอยู่บ้านบน แต่ปลาอยู่ด้านล่าง เค้าเลยต้องเอามาป้อนให้ถึงที่อย่างนี้


หลังจากนั้นไปได้เที่ยวชมป่่าชายเลนต่อ เจ้าหน้าที่บอกว่าเมื่อก่อนเป็นป่าชายเลนเสื่อมโทรม ชาวบ้านเข้าตัดต้นไม้ไปเผาถ่าน
ป่าชายเลนที่เห็นเป็นป่าชายเลที่ปลูกเสริมขึ้นมาใหม่ทั้งหมด ซึ่งจะไม่มีการปลูกเพิ่มอีกแล้วเพราะเพียงพอแล้ว ถ้าหากปลูกเพิ่มจะเป็นการกีดขวางทางเดินของน้ำ จะมีก็แต่การปลูกเสริมเมื่อต้นเก่าตายไปเท่านั้น
ป่าชายเลนที่เห็นก็ดูสมบูรณ์มากมีลิงปีนต้นแสมด้วย

มีปูกล้ามดาบเดินตามพื้นด้วย
ดูรากต้นโกงกางให้เต็มตา
ปิดท้ายด้วยภาพสพานแขวน เป็นจุดที่ใครๆมาแล้วก็ต้องถ่ายรูปกลับไปทุกราย










29 เมษายน 2553

ลำดับการทำ Transformation ของ Vertex หรือจุด ที่เราสร้างขึ้นใน Op

ลำดับการทำ Transformation ของ Vertex หรือจุด ที่เราสร้างขึ้นใน OpenGL

ซึ่งในการ Set Matrix ในแต่ละขึ้นตอนมีคำสั่งที่เกี่ยวข้องดังนี้
glMatrixMode ใช้เปลี่ยนโหมดเมทริกซ์ทั้ง 4 Mode
glLoadIdentity หลังจากใช้ glMatrixMode สามารถรีเซ็ตค่าเมทริกซ์ให้เป็น Identity ซึ่งจะทำให้ไม่มีผลต่อ Vertex ในโหมดนั้นๆ

เมื่อใช้ 2 คำสั่งก่อนหน้าแล้ว เราสามารถกำหนดค่าในเมตริกซ์โดยใช้คำสั่ง
glLoadMatrix ใช้โหลดเมทริกซ์ที่เราคำนวณเองทั้งหมดลงไปได้เลย
glMultMatrix คูณเมตริซ์ที่ใช้อยู่กับเมตริกซ์ที่ให้ไป เหมาะกับการเอาไปใช้ในการแบ่งหลายๆ ขั้นตอน เช่นเอา Scale คูณ Rotate คูณ Translate ทำให้อ่านง่ายด้วย
 
นอกจากนี้ OpenGL ยังมีคำสั่งเฉพาะของแต่ละโหมด เพื่อปรับค่าเมตริกซ์ เพื่อให้เราไม่ต้องมาคิดคำนวณเอง

glViewport ปรับเมตริกซ์ในโหมด Viewport ปรับ aspect ratio เป็นส่วนใหญ่

glFrustum ปรับเมตริกซ์ในโหมด Perspective ใช้ปรับ Volumn การฉายภาพปรับแทนเลนส์ wide หรือ tele ได้

นอกจากนี้ยังใช้เมตริกซ์คล้าย stack เราสามารถ save Transformation Matrix ที่เราใช้งานอยู่ไว้ได้โดยการ Push เก็บไว้ใน Stack และ Pop Matrix ที่ไม่ใช้ออกไป
glPushMatrix ใช้ save ค่าเก็บไว้ใน matrix
glPopMatrix ใช้ ดึงค่า matrix ที่ save ไว้ก่อนหน้ากลับมาใช้



10 เมษายน 2553

แปลงไฟล์ Fasta ให้อยู่ในรูปแบบ Genbank

แปลงไฟล์ Fasta ให้อยู่ในรูปแบบ Genbank
เขียนโดยใช้ Python นะครับ

ก่อนจะนำไปรัน ให้แก้ตัวแปร 2 ตัวคือ
path คือ Directory ที่ไฟล์อยู่
filename คือ ชื่อไฟล์ ไม่ต้องใส่ .fa
path = "C:\Users\Naymin Suksen\Desktop\\"
filename = "chr15"
f = open(path + filename + ".fa", "r")
g = open(path + filename + ".txt", "w")
f.readline()
text = f.read(10)
count = 1
while text != "" :
    g.write(str(count))
    g.write('\t')
    for i in range(0,6):
        for i in range (0,10):
            text = f.read(1)
            while text == '\n':
                text = f.read(1)
            g.write(text)
        g.write(' ')
    g.write('\n')
    count += 60
    print "count: " + str(count)
f.close()
g.close()
print "Done!!!"