<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>JOMYUT.NET - C/C++/OpenGL</title>
    <link>http://diary.jomyut.net/</link>
    <description>Blog</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.3 - http://www.s9y.org/</generator>
    <pubDate>Wed, 08 Feb 2006 11:30:19 GMT</pubDate>

    <image>
        <url>http://diary.jomyut.net/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: JOMYUT.NET - C/C++/OpenGL - Blog</title>
        <link>http://diary.jomyut.net/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Vector ซ้อน Vector</title>
    <link>http://diary.jomyut.net/archives/515-Vector-Vector.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/515-Vector-Vector.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=515</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=515</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;&lt;b&gt;ปัญหา Vector ซ้อน Vector&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Wrong : vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt; variable; // มองเป็น operator &amp;gt;&amp;gt;&lt;/p&gt;&lt;p&gt;True: vector&amp;lt;vector&amp;lt;string&amp;gt; &amp;gt; variable; &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;ปัญหา Segmentation fault&lt;/b&gt;&lt;/p&gt;&lt;p&gt;: อาจจะเกิดจาก mysql ยังไม่ได้สั่ง connect แล้วสั่งเรียกใช้&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 08 Feb 2006 18:28:26 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/515-guid.html</guid>
    
</item>
<item>
    <title>Developing Linux Application on Windows</title>
    <link>http://diary.jomyut.net/archives/490-Developing-Linux-Application-on-Windows.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/490-Developing-Linux-Application-on-Windows.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=490</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=490</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;วันนี้นั่งหาโปรแกรมสำหรับเขียนโปรแกรม C++ สำหรับ Linux บน Windows สืบเนื่องจาก โปรแกรมเรา จะต้องทำการติดต่อกับ Shell เป็นหลัก และเราหา IDE ที่ Compile โดยใช้ Header File ของ Linux ไม่ได้ ตอนหลังเจอโปรแกรมชื่อ Magic C++ เป็น Shareware ลักษณะของโปรแกรมเป็นการ Remote เข้าไปทำงานบน Server เวลา Compile ก็จะ Compile บน Server ทำให้ได้ผลเหมือนจริง &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;ข้อดี&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ไม่ต้องนั่ง Upload ไฟล์ที่แก้ไข ใช้งานได้เหมือน Dreamweaver&lt;/li&gt;&lt;li&gt;สามารถ Compile ได้ทันที ซึ่งโปรแกรมจะทำการ Upload และ compile บน Server ให้&lt;/li&gt;&lt;li&gt;สร้าง Makefile ให้อัตโนมัติ&lt;/li&gt;&lt;li&gt;Highlight เหมือน IDE ตัวอื่นๆ&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;ข้อด้อย&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ต้องใช้ FTP Service ถ้าพัฒนาโปรแกรมสำหรับ root จะมีความเสี่ยง เพราะต้องใส่ ftp account เป็น root&lt;/li&gt;&lt;li&gt;ช้ามาก ทุกขั้นตอนโปรแกรมทำการติดต่อกับ Server ตลอด เวลา Compile ต้องรอการติดต่อผ่าน FTP , Shell ซึ่งช้ามากๆ&lt;/li&gt;&lt;/ul&gt;สุดท้ายแล้ว มี IDE ก็ยังดีกว่าไม่มี ตัวนี้ ทำให้เราสามารถพัฒนาโปรแกรม Linux บน Windows ได้ปกติ.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 06 Jan 2006 21:15:45 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/490-guid.html</guid>
    
</item>
<item>
    <title>C++: ปัญหา File Stream</title>
    <link>http://diary.jomyut.net/archives/466-C++-File-Stream.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/466-C++-File-Stream.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=466</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=466</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;การเขียนไฟล์ ต้องระวังเป็นอย่างยิ่ง หากข้อมูลที่จะเอามาเขียนเป็น Binary File การเปิดไฟล์ จะต้องเปิดแบบ Binary ด้วย โดยใช้ ios::binary ไม่เช่นนั้นแล้วจะเกิดปัญหา เพราะถ้ามันมองเป็น text file มันจะมี byte ปรุงแต่งเพิ่มขึ้นมา คือหน้าตาเนื้อหากรณีเป็น text file หน้าตาจะเหมือนกันเลย แต่มี byte เพิ่มขึ้นมา&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ไอ้นี่ทำให้เราต้องนั่งแก้ bug อยู่ 3 ชั่วโมง ในการเขียนโปรแกรมดึงไฟล์จาก ftp server (เขียน ftp client) เพราะเราเปิดไฟล์เป็นแบบ textfile.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;วิธีการเขียน:&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ofstream myfile;&lt;br /&gt;
  myfile.open(local.c_str(),ios::binary | ios::out);&lt;/p&gt;&lt;p&gt;myfile &amp;lt;&amp;lt; string;&lt;/p&gt;&lt;p&gt;myfile.close();&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;Related Site:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;สอนเรื่อง File Stream : &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.cplusplus.com/doc/tutorial/files.html&#039;);&quot;  href=&quot;http://www.cplusplus.com/doc/tutorial/files.html&quot;&gt;Cplusplus.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 12 Dec 2005 03:48:43 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/466-guid.html</guid>
    
</item>
<item>
    <title>C++: cin function with getline</title>
    <link>http://diary.jomyut.net/archives/465-C++-cin-function-with-getline.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/465-C++-cin-function-with-getline.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=465</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=465</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;วิธีการเขียนโปรแกรมให้ Recv ข้อมูลมาเป็น Stream ทีละบรรทัด. ปกติถ้าใช้ std::cin &amp;gt;&amp;gt; [string var] เราเจอปัญหาคือ ไม่รู้ว่ามันตัดคำอย่างไร มันตัดที่ช่องว่างและขึ้นบรรทัดใหม่ เลยไม่แน่ใจว่า สรุปแล้วมันตัดคำตรงไหนบ้าง ไปเจอกระทู้ที่ใช้ในการแก้ไขปัญหานี้พอดี ทำอย่างนี้&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;br /&gt;
std::string text;&lt;/font&gt;&lt;br /&gt;std::cout &amp;lt;&amp;lt; &amp;quot;Please enter a word.\n&amp;quot;;&lt;br /&gt;&lt;font color=&quot;#ff0000&quot;&gt;std::getline(&lt;font color=&quot;#cc3300&quot;&gt;&lt;b&gt;std::cin&lt;/b&gt;&lt;/font&gt;, &lt;font color=&quot;#0033ff&quot;&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;);&lt;/font&gt;&lt;br /&gt;std::cout &amp;lt;&amp;lt; text &amp;lt;&amp;lt; &#039;\n&#039;;&lt;br /&gt;&lt;br /&gt;
return 0;&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Source: &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.codecomments.com/archive272-2004-7-245870.html&#039;);&quot;  href=&quot;http://www.codecomments.com/archive272-2004-7-245870.html&quot;&gt;Code Comment&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 11 Dec 2005 17:52:41 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/465-guid.html</guid>
    
</item>
<item>
    <title>C++ Bug ของ Class</title>
    <link>http://diary.jomyut.net/archives/464-C++-Bug-Class.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/464-C++-Bug-Class.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=464</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=464</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;วันนี้เขียนโปรแกรม OX ส่งการบ้านวิชา Artificial Intelligence เจอปัญหาเกี่ยวกับ Class มากมาย สาเหตุหลักคือ เราเอาไปปนกับ Java นั่นเอง. ประเด็นสำคัญสำหรับวันนี้คือ เวลาเราจะใช้งาน Object ที่จะต้องส่งค่าเข้า หรือ Return ค่ากลับมา หรือนำเอา Object หนึ่งไปใช้ในอีก Object หนึ่ง ต้องประกาศ Type เป้น &amp;lt;class&amp;gt;* เนื่องด้วย มันจะได้รับส่งเป็นค่า Reference ของ object ตัวนั้นๆ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ที่เจอปัญหามาก็คือ ค่าผิด หรือเป็น null pointer บ่อยครั้ง สาเหตุใหญ่ก็เกิดจาก เราประกาศ type เป็น &amp;lt;class&amp;gt; ไปเลย เวลา return ค่ากลับ มันคงไม่รู้ว่าจะ copy ไปใส่อีกตัวอย่างไร แล้วก็อย่าลืมพวกตัวเลข ธรรมดาด้วย int , byte , char ก็ดี ถ้ามีการสร้างภายใน function แล้ว ส่งเข้าไปให้ object ทำการเก็บนั้น ก็ต้องสร้างตัวแปรเป็นแบบ reference เหมือนกัน พวกนี้เจอปัญหาเหมือนกันคือ จริงๆมันคือ local variable พอจบ function มันก็จะถูกทำลายทิ้ง ถ้าเอา local variable ไปเก็บดื้อๆใน class มันก็จะเน่าไปด้วย ต้อง new dynamic variable ขึ้นมา แล้วก็ค่อยส่งเป็น reference pointer ไปเก็บไว้ใน class&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ปัญหาอื่นๆก็มีเรื่องของ การ initial ตัวแปรใน class เราไม่สามารถ initial ทันทีทันใด นอก procedure แต่ใน class ได้เหมือน java เราต้องเอาไป initial ใน function ลูกเดียวนะ.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 10 Dec 2005 23:38:01 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/464-guid.html</guid>
    
</item>
<item>
    <title>Cpp: File Stream</title>
    <link>http://diary.jomyut.net/archives/435-Cpp-File-Stream.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/435-Cpp-File-Stream.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=435</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=435</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;เว็บที่น่าให้ความรู้เรื่อง File Stream&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.cplusplus.com/doc/tutorial/files.html&#039;);&quot;  href=&quot;http://www.cplusplus.com/doc/tutorial/files.html&quot;&gt;http://www.cplusplus.com/doc/tutorial/files.html&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;สำหรับจัดการกับ File ทั้ง in,out ลง string data type. บางแห่งมันจัดการลงแต่ char เอาไปจัดการต่อยากพิกล(หรือเปล่า). ลองดูที่นี่ เวิร์คดี&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;&lt;p /&gt; 
    </content:encoded>

    <pubDate>Mon, 21 Nov 2005 02:08:23 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/435-guid.html</guid>
    
</item>
<item>
    <title>SignCode.exe - Digital Certificate</title>
    <link>http://diary.jomyut.net/archives/424-SignCode.exe-Digital-Certificate.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/424-SignCode.exe-Digital-Certificate.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=424</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=424</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;ที่นี้ บางโปรแกรมที่มีการส่งผ่านอินเตอร์เน็ต ผู้พัฒนาโปรแรกม จะมีการลงลายเซ็นต์ในไฟล์โปรแกรมด้วย เช่น พวก ActiveX Control ที่มันชอบโผล่มาให้เรา Install โปรแกรมใน Internet Explorer มันมีวิธีการ Sign Digital Signature ลงโปรแกรมอยู่นะ โดยการเรียกโปรแกรมใน %systemdrive% / %msdev% / SDK / Bin / SignCode.exe จะปรากฏ Wizard ขึ้นมา&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;เราก็เพียงเลือกโปรแกรมที่เราจะลง Digital Signature ของเรา แล้วก็เลือกไฟล์ Certificate ของเราเพื่อลงนาม เท่านี้ Signature ของเรา จะถูกนำไปรวมกับโปรแกรมเรียบร้อย โดยดูได้จาก Click ขวาที่ ไฟล์โปรแกรม เลือก Properties จะมีแถบ Digital Signature โผล่ขึ้นมาอีก 1 แถบ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;จริงๆเรื่องของการใช้ Digital Signature มันขึ้นกับเวลาด้วย เพราะว่า การเราจะ Sign เอกสารได้ Certificate ของเราจะต้องมีอายุในช่วงระยะเวลาดังกล่าว ทีนี้ ถ้าเกิดเราไม่มีตัวการันตี เราต้องการจะใช้ Certificate นั้นๆ ก็เปลี่ยนเวลาของเครื่องตัวเองแล้วก็ Sign ถูกมะ มันก็เลยมี Time Server ขึ้นมาเป็นสากล เพื่อ Stamp เวลาที่ถูกต้องลงมา เพื่อยืนยันว่าเรา Sign ในเวลาดังกล่าวจริง ไม่ได้โมเม&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;สามารถเข้าไปใช้ Time Stamp Server ได้ฟรี ที่ http://time.certum.pl/ เสียดาย ถ้าเมื่อก่อนมันขอ Sign Code Certificate ได้ฟรีด้วย ตอนนี้มันเสียตังค์แล้ว T.T เศร้าใจ.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 14 Nov 2005 02:00:03 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/424-guid.html</guid>
    
</item>
<item>
    <title>เขียน Windows Properties ของโปรแกรมที่เขียนขึ้น</title>
    <link>http://diary.jomyut.net/archives/423-Windows-Properties.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/423-Windows-Properties.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=423</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=423</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;นั่งหาวิธีการเขียนรายละเอียดลงใน Properties ของไฟล์โปรแกรมที่เราเขียนขึ้นอยู่นาน ตอนแรกคิดว่าจะต้องใช้ Assembly เขียนแทรกลงไปใน C++ เพราะไม่รู้ว่าจะต้องกรอกอะไรที่ไหน มันไม่เหมือนใน VB ที่มันมีที่ให้กรอก เวลาจะ Search หา API ที่จะเอาไว้กรอก ก็หายากเหลือเกิน หาไม่ได้ ทั้ง MSDN และก็จาก Google ไม่เจอเลยแม้แต่น้อย&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ตอนหลังเลยมาลองนั่งมั่วดูเอง ปรากฏได้แล้วแฮะ ไม่ยากเลย วิธีการคือ Click ขวาที่ Folder resource file ใน IDE เลือก Add Resource... จะโผล่หน้าต่างให้เลือกขึ้นมา เลือก Version และก็ New ไป หลังจากนั้นก็กรอกรายละเอียดของโปรแกรมเราลงไป กรอกเสร็จ Click ขวาที่ ไฟล์ .rc ที่มันสร้างขึ้นมาใหม่นี้ แล้วก็เลือก Compile แล้วก็ Build Solution คราวนี้ก็จะได้ไฟล์ .exe ที่มีรายละเอียดของโปรแกรมอยู่ในแถบ Windows Properties แล้วหละ&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 14 Nov 2005 01:55:34 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/423-guid.html</guid>
    
</item>
<item>
    <title>Caution C++ with OOP</title>
    <link>http://diary.jomyut.net/archives/178-Caution-C++-with-OOP.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/178-Caution-C++-with-OOP.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=178</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=178</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    ช่วงนี้กำลังลองเล่น C++ กับ OOP อยู่หละ&lt;br /&gt;
&lt;strong&gt;ข้อผิดพลาด&lt;/strong&gt;&lt;br /&gt;
1. เมื่อประกาศ Class ใน Header file แล้ว ภายหลังจากจบ Class ห้ามลืม ; เช่น class A { } ;&lt;br /&gt;
2. Inherite มาจาก class แม่ class Child:&lt;ins&gt; public &lt;/ins&gt;MotherClass {} ; เวลา Inherite มา Class ลูกจะเข้าถึงได้แต่ Public ไม่สามารถเข้าถึงตัวแปร Private ได้&lt;br /&gt;
3. ใน C++ จะไม่มี Dynamic Binding คือถ้าอย่างเราเรียกเขียน Method ใน Class แม่ เพื่อเรียก gl(); ใน Class ลูก โดยที่ class แม่เอง ก็มี gl(); ด้วย ใน C++ การเรียก method gl() ใน class แม่ มันจะทำการเรียก gl() ใน class แม่ [ แม้ว่า Object จะเป็น Class ลูกก็ตาม ] โดยหากต้องการทำ Dynamic Binding จะต้องใส่คำสงวน virtual ไว้หน้า gl(); ใน class แม่ (Header file) จึงจะทำงานแบบ dynamic binding&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;
&lt;strong&gt;ตัวอย่าง Header File แบบทั่วไป&lt;/strong&gt;&lt;br /&gt;
class mother { &lt;br /&gt;
     gl();&lt;br /&gt;
     run(); // สมุติว่า run() จะเรียกใช้ gl();&lt;br /&gt;
};&lt;br /&gt;
class child: public mother{&lt;br /&gt;
     gl();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;โปรแกรม&lt;/strong&gt;&lt;br /&gt;
void main(void){&lt;br /&gt;
     child a;&lt;br /&gt;
     a.run(); // จากคุณสมบัติสืบทอด&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
ตัวอย่างข้างบนนี้ ไม่มีคุณสมบัติ Dynamic Binding ใน C++ คือ เมื่อสั่ง a.run(); จะเรียก run ใน class mother ซึ่งจะเรียก gl(); ใน class แม่ด้วย แม้ว่า class ลูกจะ overide มันไปแล้วก็ตาม&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;
&lt;strong&gt;ตัวอย่าง Header File แบบ Dynamic Binding&lt;/strong&gt;&lt;br /&gt;
class mother { &lt;br /&gt;
     &lt;strong&gt;virtual&lt;/strong&gt; gl();&lt;br /&gt;
     run(); // สมุติว่า run() จะเรียกใช้ gl();&lt;br /&gt;
};&lt;br /&gt;
class child: public mother{&lt;br /&gt;
     gl();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;โปรแกรม&lt;/strong&gt;&lt;br /&gt;
void main(void){&lt;br /&gt;
     child a;&lt;br /&gt;
     a.run(); // จากคุณสมบัติสืบทอด&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
โปรแกรมข้างบน เมื่อสั่ง a.run(); จะเรียก run(); ใน class mother แต่พอเรียก gl(); มันจะมาใช้ class child gl(); เพราะ overide ไว้เรียบร้อยแล้ว.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Source : &lt;/strong&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.horstmann.com/ccj2/ccjapp3.html&#039;);&quot;  href=&quot;http://www.horstmann.com/ccj2/ccjapp3.html&quot;&gt;การย้ายจากการเขียน Java มาเป็น C++&lt;/a&gt; 
    </content:encoded>

    <pubDate>Tue, 04 Jan 2005 19:35:37 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/178-guid.html</guid>
    
</item>
<item>
    <title>OpenGL กับ Texture Mapping</title>
    <link>http://diary.jomyut.net/archives/174-OpenGL-Texture-Mapping.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/174-OpenGL-Texture-Mapping.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=174</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=174</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    วันนี้ลองใช้ Texture Mapping กับวัตถุที่สร้างขึ้นจาก GLUT มา ผลปรากฏว่า glutSolidCube ไม่สามารถทำ Texture Mapping ได้. ไม่แน่ใจว่าเพราะอะไรเหมือนกัน ในขณะที่ วัตถุมาตรฐาน กาน้ำ สามารถทำ Texture Mapping ได้อย่างไม่มีปัญหา.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;ปัญหาที่พบใน Visual C++ 6.0&lt;/strong&gt; คือเรื่องของ Link ไม่ผ่าน แต่ Compile ผ่าน ผลปรากฏว่าเป็นเพราะเรา #include ชื่อไฟล์ ตัวเล็กตัวใหญ่ไม่เหมือนกัน คือใน MS. Visual C++ 6.0 จะต้อง Include ตามที่เห็นในแถบไฟล์ด้านซ้ายเท่านั้น [ เพราะบางทีพอ import file เข้ามาแล้ว มันตัวเล็กตัวใหญ่ไม่เหมือนกันอะ ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Texture Mapping Link ที่เกี่ยวข้อง :&lt;/strong&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/nehe.gamedev.net/data/lessons/lesson.asp?lesson=06&#039;);&quot;  href=&quot;http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06&quot;&gt;Nehe&lt;/a&gt; - เป็น Windows Base ไม่ใช่ Console App. เขียน Function เรียกจาก BMP เอง&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.ultimategameprogramming.com/Tutorial.php?category=OpenGL&amp;amp;amp;page=2&#039;);&quot;  href=&quot;http://www.ultimategameprogramming.com/Tutorial.php?category=OpenGL&amp;amp;page=2&quot;&gt;Ultimate Game Programming&lt;/a&gt; 2D Texture Mapping เขาสร้าง Class ไว้ Support เกี่ยวกับการ Texture โดยเฉพาะ สามารถเอาไปใช้ต่อได้เลย&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.ultimategameprogramming.com/Tutorial.php?category=OpenGL&amp;amp;amp;page=4&#039;);&quot;  href=&quot;http://www.ultimategameprogramming.com/Tutorial.php?category=OpenGL&amp;amp;page=4&quot;&gt;Ultimate Game Progamming2&lt;/a&gt; 3D Texture Mapping แต่เป็นคนละ Class กับ 2D นะ ไม่แน่ใจอันไหนก่อนหลัง 
    </content:encoded>

    <pubDate>Thu, 30 Dec 2004 19:29:42 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/174-guid.html</guid>
    
</item>
<item>
    <title>OpenGL ตอน Transformation</title>
    <link>http://diary.jomyut.net/archives/96-OpenGL-Transformation.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/96-OpenGL-Transformation.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=96</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=96</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    เมื่อวานนี้ ผมนั่งลองทำ OpenGL โดยการใช้ Function ของ OpenGL ในการ Transform วัตถุ เช่น การใช้ Translate , Rotate คือ &lt;code&gt;glRotate*(); glScale*(); glTranslate*();&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
ซึ่งวิธีการก็คือเราจะ&lt;strong&gt;ต้องเข้า MatrixMode แบบ ModelView &lt;/strong&gt;ก่อน เพราะว่าปกติเวลาเราวาดรูปเนี๊ย เราจะอยู่ Mode ของ PROJECTIONVIEW เสร็จแล้วเราจะต้อง Load Matrix มูลฐานเสียก่อน ก็คือว่า Graphic เนี๊ย มันจะมี Matrix โดยเฉพาะสำหรับการคูณกัน เช่น Matrix ของ Scale คูณกับจุด จุดนั้นๆมันก็จะ Scale เป็นระยะที่กำหนดใน Matrix.&lt;br /&gt;
&lt;!--more--&gt;&lt;br /&gt;
เอาหละ เริ่มต้น กำหนดเป็น ModelView เสร็จแล้ว เราใช้ Function LoadIdentity() ในการสร้าง Matrix มูลฐานขึ้นมา( Metrix ที่เป็น 1 แนวเฉียง) จากนั้น ก็นำ Matrix มูลฐานนี้ไปกระทำการใดๆ เช่นการ Scale , Rotate หรือ Translate&lt;br /&gt;
&lt;br /&gt;
เช่น (*** หมายเหตุ อธิบาย Concept โปรแกรมข้างล่างไม่ได้ทดสอบและ Test)&lt;br /&gt;
&lt;blockquote&gt;1: LoadIdentity();&lt;br /&gt;
2: glScalef(2.0,1.0,1.0); // จำไม่ได้ว่าอันไหน X,Y,Z&lt;br /&gt;
3: glBegin(GL_POINTS);&lt;br /&gt;
4: --- glVertex2i(100,100);&lt;br /&gt;
5: glEnd();&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
พอบรรทัดที่ 2 เราจะได้ Matrix ที่มีการ Scale  ขนาด 2 เท่าในแกนใดใด ที่กำหนด. พอมาบรรทัดที่ 4 เรา Plot จุด มันก็จะเอาค่า Matrix ที่ได้ในบรรทัดที่ 2 มาคูณในบรรทัดที่ 4 แล้วทำการ Scale โดยอัตโนมัติ.&lt;br /&gt;
&lt;br /&gt;
ทีนี้มาดู Case โง่ๆของเราบ้าง ^^; ตัวอย่างข้างล่างนี้ เป็นตัวอย่างการ Rotate จุดใหม่ ซึ่งเวลาย้ายวัตถุไปเนี๊ย มันก็จะต้องมีการลบ วัตถุเก่า.&lt;br /&gt;
&lt;center&gt;&lt;img src=&quot;http://diary.jomyut.net/media/glTransform.png&quot; border=&quot;1&quot; alt=&quot;gl Matrix Transformation&quot; /&gt;&lt;/center&gt;&lt;br /&gt;
&lt;code&gt;glPopMatrix();&lt;/code&gt; เป็นการ ดึง Matrix (ของการ Translate ครั้งก่อน) ออกจาก Stack ออกมา &lt;code&gt;clearPoint();&lt;/code&gt; คือเป็นการลบจุดเก่า&lt;br /&gt;
&lt;br /&gt;
จากนั้นทำการใช้สูตรการคำนวณในการ Rotate วัตถุคือ &lt;strong&gt;ขั้นแรก &lt;/strong&gt;จะต้องทำการย้ายแกนของ โลก ไปที่แกนของวัตถุ ( คือเราจะไม่ Rotate รอบจุด 0,0 ขอบหน้าต่าง เพราะเวลา Rotate 90 องศา ภาพจะหลุดหน้าต่างไป แต่จะเป็นการ Rotate โดยใช้จุดตรงกลางของวัตถุเป็น Fixed Point) ขั้น&lt;strong&gt;ต่อมา&lt;/strong&gt;ทำการ Rotate และ&lt;strong&gt;สุดท้าย&lt;/strong&gt;ทำการ Translate กลับไปที่แกนโลก&lt;br /&gt;
&lt;br /&gt;
จากนั้นก็เก็บค่าลงใน Stack เพื่อที่ว่า เวลาเรียกใช้ครั้งต่อไป จะมีค่าว่า ครั้งก่อนของเรา ทำการ Rotate จุดไปที่ใด. และก็ Plot Point จุดใหม่.&lt;br /&gt;
&lt;br /&gt;
ข้อสังเกตของการใช้ Transformation ของ OpenGL นั้นคือ &lt;code&gt;allX[i],allY[i]&lt;/code&gt; เป็นค่าจุดคงที่ คือเราสามารถทำการ Plot จุดเดิม แต่ว่ามันจะเอา Matrix ที่เราทำการใส่ค่าการ Translate,Rotate,Scale ไปคูณกับจุด แล้วมันจะ Plot จุดใหม่แทน แต่มันจะไม่เก็บจุดใหม่เขา allX[] allY[] นะ นี่เป็นเหตุผลที่ทำให้เราต้อง PopMatrix(); ออกมา จะได้ค่าการ Rotate ครั้งก่อน ก็เอามา Plot จุดด้วยสีขาวเพื่อลบภาพเก่าออก 
    </content:encoded>

    <pubDate>Tue, 12 Oct 2004 16:27:38 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/96-guid.html</guid>
    
</item>
<item>
    <title>Copy String &amp;amp; Convert Integer to String</title>
    <link>http://diary.jomyut.net/archives/95-Copy-String-amp;-Convert-Integer-to-String.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/95-Copy-String-amp;-Convert-Integer-to-String.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=95</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=95</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    วันนี้นั่งหา Function ในการ Copy String เข้ามาไว้ด้วยกัน. ปกติเราใช้แค่ printf(); ซึ่งมัน join String เข้าเองได้เลย แต่พอต้องส่งข้อมูลเป็น String คือ Copy 2 String มาไว้ที่เดียวกันแล้ว ก็เลยไม่รู้จะทำไง. ในที่สุด ก็เปิดเจอใน eBook&lt;br /&gt;
&lt;blockquote&gt;C/C++ Programmer&#039;s Reference, Third Edition &lt;br /&gt;
by Herbert Schildt   ISBN:0072227222 &lt;br /&gt;
McGraw-Hill/Osborne &amp;copy; 2003 (358 pages)&lt;/blockquote&gt;&lt;br /&gt;
&lt;!--more--&gt;&lt;br /&gt;
ได้วิธีการมาคือใช้ Function ที่ชื่อ &lt;ins&gt;str3=strcat(str1,str2); &lt;/ins&gt;ซึ่ง Function นี้ จะนำค่า str2 มาต่อกับ str1 โดยเอา Null ที่ใช้ปิดท้ายของ str1 ออกไป แล้วก็จะส่ง Addr ไปให้ Str3 ซึ่งก็มีข้อผิดพลาดเล็กน้อยตรงที่ว่า str1 หนะ มันจะต้องจอง พท. เผื่อ str2 ไว้ด้วย&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;ins&gt;char&lt;/ins&gt; buffer[30];&lt;br /&gt;
&lt;ins&gt;_itoa&lt;/ins&gt;(Size, buffer, 10 );			&lt;br /&gt;
&lt;ins&gt;char&lt;/ins&gt; *Command = strcat(buffer,&quot;pt POINT SELECTED&quot;);&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
จากตัวอย่าง เราจอง buffer ไว้ 30 ตัวอักษร แล้วใช้ function &lt;ins&gt;_itoa&lt;/ins&gt; ในการแปลงเลขจาก Integer มาเป็น String ซึ่งค่า String ที่ได้ ถูกเก็บไว้ใน buffer จากนั้น เอาไปเข้า function strcat(); ซึ่งจากตัวอย่าง ตัวแปร buffer จะต้องจอง พท.เผื่อ &quot;pt POINT SELECTED&quot; ไว้ด้วยแล้ว&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;_itoa(Size, buffer, 10 );&lt;/strong&gt;&lt;br /&gt;
สำหรับ Function นี้ ใช้แปลงเลข จาก Integer เป็น String รับค่าเป็น &lt;br /&gt;
Size คือ ตัวเลข Integer ที่ต้องการแปลง&lt;br /&gt;
buffer คือ String Output ที่จะได้ออกมา&lt;br /&gt;
10 คือ ให้แปลงออกมาเป็น String ฐาน 10 นั่นเอง&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 10 Oct 2004 21:49:53 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/95-guid.html</guid>
    
</item>
<item>
    <title>OpenGL ตอน Translate Bitmap Image</title>
    <link>http://diary.jomyut.net/archives/94-OpenGL-Translate-Bitmap-Image.html</link>
            <category>C/C++/OpenGL</category>
    
    <comments>http://diary.jomyut.net/archives/94-OpenGL-Translate-Bitmap-Image.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=94</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=94</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    ตอนนี้มี Project เป็นการทำโปรแกรม Paintbrush ส่งอาจารย์อยู่ ซึ่งเราเลือกใน OpenGL เพราะเราคิดว่า ไหนๆก็ต้องเรียนรู้แล้ว ขอลองใช้ OpenGL เสียหน่อยแล้วกัน.&lt;br /&gt;
&lt;br /&gt;
ปัญหาที่เราค้นพบ หาวิธีการอยู่ครึ่งวันนั่นก็คือ การทำการ Copy จุดที่อยู่บนหน้าจอ ซึ่งปกติถ้าเป็น VC ธรรมดาจะใช้เป็น getPixel(); แต่ว่าใน OpenGL นั้นใช้ไม่เหมือนกัน.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;strong&gt;// Alloc pixel bytes &lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;1:&lt;/code&gt; int NbBytes = 3 &lt;strong&gt; size.cx &lt;/strong&gt; size.cy; &lt;br /&gt;
&lt;code&gt;2:&lt;/code&gt; unsigned char &lt;strong&gt;pPixelData = new unsigned char[NbBytes]; &lt;br /&gt;
 &lt;strong&gt;// Copy from OpenGL &lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;3:&lt;/code&gt; &lt;ins&gt;glReadPixels&lt;/ins&gt;(0,0,size.cx,size.cy,GL_RGB,GL_UNSIGNED_BYTE,pPixelData); &lt;/blockquote&gt;&lt;!--more--&gt;&lt;br /&gt;
&lt;br /&gt;
อธิบาย Source code ได้ดังนี้&lt;br /&gt;
1: เป็นการประกาศจำนวน Bytes ที่จำเป็นต้องใช้ คือ 3(สี R,G,B สีละ Bytes) คูณ ขนาดแกน X คูณ ขนาดแกน Y&lt;br /&gt;
2: เป็นการประกาศตัวแปร Address Pointer ชื่อ pPixelData โดยให้จองเนื้อที่ขนาด ที่ต้องการที่ระบุไว้ในข้อ 1&lt;br /&gt;
3: เป็นการอ่านจุด Pixel ออกมา โดยมี Parameter ดังนี้&lt;br /&gt;
0,0 -&gt; จุด X,Y ที่ต้องการเริ่มอ่านจุด Pixel&lt;br /&gt;
size.cx,size.cy -&gt; ขนาดภาพที่ต้องการ [ จำนวนเท่าไหร่ pixel ]&lt;br /&gt;
GL_RGB -&gt; ต้องการอ่านรูปแบบสี แบบ RGB [ 3 แม่สี ]&lt;br /&gt;
&lt;ins&gt;GL_UNSIGNED_BYTE&lt;/ins&gt; -&gt; เก็บค่าสีละ Bytes ตัวเลขแบบ Unsign&lt;br /&gt;
&lt;ins&gt;pPixelData&lt;/ins&gt; -&gt; เป็น address ที่ขอจองพื้นที่ไว้ในข้อ 2 เพื่อทำการเก็บจุดสีทั้งหมดที่ได้จากการอ่าน&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;// Alloc pixel bytes &lt;br /&gt;
int NbBytes = 3 &lt;/strong&gt; 50 * 50; &lt;br /&gt;
unsigned char *pPixelData = new unsigned char[NbBytes]; &lt;br /&gt;
 // Copy from OpenGL &lt;br /&gt;
glReadPixels(0,0,50,50,GL_RGB,GL_UNSIGNED_BYTE,pPixelData); &lt;br /&gt;
&lt;code&gt;1:&lt;/code&gt; &lt;ins&gt;glRasterPos2f&lt;/ins&gt;(25,25);&lt;br /&gt;
&lt;code&gt;2:&lt;/code&gt; &lt;ins&gt;glDrawPixels&lt;/ins&gt;(50,50,GL_RGB,GL_UNSIGNED_BYTE,pPixelData);&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
ในส่วน 2 บรรทัดนี้ที่เพิ่มเข้ามา ใช้ในการเลื่อนจุด Translate ไป Plot จุดที่ต้องการที่อื่น จริงๆแล้ว OpenGl มี function ในการ translate มาให้แบบ metrix อยู่แล้วคือ glTranslate แต่ว่าเราต้องการใช้ algorithm ที่เรียนมาในการจัดการ translate ด้วยตัวเอง เลยต้องใช้วิธีดังกล่าว&lt;br /&gt;
1: &lt;ins&gt;glRasterPos2f&lt;/ins&gt; เป็น Function ในการเลื่อนจุดที่ต้องการจะ Plot ไปที่ X,Y นั้นๆ (ในที่นี้คือ 25,25) เปรียบเทียบง่ายๆเหมือนเลื่อนหัวอ่าน Hdd นั้นแหละ&lt;br /&gt;
2: &lt;ins&gt;glDrawPixels&lt;/ins&gt; เป็นการ Write จุดที่เราเก็บไว้ใน Buffer (&lt;ins&gt;pPixelData&lt;/ins&gt;) ออกทางหน้าจอ โดยจะต้องกำหนด Parameter เหมือนตอนอ่านเข้ามา คือ &lt;strong&gt;RGB , UNSIGNED_BYTE &lt;/strong&gt;โดย ค่า parameter 2 ตัวแรก เป็นขนาดของภาพที่ต้องการจะวาดนะ ไม่ใช่จุดที่ต้องการวาด(เพราะเราต้องกำหนดลง glRasterPos แทน)&lt;br /&gt;
&lt;br /&gt;
เท่านี้แหละ เราก็สามารถทำการ copy จุด translate ไปยังอีกที่นึงได้แล้ว.&lt;br /&gt;
หาวิธีมาครึ่งวัน ทั่ว Google เลยต้อง Note ไว้เสียหน่อย&lt;br /&gt;
&lt;br /&gt;
Link :&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/nehe.gamedev.net&#039;);&quot;  href=&quot;http://nehe.gamedev.net&quot;&gt;NeHe -เว็บที่อธิบายการเขียนโปรแกรม OpenGL ได้อย่างดี [Advance]&lt;/a&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/rush3d.com/reference/opengl-bluebook-1.0/&#039;);&quot;  href=&quot;http://rush3d.com/reference/opengl-bluebook-1.0/&quot;&gt;Reference ภาษา OpenGL&lt;/a&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.codeguru.com/Cpp/G-M/opengl/article.php/c2711/&#039;);&quot;  href=&quot;http://www.codeguru.com/Cpp/G-M/opengl/article.php/c2711/&quot;&gt;[CodeGuru] ตัวอย่าง Code ที่เอามาใช้ในหน้านี้ - อธิบายการ Save ภาพลงไฟล์&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 10 Oct 2004 01:49:45 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/94-guid.html</guid>
    
</item>

</channel>
</rss>