¿Cómo detectar colisión en webgl, sin utilizar ninguna biblioteca como three.js?¿Cómo detectar colisión en webgl?
Respuesta
la forma de detectar la colisión en webgl
Usted no lo hace. WebGL, como OpenGL, es solo para dibujar cosas. No maneja una escena, no tiene noción de "objetos" o cosas de alto nivel como colisiones. Se trata de puntos, líneas, triángulos y sombreadores.
Cualquier cosa relacionada con la gestión de escena o las colisiones está fuera del alcance de WebGL (y OpenGL).
¿cómo puedo calcularlo en js? –
@DannyFox: de la misma manera que lo calcularía en cualquier otro idioma: resolviendo las diversas ecuaciones de las pruebas de intersección geométrica y extrayendo las colisiones del resultado. Hay un excelente libro sobre el tema: http://realtimecollisiondetection.net/ – datenwolf
Definitivamente puede resolver la colisión con OpenGL (y probablemente WebGL) mediante el uso de sombreadores. Dale a los objetos diferentes colores y luego combina los dos usando la mezcla. Si hay uno o más píxeles en la imagen resultante que es un color diferente de los dos objetos (por ejemplo, algunos píxeles del objeto se mezclaron con los píxeles de los otros objetos), hay una colisión. – Willem
Un enfoque simple para hacer la detección de colisión de rayos en la GPU. Consulte el siguiente blog sobre el tema.
http://blog.xeolabs.com/ray-picking-in-scenejs
La idea principal es hacer que la escena para una textura (usando una OBF) usando un shader que salva identificadores de los objetos en lugar de color. Entonces puedes hacer una búsqueda muy rápida en esta textura para ver con qué choca un rayo.
Esto solo funciona para probar rayos provenientes del punto de vista o con geometría no ocluida. – datenwolf
Sí, la solución solo funciona con colisión de rayos, pero la pregunta no indicaba qué tipo de detección de colisión se necesitaba. Mi punto es que algunas pruebas de colisión pueden funcionar perfectamente bien en la GPU (pero no es una solución general) – Mortennobel
gracias, pero está en scene.js. Quiero hacerlo sin ninguna biblioteca –
Desde el domingo estoy tratando de resolver el mismo problema. Aunque hay mucha información en www, no pude hacerlo funcionar en mi programa de ejemplo. Tan pronto como lo resuelva, publicaré mi ejemplo aquí.
Mi último intento fue utilizar el puerto glu-unProject para webGL. Éste necesita los siguientes parámetros:
función (Winx, vinoso, winz, modelo, proj, mira, objPos)
He tratado de llamar a esta función directamente de mi función de escena de dibujo para propósitos de prueba.
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 son el lienzo y vista anchura/altura - this.pLastMouse.x & .y son las coordenadas del ratón dentro de la tela
zI.debug(aTest);
pero el resultado es totalmente basura. Supongo que hay varios errores en mi código. Empecé a jugar con WebGL el viernes pasado. No quería darme por vencido tan temprano, pero he resuelto muchos problemas desde entonces, pero este me está volviendo loco.
En OpenGL fue mucho más fácil para mí.
gracias, lo intentaré –
Yo recomendaría la siguiente página web (por desgracia sólo está disponible en alemán) http://www.peter-strohm.de/webgl/webgltutorial8.php
Hemos sido capaces de poner en práctica la detección de colisiones e incluso podía realizar llamadas a la API en el servidor a través de cartografía Identificación (por ejemplo, muestran información sobre herramientas con información adicional para una cierto objeto en la escena).
Espero que esto ayude un poco.
- 1. ¿Cómo detectar colisión en three.js?
- 2. ¿Cómo detectar colisión pero no colisionar en box2d?
- 3. Detectar colisión entre un objeto en movimiento y uno inmóvil
- 4. detección de colisión en cocos2d
- 5. detectar la colisión inicial de dos cuerpos box2d sin colisión continua
- 6. ¿Cómo se usa la colisión basada en círculos con los métodos de colisión grupal en Pygame?
- 7. detección de colisión y colisión de respuesta
- 8. Render WebGL en Xfvb
- 9. WebGL Framework
- 10. ¿Cómo usar múltiples texturas en WebGL?
- 11. colisión Puntos en GJK
- 12. ¿contiene webGL push/popMatrix?
- 13. WebGL Geometry Shader Equivalente?
- 14. JOGL Applets versus WebGL
- 15. colisión del teléfono en "reanudar"
- 16. WebGL crear Textura
- 17. Android webgl concept?
- 18. Webgl gl.viewport cambio
- 19. Cómo convertir código OpenGL a WebGL
- 20. zend: colisión de parámetros
- 21. Colisión basada en mosaico en XNA
- 22. Detección de colisión Chipmunk
- 23. Detección de colisión en el juego Cocos2d?
- 24. Comportamiento de texturas transparentes en WebGL
- 25. grupos de colisión box2d
- 26. Cómo verificar la colisión 2D sin verificar cada objeto
- 27. SHA1 demo de colisión/ejemplo
- 28. ¿Cómo uso texSubImage2D para mostrar sprites en webgl?
- 29. ¿Cómo implementar este túnel como animación en WebGL?
- 30. Asignación eficiente de VBO en WebGL
Esto puede ser difícil de hacer. De todos modos, ¿por qué no quieres una biblioteca para él? –
También soy anti-biblioteca – ajax333221
@ ajax333221 Las bibliotecas hacen nuestra vida mucho más fácil.:) –