(ไลบรารีนี้สามารถใช้งานได้ภายใต้ใบอนุญาตฟรีและได้รับอนุญาต แต่ต้องการการสนับสนุนทางการเงินเพื่อรักษาการปรับปรุงอย่างต่อเนื่อง นอกเหนือจากการบำรุงรักษาและความเสถียรแล้ว ยังมีคุณสมบัติที่ต้องการอีกมากมายที่ยังไม่ได้เพิ่ม หากบริษัทของคุณใช้ Dear ImGui โปรดพิจารณาติดต่อ .)
ธุรกิจ: สนับสนุนการพัฒนาและการบำรุงรักษาอย่างต่อเนื่องผ่านสัญญาการสนับสนุน/การสนับสนุนตามใบแจ้งหนี้:
อีเมล์ : ติดต่อ @ dearimgui dot com
บุคคล: สนับสนุนการพัฒนาและบำรุงรักษาอย่างต่อเนื่องที่นี่ ดูหน้าการระดมทุนด้วย
การเสนอขาย - การใช้งาน - วิธีการทำงาน - การเผยแพร่และบันทึกการเปลี่ยนแปลง - การสาธิต - การเริ่มต้นใช้งานและการบูรณาการ |
---|
คลังภาพ - การสนับสนุน คำถามที่พบบ่อย - วิธีการช่วยเหลือ - เงินทุนและผู้สนับสนุน - เครดิต - ใบอนุญาต |
Wiki - ส่วนขยาย - การผูกภาษา & แบ็กเอนด์ของเฟรมเวิร์ก - ซอฟต์แวร์ที่ใช้ Dear ImGui - คำพูดของผู้ใช้ |
เรียน ImGui เป็น ไลบรารีส่วนติดต่อผู้ใช้แบบกราฟิกที่ไม่บวมสำหรับ C++ โดยจะส่งออกบัฟเฟอร์จุดสุดยอดที่ได้รับการปรับปรุงซึ่งคุณสามารถเรนเดอร์ได้ตลอดเวลาในแอปพลิเคชันที่เปิดใช้งาน 3D ไปป์ไลน์ของคุณ รวดเร็ว พกพาสะดวก ไม่เชื่อเรื่อง Renderer และอยู่ในตัวเอง (ไม่มีการพึ่งพาภายนอก)
Dear ImGui ได้รับการออกแบบมาเพื่อ ให้สามารถวนซ้ำได้อย่างรวดเร็ว และช่วย ให้โปรแกรมเมอร์ สามารถสร้าง เครื่องมือสร้างเนื้อหาและเครื่องมือแสดงภาพ / ดีบัก (ซึ่งต่างจาก UI สำหรับผู้ใช้ทั่วไป) ให้ความสำคัญกับความเรียบง่ายและประสิทธิผลในการบรรลุเป้าหมายนี้ และขาดคุณสมบัติบางอย่างที่มักพบในไลบรารีระดับสูง เหนือสิ่งอื่นใด ไม่รองรับความเป็นสากลอย่างสมบูรณ์ (ข้อความจากขวาไปซ้าย ข้อความสองทิศทาง การจัดรูปแบบข้อความ ฯลฯ) และคุณสมบัติการเข้าถึงไม่ได้รับการสนับสนุน
เรียน ImGui เหมาะอย่างยิ่งสำหรับการบูรณาการในเอ็นจิ้นเกม (สำหรับเครื่องมือ), แอปพลิเคชัน 3 มิติแบบเรียลไทม์, แอปพลิเคชันเต็มหน้าจอ, แอปพลิเคชันแบบฝัง หรือแอปพลิเคชันใด ๆ บนแพลตฟอร์มคอนโซลที่คุณสมบัติของระบบปฏิบัติการไม่ได้มาตรฐาน
แกนหลักของ Dear ImGui นั้นมีอยู่ในไฟล์ที่ไม่เชื่อเรื่องพระเจ้าบนแพลตฟอร์มเพียงไม่กี่ไฟล์ ซึ่งคุณสามารถคอมไพล์ในแอปพลิเคชัน/เอ็นจิ้นของคุณได้อย่างง่ายดาย เป็นไฟล์ทั้งหมดในโฟลเดอร์รูทของที่เก็บ (imgui*.cpp, imgui*.h) ไม่จำเป็นต้องมีกระบวนการสร้างเฉพาะ คุณสามารถเพิ่มไฟล์ .cpp ลงในโปรเจ็กต์ที่มีอยู่ได้
แบ็กเอนด์สำหรับ API กราฟิกที่หลากหลายและแพลตฟอร์มการเรนเดอร์ มีให้ในโฟลเดอร์แบ็กเอนด์/ พร้อมด้วยแอปพลิเคชันตัวอย่างในโฟลเดอร์ examples/ คุณสามารถสร้างแบ็กเอนด์ของคุณเองได้ ทุกที่ที่คุณสามารถเรนเดอร์รูปสามเหลี่ยมที่มีพื้นผิวได้ คุณสามารถเรนเดอร์ Dear ImGui ได้
ดูส่วนการเริ่มต้นใช้งานและการรวมระบบของเอกสารนี้สำหรับรายละเอียดเพิ่มเติม
หลังจากตั้งค่า Dear ImGui ในแอปพลิเคชันของคุณแล้ว คุณจะสามารถใช้งานได้จาก _anywhere_ ในลูปโปรแกรมของคุณ:
ImGui::Text ( " Hello, world %d " , 123 );
if (ImGui::Button( " Save " ))
MySaveFunction ();
ImGui::InputText ( " string " , buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat ( " float " , &f, 0 . 0f , 1 . 0f );
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin ( " My First Tool " , &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
if ( ImGui::BeginMenu ( " File " ))
{
if ( ImGui::MenuItem ( " Open.. " , " Ctrl+O " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Save " , " Ctrl+S " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Close " , " Ctrl+W " )) { my_tool_active = false ; }
ImGui::EndMenu ();
}
ImGui::EndMenuBar ();
}
// Edit a color stored as 4 floats
ImGui::ColorEdit4 ( " Color " , my_color);
// Generate samples and plot them
float samples[ 100 ];
for ( int n = 0 ; n < 100 ; n++)
samples[n] = sinf(n * 0 . 2f + ImGui::GetTime() * 1 . 5f );
ImGui::PlotLines ( " Samples " , samples, 100 );
// Display contents in a scrolling region
ImGui::TextColored (ImVec4( 1 , 1 , 0 , 1 ), "Important Stuff");
ImGui::BeginChild ( " Scrolling " );
for ( int n = 0 ; n < 50 ; n++)
ImGui::Text ( " %04d: Some text " , n);
ImGui::EndChild ();
ImGui::End ();
เรียน ImGui ช่วยให้คุณ สร้างเครื่องมือที่ซับซ้อน และเครื่องมือที่มีอายุสั้นมากได้ อีกด้านหนึ่งของอายุสั้น: การใช้ฟีเจอร์แก้ไข&ดำเนินการต่อ (การรีโหลดโค้ดร้อน) ของคอมไพเลอร์สมัยใหม่ คุณสามารถเพิ่มวิดเจ็ตบางส่วนเพื่อปรับแต่งตัวแปรในขณะที่แอปพลิเคชันของคุณกำลังทำงาน และลบโค้ดในนาทีต่อมา! เรียน ImGui ไม่ใช่แค่การปรับแต่งค่าเท่านั้น คุณสามารถใช้มันเพื่อติดตามอัลกอริทึมที่ทำงานอยู่โดยเพียงแค่ส่งคำสั่งข้อความ คุณสามารถใช้มันร่วมกับข้อมูลการสะท้อนของคุณเองเพื่อเรียกดูชุดข้อมูลของคุณแบบเรียลไทม์ คุณสามารถใช้มันเพื่อแสดงข้อมูลภายในของระบบย่อยในเอ็นจิ้นของคุณ เพื่อสร้างบันทึก เครื่องมือตรวจสอบ ผู้สร้างโปรไฟล์ ตัวดีบักเกอร์ ตัวแก้ไข/เฟรมเวิร์กการสร้างเกมทั้งหมด ฯลฯ
กระบวนทัศน์ IMGUI ผ่าน API พยายามลดการทำซ้ำสถานะที่ไม่จำเป็น การซิงโครไนซ์สถานะ และการเก็บรักษาสถานะจากมุมมองของผู้ใช้ มีข้อผิดพลาดน้อยกว่า (โค้ดน้อยกว่าและมีข้อบกพร่องน้อยกว่า) กว่าอินเทอร์เฟซโหมดคงไว้แบบเดิม และช่วยสร้างอินเทอร์เฟซผู้ใช้แบบไดนามิก ตรวจสอบส่วนกระบวนทัศน์เกี่ยวกับ IMGUI ของ Wiki เพื่อดูรายละเอียดเพิ่มเติม
เรียน ImGui เอาต์พุตบัฟเฟอร์จุดสุดยอดและรายการคำสั่งที่คุณสามารถแสดงผลในแอปพลิเคชันของคุณได้อย่างง่ายดาย จำนวนการเรียกดึงและการเปลี่ยนแปลงสถานะที่จำเป็นในการแสดงผลนั้นค่อนข้างน้อย เนื่องจาก Dear ImGui ไม่ทราบหรือสัมผัสสถานะกราฟิกโดยตรง คุณจึงสามารถเรียกใช้ฟังก์ชันต่างๆ ของมันได้ทุกที่ในโค้ดของคุณ (เช่น ในระหว่างอัลกอริธึมที่ทำงานอยู่ หรือในระหว่างกระบวนการเรนเดอร์ของคุณเอง) โปรดดูแอปพลิเคชันตัวอย่างในโฟลเดอร์ examples/ เพื่อดูคำแนะนำเกี่ยวกับวิธีการรวม Dear ImGui เข้ากับโค้ดเบสที่มีอยู่ของคุณ
ความเข้าใจผิดที่พบบ่อยคือการเข้าใจผิดว่า GUI โหมดทันทีสำหรับการเรนเดอร์โหมดทันที ซึ่งโดยทั่วไปหมายถึงการทุบไดรเวอร์/GPU ของคุณด้วยการเรียกดึงที่ไม่มีประสิทธิภาพและการเปลี่ยนแปลงสถานะเมื่อมีการเรียกใช้ฟังก์ชัน GUI นี่ไม่ใช่สิ่งที่ Dear ImGui ทำ เรียน ImGui เอาต์พุตบัฟเฟอร์จุดยอดและรายการชุดการโทรดึงขนาดเล็ก มันไม่เคยสัมผัส GPU ของคุณโดยตรง ชุดการโทรแบบดึงมีความเหมาะสมอย่างเหมาะสม และคุณสามารถแสดงผลได้ในภายหลัง ในแอปของคุณ หรือแม้แต่จากระยะไกล
ดูหน้าการเผยแพร่สำหรับบันทึกการเปลี่ยนแปลงที่ตกแต่งแล้ว การอ่านบันทึกการเปลี่ยนแปลงเป็นวิธีที่ดีในการติดตามสิ่งที่ Dear ImGui นำเสนอ และอาจจะทำให้คุณได้ไอเดียเกี่ยวกับคุณสมบัติบางอย่างที่คุณเพิกเฉยมาจนถึงตอนนี้!
การเรียกใช้ฟังก์ชัน ImGui::ShowDemoWindow()
จะสร้างหน้าต่างสาธิตที่แสดงคุณสมบัติและตัวอย่างที่หลากหลาย รหัสนี้พร้อมสำหรับการอ้างอิงใน imgui_demo.cpp
เสมอ นี่คือลักษณะของการสาธิต
คุณควรจะสามารถสร้างตัวอย่างจากแหล่งที่มาได้ หากคุณไม่ทำโปรดแจ้งให้เราทราบ! หากคุณต้องการดูคุณสมบัติบางอย่างของ Dear ImGui อย่างรวดเร็ว คุณสามารถดาวน์โหลดไบนารีของ Windows ของแอปสาธิตได้ที่นี่:
แอปพลิเคชันสาธิตไม่รองรับ DPI ดังนั้น คาดว่าจะเกิดความพร่ามัวบนหน้าจอ 4K สำหรับการรับรู้ DPI ในแอปพลิเคชันของคุณ คุณสามารถโหลด/โหลดแบบอักษรของคุณซ้ำในระดับอื่น และปรับขนาดสไตล์ของคุณด้วย style.ScaleAllSizes()
(ดูคำถามที่พบบ่อย)
ดูคู่มือการเริ่มต้นใช้งานสำหรับรายละเอียด
บนแพลตฟอร์มส่วนใหญ่และเมื่อใช้ C++ คุณควรจะสามารถใช้แบ็กเอนด์ imgui_impl_xxxx ร่วมกันได้โดยไม่ต้องแก้ไข (เช่น imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
) หากเครื่องยนต์ของคุณรองรับหลายแพลตฟอร์ม ให้พิจารณาใช้ไฟล์ imgui_impl_xxxx ให้มากขึ้นแทนที่จะเขียนใหม่ เพราะวิธีนี้จะได้ผลน้อยลงสำหรับคุณ และคุณสามารถทำให้ Dear ImGui ทำงานได้ทันที คุณสามารถตัดสินใจเขียนแบ็กเอนด์ที่กำหนดเองใหม่ได้ ในภายหลัง โดยใช้ฟังก์ชันเอ็นจิ้นที่คุณกำหนดเองได้หากต้องการ
การรวม Dear ImGui เข้ากับเอ็นจิ้นที่คุณกำหนดเองนั้นเป็นเรื่องของ 1) การเชื่อมต่ออินพุตของเมาส์/คีย์บอร์ด/เกมแพด 2) การอัปโหลดพื้นผิวไปยัง GPU/เอ็นจิ้นการเรนเดอร์ของคุณ 3) จัดให้มีฟังก์ชันการเรนเดอร์ที่สามารถผูกพื้นผิวและเรนเดอร์รูปสามเหลี่ยมที่มีพื้นผิว ซึ่งโดยพื้นฐานแล้วคือ แบ็กเอนด์กำลังทำ ตัวอย่าง/ โฟลเดอร์เต็มไปด้วยแอปพลิเคชันที่ทำแบบนั้น: การตั้งค่าหน้าต่างและการใช้แบ็กเอนด์ หากคุณปฏิบัติตามคู่มือการเริ่มต้นใช้งาน ในทางทฤษฎีแล้วคุณน่าจะใช้เวลาน้อยกว่าหนึ่งชั่วโมงในการผสานรวม Dear ImGui อย่าลืมใช้เวลาอ่านคำถามที่พบบ่อย ความคิดเห็น และตัวอย่างการใช้งาน!
แบ็กเอนด์/การเชื่อมโยงที่ได้รับการดูแลอย่างเป็นทางการ (ในพื้นที่เก็บข้อมูล):
หน้าวิกิแบ็กเอนด์/การเชื่อมโยงของบุคคลที่สาม:
หน้าวิกิส่วนขยาย/วิดเจ็ตที่มีประโยชน์:
ดู Wiki สำหรับลิงก์และแนวคิดเพิ่มเติม
ตัวอย่างโปรเจ็กต์ที่ใช้ Dear ImGui: Tracy (profiler), ImHex (ตัวแก้ไข hex/การวิเคราะห์ข้อมูล), RemedyBG (debugger) และอื่นๆ อีกหลายร้อยรายการ
หากต้องการภาพหน้าจอโปรเจ็กต์ที่ผู้ใช้ส่งมาเพิ่มเติมโดยใช้ Dear ImGui โปรดดูที่ Gallery Threads!
สำหรับรายการวิดเจ็ตและส่วนขยายของบุคคลที่สาม โปรดดูหน้าวิกิส่วนขยาย/วิดเจ็ตที่มีประโยชน์
เครื่องยนต์แบบกำหนดเอง เอ้อ (สาขาเชื่อมต่อ) | เอ็นจิ้นแบบกำหนดเองสำหรับ Wonder Boy: The Dragon's Trap (2017) |
เครื่องยนต์แบบกำหนดเอง (ไม่มีชื่อ) | เทรซี่โปรไฟล์ (github) |
ดู: คำถามที่พบบ่อย (FAQ) ที่มีการตอบคำถามทั่วไป
ดู: การเริ่มต้นใช้งานและ Wiki สำหรับลิงก์ ข้อมูลอ้างอิง บทความมากมาย
ดู: บทความเกี่ยวกับกระบวนทัศน์ IMGUI เพื่ออ่าน/เรียนรู้เกี่ยวกับกระบวนทัศน์ GUI โหมดทันที
ดู: การเปลี่ยนแปลงที่กำลังจะเกิดขึ้น
ดู: เรียน ImGui Test Engine + ชุดทดสอบสำหรับระบบอัตโนมัติและการทดสอบ
เพื่อวัตถุประสงค์ในการให้เครื่องมือค้นหารวบรวมข้อมูลวิกิ นี่คือลิงก์ไปยังวิกิที่สามารถรวบรวมข้อมูลได้ (ไม่ใช่สำหรับมนุษย์ นี่คือเหตุผล)
เริ่มต้นใช้งาน? สำหรับผู้ใช้ครั้งแรกที่มีปัญหาในการคอมไพล์/ลิงก์/รัน หรือมีปัญหาในการโหลดฟอนต์ โปรดใช้ GitHub Discussions สำหรับคำถามอื่น ๆ รายงานข้อผิดพลาด คำขอ ข้อเสนอแนะ โปรดโพสต์บนปัญหา GitHub โปรดอ่านและกรอกเทมเพลตฉบับใหม่อย่างละเอียด
มีการสนับสนุนส่วนตัวสำหรับลูกค้าธุรกิจที่ชำระเงิน (อีเมล: ติดต่อ @ dearimgui dot com )
ฉันควรซื้อเวอร์ชันใด
บางครั้งเราจะแท็กการเผยแพร่ (พร้อมบันทึกการเผยแพร่ที่ดี) แต่โดยทั่วไปแล้วจะปลอดภัย และแนะนำให้ซิงค์กับ master
หรือสาขา docking
ล่าสุด ไลบรารีค่อนข้างเสถียรและการถดถอยมีแนวโน้มที่จะได้รับการแก้ไขอย่างรวดเร็วเมื่อมีการรายงาน ผู้ใช้ขั้นสูงอาจต้องการใช้สาขา docking
ที่มีคุณสมบัติ Multi-Viewport และ Docking สาขานี้จะมีการซิงค์กับต้นแบบเป็นประจำ
ใครใช้ Dear ImGui?
ดูคำพูด เงินทุน และผู้สนับสนุน และซอฟต์แวร์ที่ใช้หน้า Dear ImGui Wiki เพื่อดูว่าใครบ้างที่ใช้ Dear ImGui โปรดเพิ่มเกม/ซอฟต์แวร์ของคุณหากทำได้! ดูหัวข้อแกลเลอรี่ด้วย!
ฉันจะช่วยได้อย่างไร?
กำลังดำเนินการพัฒนา Dear ImGui และได้รับการสนับสนุนทางการเงินจากผู้ใช้และผู้สนับสนุนส่วนตัว
โปรดดู รายชื่อโดยละเอียดของผู้สนับสนุนและผู้สนับสนุนเงินทุน Dear ImGui ทั้งในปัจจุบันและในอดีต
ตั้งแต่เดือนพฤศจิกายน 2014 ถึงธันวาคม 2019 การพัฒนาที่กำลังดำเนินอยู่ยังได้รับการสนับสนุนทางการเงินจากผู้ใช้บน Patreon และการบริจาคส่วนบุคคล
ขอขอบคุณผู้สนับสนุนทั้งในอดีตและปัจจุบันทุกคนที่ช่วยให้โครงการนี้คงอยู่และเจริญรุ่งเรือง!
เรียน ImGui กำลังใช้ซอฟต์แวร์และบริการที่ให้บริการฟรีสำหรับโครงการโอเพ่นซอร์ส:
พัฒนาโดย Omar Cornut และผู้สนับสนุน GitHub ทั้งทางตรงและทางอ้อม เวอร์ชันแรกของไลบรารีนี้ได้รับการพัฒนาโดยได้รับการสนับสนุนจาก Media Molecule และใช้เป็นครั้งแรกภายในเกม Tearaway (PS Vita)
ผู้มีส่วนร่วมที่เกิดขึ้นประจำ ได้แก่ Rokas Kupstys @rokups (2020-2022): ส่วนที่ดีของงานเกี่ยวกับระบบอัตโนมัติและการทดสอบการถดถอยที่พร้อมใช้งานแล้วใน Dear ImGui Test Engine
สัญญาการบำรุงรักษา/การสนับสนุน ใบแจ้งหนี้การสนับสนุน และธุรกรรม B2B อื่นๆ ได้รับการโฮสต์และจัดการโดย Disco Hello
Omar: "ฉันค้นพบกระบวนทัศน์ IMGUI ครั้งแรกที่ Q-Games โดยที่ Atman Binstock ได้ละทิ้งการนำไปใช้อย่างเรียบง่ายของเขาเองในโค้ดเบส ซึ่งฉันใช้เวลาค่อนข้างมากในการปรับปรุงและคิด ปรากฎว่า Atman ได้สัมผัสกับแนวคิดนี้โดยตรงจากการทำงาน กับ Casey เมื่อฉันย้ายไปที่ Media Molecule ฉันเขียนไลบรารีใหม่โดยพยายามเอาชนะข้อบกพร่องและข้อจำกัดของไลบรารีแรกที่ฉันเคยทำงานด้วย ทำซ้ำและปรับปรุงให้ดีขึ้น"
ฝังแบบอักษร ProggyClean.ttf โดย Tristan Grimmer (ใบอนุญาต MIT)
ฝัง stb_textedit.h, stb_truetype.h, stb_rect_pack.h โดย Sean Barrett (โดเมนสาธารณะ)
แรงบันดาลใจ ความคิดเห็น และการทดสอบสำหรับเวอร์ชันแรกๆ: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis ขอขอบคุณทุกคนที่โพสต์ข้อเสนอแนะ คำถาม และแพตช์บน GitHub
เรียน ImGui ได้รับอนุญาตภายใต้ใบอนุญาต MIT โปรดดู LICENSE.txt สำหรับข้อมูลเพิ่มเติม