Make your own free website on Tripod.com

. . . . . .ต่อไปเป็น 24Bits หรือโหมด 16 ล้านสีนั่นเอง ตรงนี้จะง่ายขึ้นมาหน่อยเพราะเราให้ค่าเรียงๆกันไปเลยคือ Red,Green,Blue ค่าระหว่าง 0 - 255 ในโหมดนี้ต้องการพลังในการแสดงผลที่ค่อนข้างสูงเพราะ 1 จุดสี ต้องเขียนถึง 3 ครั้ง ไม่เหมือน 256 และ 15Bits, 16Bits สีที่เขียนครั้งเดียว แต่สีที่ได้จะมีความใกล้เคียงความจริงมาก เหมือนของจริงว่างั้นเหอะ เกมที่ใช้ความสามารถในโหมด 16 ล้านสี ส่วนมากจะเป็นเกมที่ใช้กับการ์ดแร่งความเร็วครับ ถ้าเป็ฯซอฟต์จะช้ามาก แต่การจัดการสีในโหมดนี้จะง่ายกว่าโหมดอื่นๆมาก เพราะไม่ต้องมานั่งอัดสี ไม่ต้องมาแปลง ให้ค่าไปเลย ไม่ต้องมีตารางสี สะดวกสบายดี ต่อไปเป็น 32Bits สี ในโหมดนี้จะเพิ่ม Alpha chennel ขึ้นมา เพื่อมาควบคุมแม่สี RGB อีกตัวหนึ่ง ในโหมดนี้ยังไม่เป็นที่นิยมในเกมปัจจุบัน เพราะต้องเขียนถึง 4 ครั้ง ถึงจะได้ 1 จุดสี แต่ความละเอียดสีจะมีมากกว่า 24Bits สีครับ หรือใช้เทคนิคเขียนครั้งเดียวก็ได้แต่อาจจะช้ามากในการแสดงผลต่อหน้าจอหนึ่งๆ ครับ

การอ้างถึงหน่วยความจำของการ์ด

. . . . . .ด้วยข้อจำกัดของ CPU รุ่น x86 ทั้งหลาย หน่วยความจำที่อ้างได้จะอยู่ระหว่าง 0 - 65535 ถ้าเราไปอ้างที่ 65536 มันก็จะกลับมาที่ 0 ใหม่ ที่อยู่ของหน่วยความจำกราฟฟิกจะอยู่ที่ A000:0000 ตรงนี้หลายคนคงจะคุ้นๆ แต่ในโหมด 640x480 256 สี ลองคูนคูแล้วใช้หน่วยความจำถึง 307,200 Bytes แต่เราอ้างได้แค่ 0 - 65535 เท่านั้นเอง หมายความว่าทั้งหน้าจอใช้พื้นที่แสดงผล 307,200 จุด แต่เราอ้างถึงหน่วยความจำได้ 65,536 จุด (0 ถึง 65535 ) แล้วทีนี้ปวดหมองละ.............ไม่ยากๆ ลองดูรูปข้างล่าง

. . . .จากรูป สมมติว่าในหนึ่งหน้าจอแสดงผลขนาด 640x480 ถูกแบ่งเป็นส่วนๆ ส่วนละ 64k เราอ้างถึงตำแหน่งแสดงผลได้ตั้งแต่ A000:0000 ถึง A000:FFFF แต่เราไม่สามารถอ้างถึงตำแหน่งที่เกิน 64k ได้ เราต้องอ้างถึงส่วนที่สอง ส่วนที่เป็นสีฟ้า เพื่อที่จะเขียนจุดที่ 65536 และจุดต่อๆไป มาถึงตรงนี้ ตำแหน่งแสดงผลที่เริ่มที่ A000:0000 นะครับ จะแตกต่างตรงที่ส่วนทำงานจะเป็นสีฟ้าไม่ใช่สีเทา และจะสิ้นสุดที่ A000:FFFF ถ้าเราอ้างถึง ส่วนสีเขียวก็จะเริ่มที่ A000:0000 - A000:FFFF ส่วนสีเหลืองและต่อๆไปก็เช่นเดียวกันครับ เพราะฉนั้นต้องมีวิธีการในการอ้างถึงส่วนสีเทา ฟ้า เขียว เหลือง ก่อนที่เราจะเขียนหน่วยความจำนั้น เช่น เราระบายสีไป 65536 จุดแล้ว (0 - 65535 มีจำนวน 65536 จุดครับรวมศูนย์ด้วย) เราจะระบายจุดที่ 65537 ก็บอกการ์ดว่าเราจะอ้างส่วนสีฟ้า พอสำเร็จเราก็เขียนจุดที่ 65537 ต่อๆ ไปเรื่อยๆ หรือแบบนี้ครับ ดูรูปดีกว่า

. . . . . .พอเข้าใจยังครับหลังจากดูรูป ต่อไปเรามาดูโปรแกรมกัน เริ่มจากการเปลี่ยนโหมดการแสดงผล ผมใช้ VESA Mode นะครับ เพราะทุกๆการ์ดจะสนับสนุนการแสดงผลแบบ VESA ที่ต้องมี VESA เพราะการเปลี่ยนโหมดการแสดงผล แต่ละการ์ดมีวิธีการที่แตกต่าง และยุ่งยากซับซ้อนพอสมควร แต่ถ้าเราเขียนแบบ VESA แล้วคำสั่งเดียวใช้ได้หมดทุกการ์ด ที่สนับสนุน VESA ครับ อ้อ.......มีความยุ่งยากระหว่าง Real mode และ Protect mode หน่อยครับ แต่ผมจะใช้ Borland C++ 2.0 เป็น compiler แบบ 16Bits มีวิธีการเขียนแบบนี้ครับ ดูหน้าต่อไป