วัตถุการเรนเดอร์ DirectX 11 จากภายในสู่ภายนอก

ฉันกำลังดิ้นรนอย่างมากในการพยายามติดตามหนังสือของ Frank Luna เกี่ยวกับการเขียนโปรแกรม DirectX 11 3D และขณะนี้ฉันอยู่ในบทที่ 7 ส่วนที่ 2 ฉันได้นำเข้าไฟล์โมเดล Skull แล้ว และเริ่มเรนเดอร์มันแล้ว สิ่งที่แปลกก็คือตอนที่ฉันกำลังเรนเดอร์ มันดูเหมือนว่าจะเรนเดอร์ใบหน้าด้านหลังมากกว่าใบหน้าหันหน้าไปทางด้านหน้า ฉันค่อนข้างแน่ใจว่านี่เป็นกรณีของสิ่งที่เกิดขึ้น แต่ฉันกำลังตั้งคำถามนี้เพื่อขอความช่วยเหลือและคำแนะนำว่าฉันอาจผิดพลาดตรงไหน ฉันจะแก้ไขโพสต์นี้โดยรวมโค้ดของฉันไว้ด้วยหากจำเป็น เพื่อช่วยฉันค้นหาว่าฉันผิดพลาดตรงไหน ขอบคุณมาก! (แนบรูปถ่าย)

รูปภาพ - หันหน้าไปทางหัวกะโหลก ไปทางซ้ายเล็กน้อย

ภาพถ่าย - เหนือกะโหลกศีรษะ หันหน้าลง

แก้ไข: ฉันได้ตั้งค่าเบรกพอยต์ในโค้ดของฉันหลังจากการวนรอบการโทรครั้งแรก และมันไม่แสดงใบหน้าใด ๆ ที่อยู่ด้านหลังส่วนหน้า ดังนั้นปัญหาได้รับการแก้ไขที่เฟรมนี้ แต่เมื่อฉันไปยังเฟรมถัดไป นี่คือ เมื่อปัญหาเริ่มต้นขึ้น


person Sharpie    schedule 08.09.2017    source แหล่งที่มา
comment
โมเดลนั้นดูเหมือนกันเมื่อคุณแก้ไขมันเป็นการแปลง z (เลื่อนไปไกลกว่านี้) หรือไม่? คุณระบุค่าอะไรสำหรับระนาบใกล้และระนาบไกลของ frustum ของคุณ   -  person Asesh    schedule 08.09.2017
comment
ดูเหมือนว่าคุณได้ตั้งค่าโหมดการเลือกไม่ถูกต้องเมื่อกำหนดค่า คำอธิบายแรสเตอร์ไรเซอร์   -  person user7860670    schedule 08.09.2017
comment
ฉันใช้ XMMatrixLookAtLH ฉันควรใช้ XMMatrixPerspectiveLH หรือไม่   -  person Sharpie    schedule 08.09.2017
comment
@VTT ฉันได้ลองเปลี่ยนคำอธิบายแรสเตอร์ไรเซอร์แล้ว แต่รูปภาพเหล่านั้นเป็นค่าเริ่มต้นโดยไม่มีการเปลี่ยนแปลงสถานะแรสเตอร์ไรเซอร์   -  person Sharpie    schedule 08.09.2017
comment
หลังจากที่คุณสร้างสถานะแรสเตอร์ไรเซอร์แล้ว คุณจะต้องนำไปใช้กับการเรนเดอร์ไปป์ไลน์โดยการเรียก RSSetState ก่อนที่จะวาด mesh สวิตช์โหมดคัดแยกควรมองเห็นได้ชัดเจน ในทางกลับกัน ดูเหมือนว่าจะไม่มีการทดสอบเชิงลึก: เมื่อมองจากด้านบน แนะนำให้คุณวาดกะโหลกศีรษะก่อนแล้วจึงวาดฟันไว้ด้านบน - หากมีการทดสอบเชิงลึก ฟันจะไม่สามารถมองเห็นได้แม้ว่าจะคัดแยกไม่ถูกต้องก็ตาม   -  person user7860670    schedule 08.09.2017
comment
@VTT นั่นคือสิ่งที่ฉันยังไม่ได้ใช้การเรียงลำดับแรสเตอร์ไรเซอร์เพื่อเปลี่ยนกระบวนการแรสเตอร์ไรเซชันเลย รูปภาพเหล่านี้เป็นค่าเริ่มต้นโดยสมบูรณ์ซึ่งสัมพันธ์กับกระบวนการแรสเตอร์   -  person Sharpie    schedule 08.09.2017
comment
ฉันมีบัฟเฟอร์ความลึกที่ตั้งค่าไว้และการเรียกทุกครั้งจะถูกล้างด้วย: mDevContext->ClearDepthStencilView(mDepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);   -  person Sharpie    schedule 08.09.2017
comment
แต่คุณผูกมันอย่างถูกต้องเพื่อให้การทดสอบเชิงลึกใช้งานได้หรือไม่? คุณอาจต้องการดูที่ การกำหนดค่าฟังก์ชันลายฉลุความลึก   -  person user7860670    schedule 08.09.2017


คำตอบ (2)


ปัญหาประเภทนี้บางครั้งอาจเกี่ยวข้องกับการตั้งค่า CullMode ใน D3D11_RASTERIZER_DESC ลองเปลี่ยนจาก D3D11_CULL_BACK เป็น D3D11_CULL_FRONT หรือกลับกัน ดูที่ตัวเลือก FrontCounterClockwise ของ D3D11_RASTERIZER_DESC ด้วย

person nh_    schedule 08.09.2017
comment
ดูรูปผมว่าไม่ใช่เพราะโหมดคัดนะ - person Asesh; 08.09.2017

ฉันรู้แล้วว่าอะไรทำให้ฉันเศร้าโศก ฉันใช้คลาส DirectXToolKits SpriteFont และ SpriteBatch เพื่อใช้ฟังก์ชัน DrawString เพื่อแสดงตัวนับ FPS ที่มุมซ้ายบนของหน้าจอ และมันต้องยุ่งกับการเรียก ID3D11DeviceContext::DrawIndexed ขอบคุณสำหรับข้อมูลและการระดมความคิดของคุณ!!

person Sharpie    schedule 08.09.2017
comment
คุณควรดูที่ wiki เพื่อดูว่าชุดสถานะ SpriteBatch ใด คุณควรตรวจสอบให้แน่ใจว่าได้ตั้งค่าสถานะใดๆ ที่คุณเชื่อถือ และล้างข้อความที่ระบุว่า 'ไม่ชัดเจน' ที่อาจก่อให้เกิดปัญหา - person Chuck Walbourn; 10.09.2017
comment
ขอบคุณสำหรับข้อมูล ฉันกำลังพยายามหาวิธีแก้ปัญหาอยู่ - person Sharpie; 10.09.2017