Tôi đã xem các hướng dẫn trong SDK DirectX. Hướng dẫn 5 hoạt động tốt, nhưng sau khi tôi đã sao chép và tách mã thành các lớp của riêng tôi, tôi đã gặp lỗi lạ khi khởi chạy ứng dụng của mình.Tai nạn sau m = XMMatrixIdentity() - bộ nhớ aligment trong lớp học?
Dòng là:
g_World1 = XMMatrixIdentity();
Do đó, tôi đã nhận lỗi trong điều hành xnamathmatrix.int = trông như thế:
XMFINLINE _XMMATRIX& _XMMATRIX::operator=
(
CONST _XMMATRIX& M
)
{
r[0] = M.r[0];
r[1] = M.r[1];
r[2] = M.r[2];
r[3] = M.r[3];
return *this;
}
Và thông báo lỗi là:
Access violation reading location 0xffffffff
Tôi đã đọc ở đâu đó có thể do một thứ gì đó được kết nối với XMFLOAT4X4/XMMATRIX:
Bạn đã cân nhắc sử dụng XMFLOAT4X4 để lưu trữ ma trận và chỉ sử dụng XMMATRIX?
Nhưng tôi nghĩ rằng tôi đã sử dụng XMMATRIX.
MyClass.h:
private:
XMMATRIX g_World1;
MyClass.cpp:
void init(){
g_World1 = XMMatrixIdentity();
}
Tôi không nghĩ rằng tôi nên thay đổi XMMATRIX g_World1; để XMFLOAT4X4 g_World1, vì nó tạo ra các lỗi như:
lỗi C2679: nhị phân '=': không có nhà điều hành tìm thấy trong đó có một toán hạng bên phải của loại 'XMMATRIX' (hoặc không có chuyển đổi có thể chấp nhận)
Vì vậy, vấn đề là gì?
Có lẽ đó là một câu hỏi ngu ngốc nhưng làm thế nào để đạt được nó? Tôi đã tạo ra một ma trận struct có chứa bốn ma trận (xem, thế giới, vv) nhưng làm thế nào để 'cho phép cấu trúc thành viên liên kết bởi 16 byte' cho nó? – PolGraphic
Đối với VStudio: Thuộc tính dự án -> Thuộc tính cấu hình -> C/C++ -> Mã thế hệ -> Cấu trúc liên kết bộ nhớ -> chọn 16 có –
Đối với GCC có một "__attribute__ ((aligned (16)))" cho cấu trúc –