คำถามติดแท็ก performance

คุณภาพประสิทธิภาพและความเร็วในการเล่นเกมเพลย์อันเป็นผลมาจากปัจจัยหลายประการในการออกแบบและโครงสร้างของเกมและสถาปัตยกรรม

3
ทำไม OpenGL> = 3 อนุญาตให้ VBO เท่านั้น
ฉันเห็นว่า OpenGL เวอร์ชัน 3 ขึ้นไปกำจัดการใช้การเรนเดอร์ฝั่งไคลเอ็นต์ โหมดทันทีถูกตัดออกและดูเหมือนว่าจุดสุดยอดจะถูกยกเลิก แต่ถ้าฉันเข้าใจถูกต้อง VBOs เป็นวิธีหลักในการแสดงจุดยอด ในขณะที่ฉันเห็นตรรกะเบื้องหลังการมีวิธีที่เหมือนกันในการเรนเดอร์ทุกอย่างมันเป็นกรณีที่ VBOs ไม่มีข้อเสียอย่างใหญ่หลวงในอาร์เรย์ของจุดยอดหรือไม่? ฉันคิดว่า VBO ควรจะเป็นบัฟเฟอร์ขนาดใหญ่ที่มีข้อมูล> 1MB โดยทั่วไป ถ้าฉันมีฉากที่มีรูปทรงเรขาคณิตขนาดเล็กกว่ามาก ฉันมีกราฟฉากที่มีโหนดจำนวนมากโดยแต่ละโหนดต้องการการแปลงของตัวเอง ฯลฯ แต่ละโหนดควรสามารถลบแยกต่างหากเพิ่มลงในแบบแยกต่างหากเป็นต้นฉันใช้อาร์เรย์จุดยอดมาก่อน ดังนั้นคำถามแรกของฉันคือถ้าฉันเปลี่ยนเป็น VBOs จะมีค่าใช้จ่ายมากขึ้นในวัตถุกราฟฉากของฉันตอนนี้เพราะ VBO จำเป็นต้องจัดสรรให้กับแต่ละวัตถุ สิ่งที่น่ากังวลอีกอย่างคือเรขาคณิตที่ฉันกำลังแสดงนั้นมีความสามารถสูง ในกรณีที่เลวร้ายที่สุดอาจมีบางครั้งที่รูปทรงเรขาคณิตทั้งหมดจำเป็นต้องส่งใหม่ทุกเฟรมในช่วงระยะเวลาหนึ่ง VBOs จะมีประสิทธิภาพการทำงานที่แย่กว่าอาเรย์จุดสุดยอดในกรณีการใช้งานนี้หรือไม่หรือ VBOs ที่แย่ที่สุดจะทำงานได้ดีกว่าอาเรย์ในแนวดิ่ง แต่ไม่มากไปกว่านี้? ดังนั้นในรูปแบบที่กระชับยิ่งขึ้นคำถามของฉันคือ: 1) มีค่าใช้จ่ายจำนวนมากในการจัดสรร / ยกเลิกการจัดสรร VBOs (ฉันหมายถึงการตั้งค่าบัฟเฟอร์) 2) ถ้าฉันอัปเดตข้อมูลจากซีพียูทุกเฟรมสิ่งนี้จะแย่กว่าถ้าฉันใช้อาร์เรย์จุดยอดหรือไม่? และสุดท้ายฉันอยากรู้ว่า: 3) หากคำตอบของคำถามใดคำถามหนึ่งข้างต้นคือ "ใช่" ทำไมเลิกใช้โหมดการแสดงผลอื่นที่อาจมีข้อได้เปรียบเหนือ VBOs มีบางอย่างที่ฉันขาดไปเช่นเทคนิคที่ฉันควรจะใช้เพื่อลดต้นทุนการจัดสรรที่อาจเกิดขึ้นเหล่านี้หรือไม่? 4) …

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

4
มีอันตรายในการมีการวนลูปเกมหลักที่ควบคุมไม่ได้?
ฉันสงสัยว่ามีอันตรายใด ๆ ที่เป็นไปได้หรือไม่เมื่อลูปเกมของฉันทำงานเร็วเท่าที่ระบบอนุญาต ขณะนี้ฉันมีลูปซึ่งโดยการวัดเวลาที่ผ่านไปในหน่วยนาโนวินาทีเรียกใช้ตรรกะของเกมและตรรกะการเรนเดอร์ด้วยความเร็วที่กำหนดไว้ล่วงหน้าโดยไม่มีปัญหา ในความเป็นจริงตรรกะใด ๆ ที่ฉันทำในการวนซ้ำนั้นถูกโอเวอร์คล็อกไปที่การโทรในแต่ละวินาที การวนซ้ำตัวเองนั้นวิ่งได้เร็วเท่าที่มันชอบซึ่งมีประมาณ 11.7 ล้านลูปต่อวินาทีในเครื่องของฉัน วน (pseudocode ง่าย): while(!isGameOver){ if(canPollInputs){ pollInputs() } while(canStepLogic){ stepLogic() } if(canRender){ render() } } คำถามของฉันนั้นก็คือถ้าลูปแบบง่ายนั้นถ้ามันไม่ทำงานด้วยความเร็วที่ควบคุมสามารถทำอันตรายต่อระบบได้หรือไม่? แก้ไข: นั่นหมายความว่าตรรกะของฉันทำงาน 30 ครั้งต่อวินาที (30 tps), เครื่องมือแสดงภาพของฉันทำงานที่ 60 fps, ฉันสำรวจสัญญาณอินพุต 100 ครั้งต่อวินาทีและยังมีตรรกะบางอย่างที่จะรับมือกับตรรกะหรือการแสดงผลนานกว่าที่คาดไว้ . แต่ห่วงไม่ได้ควบคุมปริมาณ แก้ไข: การใช้Thread.sleep()เช่น Throttle การวนลูปหลักลงไปที่ 250 ลูปต่อวินาทีนำไปสู่การลดลง แต่ลูปทำงานที่ประมาณ 570 ลูปต่อวินาทีแทนที่จะเป็น 250 ที่ต้องการ …

4
Opcodes ใดเร็วกว่าในระดับ CPU [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ในทุกภาษาการเขียนโปรแกรมมีชุดของรหัสที่แนะนำให้คนอื่น ฉันพยายามที่จะแสดงรายการไว้ที่นี่ตามลำดับความเร็ว bitwise การบวก / การลบจำนวนเต็ม การคูณ / การหารจำนวนเต็ม การเปรียบเทียบ การควบคุมการไหล การเพิ่ม / ลบลอย การคูณ / หารลอย ในกรณีที่คุณต้องการรหัสประสิทธิภาพสูง C ++ สามารถปรับให้เหมาะกับมือในการประกอบใช้คำสั่ง SIMD หรือการควบคุมการไหลที่มีประสิทธิภาพมากขึ้นประเภทข้อมูล ฯลฯ ดังนั้นฉันจึงพยายามที่จะเข้าใจว่าประเภทข้อมูล (int32 / float32 / float64) หรือ การดำเนินงานที่ใช้ ( *, +, &) ส่งผลกระทบต่อผลการดำเนินงานในระดับซีพียู CPU จะช้าลงกว่าการเพิ่มหรือไม่ …

2
texelFetch และพื้นผิวของ OpenGL แตกต่างกันอย่างไร
ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetchและtextureแต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด: ไม่texelFetchเกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น? มีtexelFetchและtextureใช้แทนกันได้เมื่อใช้GL_NEAREST?

5
Objective-C หรือ C ++ สำหรับเกม iOS?
ฉันค่อนข้างมั่นใจในการเขียนโปรแกรมใน Objective-C และ C ++ แต่ฉันคิดว่า Objective-C นั้นใช้งานได้ง่ายกว่าและมีความยืดหยุ่นและไดนามิกมากกว่าในธรรมชาติ ข้อดีและข้อเสียเมื่อใช้ C ++ แทน Obj-C สำหรับการเขียนเกมใน iOS จะเป็นอย่างไร หรือค่อนข้างมีปัญหาใด ๆ ที่ทราบเกี่ยวกับการใช้ Obj-C เมื่อเทียบกับ C ++? ตัวอย่างเช่นฉันสงสัยว่าอาจมีปัญหาด้านประสิทธิภาพการทำงานกับ Obj-C เทียบกับรหัสที่เขียนใน C / C ++

4
การพลาดแคชและการใช้งานใน Entity Systems
เมื่อเร็ว ๆ นี้ฉันได้ทำการค้นคว้าและนำระบบ Entity มาใช้สำหรับกรอบงานของฉัน ฉันคิดว่าฉันอ่านบทความเกือบทั้งหมด reddits และคำถามเกี่ยวกับมันที่ฉันสามารถหาได้และจนถึงตอนนี้ฉันคิดว่าฉันเข้าใจความคิดที่ดีพอ อย่างไรก็ตามมันทำให้เกิดคำถามบางอย่างเกี่ยวกับพฤติกรรม C ++ โดยรวมภาษาที่ฉันใช้ระบบเอนทิตีในรวมถึงปัญหาการใช้งานบางอย่าง ดังนั้นวิธีการหนึ่งก็คือการจัดเก็บอาร์เรย์ของส่วนประกอบในเอนทิตีโดยตรงซึ่งฉันไม่ได้ทำเพราะมันทำลายสถานที่เก็บแคชเมื่อวนซ้ำผ่านข้อมูล ด้วยเหตุนี้ฉันจึงตัดสินใจที่จะมีหนึ่งอาเรย์ต่อประเภทส่วนประกอบดังนั้นส่วนประกอบทั้งหมดของประเภทเดียวกันจึงต่อเนื่องกันในหน่วยความจำซึ่งควรเป็นทางออกที่ดีที่สุดสำหรับการวนซ้ำอย่างรวดเร็ว แต่เมื่อฉันต้องทำซ้ำอาร์เรย์ของส่วนประกอบเพื่อทำบางสิ่งบางอย่างกับพวกเขาจากระบบในการติดตั้งเกมจริงฉันสังเกตว่าฉันมักจะทำงานกับส่วนประกอบสองชนิดหรือมากกว่าในคราวเดียว ตัวอย่างเช่นระบบการเรนเดอร์ใช้องค์ประกอบการแปลงและโมเดลร่วมกันเพื่อทำการเรียกการเรนเดอร์ คำถามของฉันคือเนื่องจากฉันไม่ได้วนซ้ำแถวลำดับที่ต่อเนื่องกันในแต่ละครั้งในกรณีเหล่านี้ฉันจะเสียสละประสิทธิภาพที่เพิ่มขึ้นทันทีจากการจัดสรรส่วนประกอบด้วยวิธีนี้หรือไม่? เป็นปัญหาหรือไม่เมื่อฉันทำซ้ำใน C ++ อาร์เรย์ที่ต่อเนื่องกันสองชุดและใช้ข้อมูลจากทั้งสองในแต่ละรอบ อีกสิ่งหนึ่งที่ฉันต้องการถามคือควรเก็บการอ้างอิงถึงส่วนประกอบหรือเอนทิตีอย่างไรเนื่องจากลักษณะของการจัดวางองค์ประกอบในหน่วยความจำพวกเขาสามารถสลับตำแหน่งในอาเรย์ได้อย่างง่ายดาย ลดขนาดปล่อยให้ตัวชี้ส่วนประกอบของฉันหรือจัดการไม่ถูกต้อง คุณจะแนะนำให้จัดการกับกรณีเหล่านี้อย่างไรเนื่องจากฉันมักจะพบว่าตัวเองต้องการทำงานกับการแปลงและส่วนประกอบอื่น ๆ ทุกเฟรมและถ้ามือจับหรือตัวชี้ของฉันไม่ถูกต้องมันค่อนข้างยุ่งที่จะทำการค้นหาทุกเฟรม

5
วิธีที่ต้องการแสดงข้อความใน OpenGL [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ฉันกำลังจะหยิบคอมพิวเตอร์กราฟิกขึ้นมาอีกครั้งสำหรับโครงการมหาวิทยาลัย สำหรับโครงการก่อนหน้านี้ฉันใช้ห้องสมุดที่เรียกว่าFTGLซึ่งไม่ทำให้ฉันพึงพอใจเพราะรู้สึกหนัก (ฉันลองเทคนิคการเรนเดอร์จำนวนมาก คำถามของฉันคือมีห้องสมุดที่ดีและมีประสิทธิภาพสำหรับเรื่องนี้? ถ้าไม่เช่นนั้นจะมีวิธีใดที่จะใช้ข้อความที่รวดเร็ว แต่ดูดี? การใช้งานบางอย่างที่ตั้งใจคือ: ฉลากวัตถุ / ตัวละครลอย การหารือ เมนู ฮัด แก้ไข: ยิ่งสามารถโหลดแบบอักษรได้

3
มีเอกสารใดบ้างที่เปรียบเทียบ / เปรียบเทียบการปรับใช้มาตรฐานไลบรารี C ++ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว (นี่ไม่ใช่การเขียนโปรแกรมเกมต่อ แต่ฉันแน่ใจว่าฉันถามเรื่องนี้ดังนั้นฉันจะได้รับการบอกว่าจะไม่ปรับให้เหมาะสมก่อนที่จะถึงแม้ว่าประวัติศาสตร์บอกเราทุกเกมใหญ่จบลงด้วยความกังวลเกี่ยวกับสิ่งเหล่านี้.) มีเอกสารใดบ้างที่สรุปความแตกต่างของประสิทธิภาพและโดยเฉพาะอย่างยิ่งการใช้หน่วยความจำระหว่างการใช้งานไลบรารีมาตรฐาน C ++ แตกต่างกันหรือไม่? รายละเอียดของการใช้งานบางอย่างได้รับการคุ้มครองโดย NDA แต่การเปรียบเทียบระหว่าง STLport กับ libstdc ++ เทียบกับ libc ++ กับ MSVC / Dinkumware (เทียบกับ EASTL?) ดูเหมือนว่าจะมีประโยชน์อย่างมาก โดยเฉพาะฉันกำลังมองหาคำตอบสำหรับคำถามที่ชอบ: หน่วยความจำค่าใช้จ่ายเกี่ยวข้องกับคอนเทนเนอร์มาตรฐานเท่าไร? คอนเทนเนอร์ใดมีถ้าทำการจัดสรรแบบไดนามิกโดยการประกาศเท่านั้น std :: string ทำการคัดลอกเมื่อเขียนหรือไม่? การเพิ่มประสิทธิภาพสตริงสั้น ๆ ? เชือก? std :: deque ใช้บัฟเฟอร์วงแหวนหรือไม่?

1
* การเรียก * = (หรือ * = การโทร *) ช้ากว่าการเขียนฟังก์ชันแยก (สำหรับไลบรารีคณิตศาสตร์) หรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันมีคลาสเวกเตอร์บางส่วนที่ฟังก์ชันทางคณิตศาสตร์มีลักษณะดังนี้: template<typename T, typename U> auto operator*(const Vector3<T>& lhs, const Vector3<U>& rhs) { return Vector3<decltype(lhs.x*rhs.x)>( lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z ); } template<typename T, typename U> Vector3<T>& operator*=(Vector3<T>& lhs, const Vector3<U>& rhs) { lhs.x *= …

5
ทำไมขนาดก้อนมักจะเป็นกำลังของสอง
มีโคลนนิ่ง Minecraft จำนวนมากอยู่ที่นั่นและฉันกำลังดำเนินการตามแนวทางของฉันเอง หลักการของการเรนเดอร์ภูมิประเทศคือการปูกระเบื้องให้ทั่วทั้งโลกเป็นชิ้นขนาดคงที่เพื่อลดความพยายามในการเปลี่ยนแปลงในภาษาท้องถิ่น ใน Minecraft ขนาดก้อนเท่ากับ 16 x 16 x 256 เท่าที่ฉันตอนนี้ และในโคลนฉันยังเห็นพลังของหมายเลข 2 ด้วยเสมอ มีเหตุผลใดที่เกี่ยวข้องกับประสิทธิภาพหรือหน่วยความจำ ฉันรู้ว่าพลังของ 2 มีบทบาทพิเศษในคอมพิวเตอร์ไบนารี แต่สิ่งที่จะทำอย่างไรกับขนาดของก้อน?

2
ฉันจะบัญชี GC เมื่อสร้างเกมด้วย Unity ได้อย่างไร
* เท่าที่ฉันรู้ Unity3D สำหรับ iOS ขึ้นอยู่กับรันไทม์ของโมโนและโมโนมีเพียงเครื่องหมายทั่วไปและการกวาด GC ระบบ GC นี้ไม่สามารถหลีกเลี่ยงเวลา GC ที่หยุดระบบเกมได้ การรวมอินสแตนซ์สามารถลดสิ่งนี้ แต่ไม่สมบูรณ์เนื่องจากเราไม่สามารถควบคุมการสร้างอินสแตนซ์ที่เกิดขึ้นในไลบรารีคลาสพื้นฐานของ CLR อินสแตนซ์ขนาดเล็กและบ่อยครั้งที่ซ่อนอยู่เหล่านั้นจะเพิ่มเวลา GC ที่ไม่ได้กำหนดไว้ในที่สุด การบังคับให้ GC ที่สมบูรณ์เป็นระยะจะทำให้ประสิทธิภาพลดลงอย่างมาก (โมโนสามารถบังคับ GC ที่สมบูรณ์ได้จริงหรือ?) ดังนั้นฉันจะหลีกเลี่ยงเวลา GC นี้ได้อย่างไรเมื่อใช้ Unity3D โดยไม่มีประสิทธิภาพลดลงอย่างมาก

4
การบันทึกไลบรารีสำหรับเกม (c ++) [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน12 เดือนที่ผ่านมา ฉันรู้ไลบรารีการบันทึกจำนวนมาก แต่ไม่ได้ทดสอบมากนัก (GoogleLog, Pantheios, บูสเตอร์ที่กำลังจะมาถึง :: log library ... ) ในเกมโดยเฉพาะในเกมมัลติเพลเยอร์ระยะไกลและเกมมัลติเธรดการบันทึกมีความสำคัญต่อการดีบั๊กแม้ว่าคุณจะลบบันทึกทั้งหมดในตอนท้าย สมมติว่าฉันกำลังสร้างเกมบนพีซี (ไม่ใช่คอนโซล) ที่ต้องการบันทึก (หลายคนและหลายเธรดและ / หรือมัลติโพรเซส) และฉันมีเหตุผลที่ดีในการค้นหาไลบรารีสำหรับการบันทึก (เช่นฉันไม่มีเวลาหรือ ไม่มั่นใจในความสามารถในการเขียนอย่างถูกต้องสำหรับกรณีของฉัน) สมมติว่าฉันต้องการ: ประสิทธิภาพ ใช้งานง่าย (อนุญาตให้สตรีมมิ่งหรือจัดรูปแบบหรืออะไรทำนองนั้น) ความน่าเชื่อถือ (ไม่รั่วไหลหรือผิดพลาด!) ข้ามแพลตฟอร์ม (อย่างน้อย Windows, MacOSX, Linux / Ubuntu) ห้องสมุดบันทึกข้อมูลใดที่คุณอยากจะแนะนำ? ขณะนี้ฉันคิดว่า boost :: log เป็นไฟล์ที่ยืดหยุ่นที่สุด …

5
ฉันจะปรับเอ็นจิ้นการชนได้อย่างมีประสิทธิภาพซึ่งคำสั่งนั้นสำคัญและการชนกันแบบมีเงื่อนไขขึ้นอยู่กับกลุ่มวัตถุ?
หากนี่เป็นครั้งแรกของคุณสำหรับคำถามนี้ฉันขอแนะนำให้อ่านส่วนอัปเดตด้านล่างก่อนจากนั้นส่วนนี้ นี่คือการสังเคราะห์ปัญหาแม้ว่า: โดยพื้นฐานแล้วฉันมีระบบตรวจจับการชนและการแก้ปัญหาด้วยระบบแบ่งพาร์ติชันแบบกริดซึ่งการเรียงลำดับการชนและการชนมีความสำคัญ ร่างกายหนึ่งคนในแต่ละครั้งจะต้องเคลื่อนที่จากนั้นตรวจจับการชนแล้วแก้ไขการชน ถ้าฉันย้ายร่างกายทั้งหมดในครั้งเดียวจากนั้นสร้างคู่การชนกันที่เป็นไปได้มันจะเร็วขึ้นอย่างเห็นได้ชัด แต่ตัวแบ่งความละเอียดเนื่องจากการเรียงลำดับของการชนกันไม่ได้รับการเคารพ ถ้าฉันขยับร่างกายหนึ่งครั้งฉันก็ต้องบังคับให้ร่างกายตรวจสอบการชนและมันจะกลายเป็นปัญหา ^ 2 ใส่กลุ่มในการผสมและคุณสามารถจินตนาการได้ว่าทำไมมันถึงช้ามากอย่างรวดเร็วด้วยร่างกายจำนวนมาก อัปเดต:ฉันทำงานอย่างหนักกับสิ่งนี้ แต่ไม่สามารถจัดการเพื่อเพิ่มประสิทธิภาพอะไรได้เลย ฉันประสบความสำเร็จในการนำ "ภาพวาด" ที่อธิบายโดย Will และเปลี่ยนกลุ่มเป็นบิตเซ็ต แต่มันเป็นการเร่งความเร็วที่น้อยมาก ฉันค้นพบปัญหาใหญ่เช่นกัน: เครื่องยนต์ของฉันขึ้นอยู่กับการชนกันของข้อมูล ฉันพยายามที่มีการใช้งานของคนรุ่นชนคู่ที่ไม่ซ้ำกันซึ่งแน่นอนเพิ่มความเร็วในการทุกอย่างด้วยเป็นจำนวนมาก แต่ยากจนชนการสั่งซื้อของ ให้ฉันอธิบาย: ในการออกแบบดั้งเดิมของฉัน (ไม่สร้างคู่) สิ่งนี้เกิดขึ้น: เคลื่อนไหวร่างกายเดียว หลังจากที่มันเคลื่อนไหวแล้วมันจะรีเฟรชเซลล์และทำให้ร่างกายได้รับการชนกัน หากมันทับร่างกายที่ต้องแก้ไขให้แก้ไขการชนกัน นี่หมายความว่าหากร่างกายเคลื่อนไหวและชนกับกำแพง (หรือร่างกายอื่น ๆ ) เฉพาะร่างกายที่เคลื่อนไหวเท่านั้นที่จะแก้ไขการชนและร่างกายอื่น ๆ จะไม่ได้รับผลกระทบ นี่คือความปรารถนาที่พฤติกรรมของฉัน ผมเข้าใจว่ามันไม่ธรรมดาสำหรับเครื่องยนต์ฟิสิกส์ แต่มันก็มีประโยชน์มากสำหรับสไตล์ย้อนยุคเกม ในการออกแบบกริดปกติ (สร้างคู่ที่ไม่ซ้ำกัน) สิ่งนี้เกิดขึ้น: ทุกสิ่งเคลื่อนไหว หลังจากย้ายวัตถุทั้งหมดแล้วให้รีเฟรชเซลล์ทั้งหมด สร้างคู่การชนกันที่ไม่ซ้ำกัน สำหรับแต่ละคู่จัดการการตรวจจับการชนและความละเอียด ในกรณีนี้การเคลื่อนที่พร้อมกันอาจส่งผลให้มีสองวัตถุซ้อนทับกันและพวกมันจะแก้ไขในเวลาเดียวกัน - สิ่งนี้ทำให้ร่างกาย "ผลักกันอีกรอบ" …

2
เร่งการสร้างพื้นผิวขั้นตอน
เมื่อไม่นานมานี้ฉันเริ่มทำงานกับเกมที่เกิดขึ้นในระบบสุริยจักรวาล หลังจากเส้นโค้งการเรียนรู้เล็กน้อย (โดยที่ไม่เคยทำงานกับ Scala, OpenGL 2 ES หรือ Libgdx มาก่อน) ฉันมีการสาธิตเทคโนโลยีพื้นฐานที่คุณหมุนรอบดาวเคราะห์ที่มีพื้นผิวเดียว: ปัญหาที่ฉันพบคือประสิทธิภาพของการสร้างพื้นผิว ภาพรวมอย่างรวดเร็วของสิ่งที่ฉันทำ: ดาวเคราะห์เป็นลูกบาศก์ที่ได้รับการเปลี่ยนรูปทรงกลม ในแต่ละด้านจะมีการใช้พื้นผิว anxn (เช่น 256 x 256) ซึ่งรวมอยู่ในพื้นผิว 8n xn หนึ่งอันที่ถูกส่งไปยังส่วนย่อย ไม่ได้ใช้ช่องว่างสองอันสุดท้ายพวกเขาอยู่ที่นั่นเพื่อให้แน่ใจว่าความกว้างเท่ากับกำลังงาน 2 พื้นผิวถูกสร้างขึ้นบน CPU ในปัจจุบันโดยใช้อัลกอริธึมเสียงรบกวน simplex เวอร์ชั่น 2012 ที่เชื่อมโยงกับกระดาษ'Simplex เสียง demystified '. ฉากที่ฉันใช้ทดสอบอัลกอริธึมมีสองทรงกลม: ดาวเคราะห์และพื้นหลัง ทั้งสองใช้พื้นผิวแบบ greyscale ซึ่งประกอบด้วยเสียงหกมิติแบบหกเสี้ยวง่ายเช่นถ้าเราเลือก 128x128 เป็นขนาดพื้นผิวมีขนาด 128 x 128 x 6 x 2 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.