Tôi đang làm việc trên một dự án tải một số bản dựng cho một plugin gốc mà tôi đã viết cho Unity, để sử dụng tính năng instancing và các tính năng đồ họa tiên tiến khác. Tôi đang phát triển nó cho một bản phát hành đa nền tảng, nhưng tôi làm việc với một máy Mac để thử nghiệm được thực hiện chủ yếu với OpenGL. Tại thời điểm này, các plugin chỉ ám một quad đến trung tâm của màn hình màu với giá trị hex. Plugin này hoạt động như dự kiến trong một dự án Unity trống, nhưng ngay sau khi tôi kết hợp nó vào dự án Oculus của tôi, nó bắt đầu hoạt động thất thường.Native Rendering Plugin với Oculus Rift
Trong Rift, hình dạng của plugin vẽ hai lần, một lần trải dài trên cả hai mắt và một lần vẽ khác chỉ trong giới hạn của mắt phải. Ngoài ra, bất kỳ màu nguyên thủy nào tôi áp dụng cho hình học đều bị mất và hình học xuất hiện để nhận các màu xung quanh; trên một màn hình màu đen với văn bản màu đỏ, hình học sẽ chủ yếu là màu đen với một số chảy máu đỏ vào các dòng. Ngay sau khi địa hình xanh của tôi được tải, hình được vẽ bởi plugin sẽ chuyển sang màu xanh lục.
Dưới đây là một ảnh chụp màn hình của hình học được rút ra trong một dự án Unity trống với không có gì khác:
Và đây là một ảnh chụp màn hình của hình học tương tự được vẽ trên đầu ứng dụng Oculus Rift của tôi:
đây là việc tạo ra các đỉnh mà tôi đang render (ba tọa độ và màu sắc):
Vertex verts[4] =
{
{ -0.5f, 0.5f, 0, 0xFF0000ff },
{ 0.5f, 0.5f, 0, 0xFFff0000 },
{ 0.5f, -0.5f, 0, 0xFF00ff00 },
{ -0.5f, -0.5f, 0, 0xFFff0000 },
};
Dưới đây là các chức năng vẽ, được gọi là mỗi khung trong plugin:
// OpenGL case
if (g_DeviceType == kGfxRendererOpenGL)
{
//initialize model view matrices
glMatrixMode (GL_MODELVIEW);
float modelMatrix[16] =
{
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1,
};
glLoadMatrixf (modelMatrix); //assign our matrix to the current MatrixMode
//initialize projection matrix
glMatrixMode (GL_PROJECTION);
projectionMatrix[10] = 2.0f; //tweak projection matrix to match D3D
projectionMatrix[14] = -1.0f;
glLoadMatrixf (projectionMatrix);
// Vertex layout
glVertexPointer (3, GL_FLOAT, sizeof(verts[0]), &verts[0].x);
glEnableClientState (GL_VERTEX_ARRAY);
glColorPointer (4, GL_UNSIGNED_BYTE, sizeof(verts[0]), &verts[0].color);
glEnableClientState (GL_COLOR_ARRAY);
glDrawArrays(GL_LINE_LOOP, 0, 4);
}
Bất kỳ cái nhìn sâu sắc từ kinh nghiệm bản địa plugin/Rift lập trình đồ họa sẽ được đánh giá!
Tại sao bỏ phiếu bầu? – datenwolf
Lưu ý rằng bạn thường cũng phải đặt chế độ xem trước khi hiển thị. SDK OVR cung cấp một cách rõ ràng một hàm để truy vấn khung nhìn đích trong mục tiêu kết xuất. Hiện tại tôi không có máy tính có quyền truy cập vào kho lưu trữ mật khẩu của mình bằng thông tin đăng nhập dành cho nhà phát triển Oculus, vì vậy tôi không thể liên kết tại tham chiếu – datenwolf
Vì tôi đang làm việc trong Unity, tôi hiện không tung SDK vào mã đã viết của mình ; chỉ cần sử dụng gói tích hợp Oculus và mã hóa trên đầu trang của nó. Trong thực tế, tôi thậm chí không chắc chắn nếu nó có thể truy cập các thuộc tính SDK OVR từ một plugin C++ bên ngoài trong thời gian chạy của Unity.Tôi muốn được mở để thêm Oculus SDK vào plugin của tôi như là một phụ thuộc, nhưng điều đó có vẻ hơi dư thừa, nếu nó sẽ làm việc ở tất cả. – Jyakku