¿Necesito usar un buffer de vértice por malla, o puedo almacenar múltiples mallas en un buffer de vértice? Si es así, ¿debería hacerlo y cómo lo haría?¿Múltiples mallas en un buffer de vértice?
Respuesta
Puede almacenar múltiples mallas en un búfer de vértice. Puede obtener algún rendimiento colocando varias mallas pequeñas en un búfer. Para mallas realmente grandes, debe usar almacenamientos intermedios separados. SetStreamSource
le permite especificar el desplazamiento del búfer de vértice para su malla actual.
pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride());
Con OpenGL puede usar glVertexPointer()
para comenzar a dibujar desde un cierto desplazamiento dentro de la VBO. no estoy seguro acerca de D3D.
TBH en general, la razón para ponerlos a todos en un gran búfer es ahorrar en las llamadas al sorteo. El costo de cambiar un buffer de vértice es bastante mínimo. Si puedes unirlos a todos en un buffer de 1 vértice y renderizar 10 objetos en 1 llamada de draw, entonces estás en una gran victoria.
Por lo general, para fusionarlas simplemente creas 1 gran búfer de vértices con todos los datos de vértices, ya transformados en el mundo, uno tras otro. A continuación, configura un búfer de índice que los representa uno tras otro. A continuación, tiene todo lo que dibuja en llamadas de sorteo mínimo. Por supuesto, si mueve una cosa que requiere la actualización de una parte del búfer de vértices, es una situación ideal para la geometría estática.
Si todos los objetos son iguales, solo utilizará 1 búfer de vértice (con 1 definición de objeto) y 1 búfer de índice de todos modos, ¿no? Las matrices mueven o animan el objeto ...
Si todos los objetos son diferentes y se mueven/animan, me quedaría con VBs individuales. Dudo que noten ninguna diferencia al fusionarlos todos juntos.
Bueno, mi experiencia es que no hace mucha diferencia siempre y cuando tus buffers no sean muy pequeños o realmente grandes. Sospecho que cualquier ineficacia en los buffers de conmutación sería igualada por un aumento en la eficiencia al darle al conductor más operaciones para administrar su memoria con buffers más pequeños.
- 1. Servlets de mallas múltiples en un solo web.xml
- 2. OpenGL ES 2.0 múltiples mallas? (solo ejemplos del mundo real)
- 3. Uso de un framebuffer como buffer de vértice sin mover los datos a la CPU
- 4. cómo alinear dos mallas
- 5. ¿Qué son los objetos de matrices vértice?
- 6. Orientación del tetraedro para mallas triangulares
- 7. Flujo máximo - a través de vértice - ¿cómo?
- 8. ¿Cómo obtener la posición absoluta de un vértice en three.js?
- 9. ¿Cómo configuro la opacidad de un vértice en OpenGL?
- 10. ¿Cómo rotar un vértice alrededor de un cierto punto?
- 11. Relectura asincrónica desde el buffer frontal OpenGL usando múltiples PBO
- 12. grafo dirigido con grado de entrada máximo de un vértice
- 13. ¿Cuál es la diferencia entre un vector y un vértice?
- 14. OpenGL ES 2.0 y objetos de búfer de vértice (VBO)
- 15. Cálculo de coordenadas UV planas para mallas arbitrarias
- 16. ¿Qué es un "buffer" en VIM?
- 17. basic openGL, buffers de vértice y pyglet
- 18. ¿Qué sucede si no elimino un Objeto de búfer de vértice cuando mi programa se cierra?
- 19. Buffer circular en Flash
- 20. ¿Es seguro sprintf (buffer, "% s [...]", buffer, [...])?
- 21. Depth Buffer en OpenGL
- 22. ¿qué es un buffer de tienda?
- 23. Grabación de video en un buffer circular en Android
- 24. Almacenar diferentes atributos de vértice en diferentes VBO
- 25. OpenGL 3.x: infracción de acceso al usar el objeto de búfer de vértice y glDrawElements (...)
- 26. Convertir byte [] en Buffer tipo
- 27. Cómo duplicar los controles .NET de buffer en un formulario?
- 28. ¿Cómo prevenir scanf causando un desbordamiento de buffer en C?
- 29. Guardando un buffer de imagen simple a png en C++
- 30. ¿Cómo especifico un buffer de tamaño fijo en C++/CLI?