Cách phát hiện va chạm trong webgl, mà không sử dụng bất kỳ thư viện nào như three.js?Cách phát hiện va chạm trong webgl?
Trả lời
Làm thế nào để phát hiện va chạm trong webgl
Bạn không có. WebGL, như OpenGL chỉ dành cho các công cụ vẽ. Nó không quản lý một cảnh, nó không có khái niệm "đối tượng" hoặc những thứ cấp cao như va chạm. Đó là tất cả về điểm, đường nét, hình tam giác và bóng đổ.
Mọi nội dung liên quan đến quản lý cảnh hoặc xung đột nằm ngoài phạm vi của WebGL (và OpenGL).
thì làm thế nào tôi có thể tính toán nó trong js? –
@DannyFox: Giống như cách bạn muốn tính toán bằng bất kỳ ngôn ngữ nào khác: Bằng cách giải các phương trình kiểm tra giao nhau hình học khác nhau và trích xuất các va chạm từ kết quả. Có một cuốn sách tuyệt vời về chủ đề: http://realtimecollisiondetection.net/ – datenwolf
Bạn chắc chắn có thể giải quyết va chạm với OpenGL (và có thể là WebGL) bằng cách sử dụng trình đổ bóng. Cung cấp cho các đối tượng màu sắc khác nhau và sau đó kết hợp cả hai bằng cách sử dụng pha trộn. Nếu có một hoặc nhiều pixel trên hình ảnh kết quả là một màu khác với hai đối tượng (ví dụ: một số pixel từ đối tượng được pha trộn với các pixel đối tượng khác), có một xung đột. – Willem
Cách tiếp cận đơn giản là phát hiện xung đột tia trên GPU. Kiểm tra bài đăng trên blog sau về chủ đề.
http://blog.xeolabs.com/ray-picking-in-scenejs
Ý tưởng chính là để render hiện trường để một kết cấu (sử dụng một FBO) sử dụng một Shader mà tiết kiệm id đối tượng thay vì màu. Sau đó, bạn có thể nhanh chóng thực hiện tra cứu kết cấu này để xem tia nào va chạm với nhau.
Điều này chỉ hoạt động để kiểm tra các tia phát ra từ điểm nhìn hoặc với hình học không bị che khuất. – datenwolf
Có, giải pháp chỉ hoạt động với xung đột tia, nhưng câu hỏi không nêu rõ loại phát hiện xung đột nào là cần thiết. Điểm của tôi là một vài thử nghiệm va chạm có thể chạy hoàn toàn tốt trên GPU (nhưng nó không phải là một giải pháp chung) – Mortennobel
cảm ơn, nhưng nó nằm trong scene.js. Tôi muốn làm điều đó mà không cần bất kỳ thư viện nào –
Kể từ chủ nhật, tôi đang cố giải quyết cùng một vấn đề. Mặc dù có nhiều thông tin trong www, tôi không thể làm cho nó hoạt động trên chương trình ví dụ của tôi. Ngay sau khi tôi giải quyết nó, tôi sẽ đăng ví dụ của tôi ở đây.
Lần thử cuối cùng của tôi là sử dụng cổng glu-unProject cho webGL. Cái này cần các thông số sau:
function (winx, có mùi rượu, winZ, mô hình, Proj, xem, objPos)
Tôi đã cố gắng để gọi chức năng này trực tiếp từ chức năng cảnh vẽ của tôi cho mục đích thử nghiệm.
var pMatrix = new mat4.ortho(iL, iR, iB, iT, fNearZ, farZ);
var mvMatrix = new mat4.create();
mat4.identity(mvMatrix);
mat4.translate(mvMatrix,[0,0,-40]);
var oMouseMatrix = mat4.create();
mat4.identity(oMouseMatrix);
//Rotate eye :-S
mat4.rotate(oMouseMatrix,((this.fAnimationXAngle/10) * Math.PI)/360.0,[0,1,0]);
mat4.rotate(oMouseMatrix,((this.fAnimationYAngle/10) * Math.PI)/360.0,[1,0,0]);
mat4.multiply(oMouseMatrix, mvMatrix, mvMatrix);
//Rotate model
mat4.rotateX(mvMatrix,this.fRotX * Math.PI/180.0);
mat4.rotateY(mvMatrix,this.fRotY * Math.PI/180.0);
mat4.rotateZ(mvMatrix,this.fRotZ * Math.PI/180.0);
var aTest = this.unProject(
this.pLastMouse.x,
this.pLastMouse.y,
0,
mvMatrix,
pMatrix,
[0,0,this.iWidth,this.iHeight]
);
this.iWidth & this.iHeight là vải và khung nhìn rộng/chiều cao - this.pLastMouse.x & .y là chuột tọa độ bên trong vải
zI.debug(aTest);
Nhưng kết quả là hoàn toàn crap. Tôi đoán có một số lỗi trong mã của tôi. Tôi đã bắt đầu chơi với WebGL vào thứ sáu tuần trước. Tôi không muốn từ bỏ điều đó sớm, nhưng tôi đã giải quyết được nhiều vấn đề từ đó, nhưng điều này khiến tôi phát điên.
Trong openGL nó dễ dàng hơn nhiều với tôi.
cảm ơn, tôi sẽ dùng thử –
Tôi muốn giới thiệu trang web sau (tiếc là chỉ có sẵn bằng tiếng Đức) http://www.peter-strohm.de/webgl/webgltutorial8.php
Chúng tôi đã có thể thực hiện phát hiện va chạm và thậm chí có thể thực hiện cuộc gọi API trên một máy chủ sử dụng bản đồ id (ví dụ như chương trình tooltips với thêm thông tin cho một đối tượng nhất định trong cảnh).
Tôi hy vọng điều này sẽ giúp ích một chút.
- 1. Trình phát hiện va chạm/phát hiện va chạm voxel
- 2. Phát hiện va chạm Javascript
- 3. QuadTree cho phát hiện va chạm 2D
- 4. Phát hiện va chạm liên tục 2D
- 5. Phát hiện va chạm canvas Javascript
- 6. Phát hiện va chạm vòng tròn nhanh
- 7. Làm thế nào để phát hiện va chạm nhưng không va chạm trong box2d?
- 8. Truyền phát Three.js cho phát hiện va chạm
- 9. Phát hiện va chạm trò chơi đua xe 3d
- 10. Mô hình diễn viên và phát hiện va chạm
- 11. Hoạt ảnh tùy chỉnh Delphi - phát hiện va chạm
- 12. C# XNA: Tối ưu hóa việc phát hiện va chạm?
- 13. Trò chơi xếp hình Java - Phát hiện va chạm
- 14. Phát hiện va chạm giữa các quả cầu tăng tốc
- 15. va chạm HG vụ va chạm gấp?
- 16. Phát hiện va chạm ban đầu của hai cơ quan Box2D mà không cần liên tục va chạm
- 17. Mô phỏng n-mô phỏng va chạm 2D (phát hiện va chạm nhanh cho số lượng lớn quả bóng)
- 18. Phát hiện va chạm bằng cách trượt trên mặt phẳng trong XNA
- 19. Va chạm HashSet trong Java
- 20. Phát triển trò chơi trên Android: Phát hiện va chạm Không
- 21. Cách chia nhỏ thế giới trò chơi 2d để phát hiện va chạm tốt hơn
- 22. Box2dweb - Va chạm Contact Point
- 23. Sử dụng đa hình để phát hiện va chạm một cách thanh lịch
- 24. Phát hiện va chạm tam giác đến tam giác trong 3D
- 25. Vấn đề phát hiện va chạm dựa trên pixel với OpenGLES 2.0 trong Android
- 26. CHECKSUM() va chạm trong SQL Server 2005
- 27. zend: va chạm tham số
- 28. Làm thế nào để phát hiện va chạm giữa các đối tượng chuyển động nhanh
- 29. javascript va chạm tên hàm
- 30. Độ phân giải va chạm trong HashMap
Điều này có thể khó thực hiện. Dù sao, tại sao bạn không muốn một thư viện cho mình? –
Tôi cũng chống thư viện – ajax333221
@ ajax333221 Thư viện giúp cuộc sống của chúng ta dễ dàng hơn nhiều.:) –