volumen trabajar que plastico plastica perspectivas para forma expresion expresan espacio elementos elemento con composicion como artistica artes arte actividades c++ opengl graphics 3d raycasting

c++ - trabajar - Representación del volumen 3D y oclusión de múltiples puntos de vista



perspectivas que expresan volumen en el espacio (2)

¿Es esta una aplicación de raycasting o similar?

Este es, en esencia, el algoritmo de sombra de trazado de rayos: una vez que ha golpeado una superficie (visible) con su rayo de visión, toma ese punto como punto de origen para un trazo hacia el otro punto (una fuente de luz o lo que sea) y si puede llegar a ese punto (sin) "chocar" con otra cosa, use esa información como una entrada adicional en los cálculos de renderizado.

Tengo datos volumétricos `W x H x D ''que son cero en todas partes excepto en pequeños volúmenes esféricos que contienen 1.

Escribí el sombreador para extraer la "intersección" de ese volumen 3D con un objeto genérico compuesto por vértices.

Vertex Shader

varying vec3 textureCoordinates; uniform float objectSize; uniform vec3 objectTranslation; void main() { vec4 v=gl_Vertex; textureCoordinates= vec3( ((v.xz-objectTranslation.xz)/objectSize+1.0)*0.5, ((v.y-objectTranslation.y)/objectSize+1.0)*0.5); gl_Position = gl_ModelViewProjectionMatrix*v; }

Fragmento shader

varying vec3 textureCoordinates; uniform sampler3D volumeSampler; void main() { vec4 uniformColor = vec4(1.0,1.0,0.0,1.0); //it''s white if ( textureCoordinates.x <=0.0 || textureCoordinates.x >= 1.0 || textureCoordinates.z <= 0.0 || textureCoordinates.z >= 1.0) gl_FragColor =vec4(0.0,0.0,0.0,1.0); //Can be uniformColor to color again the thing else gl_FragColor = uniformColor*texture3D(volumeSampler, textureCoordinates); }

En el programa OpenGL, estoy mirando el objeto centrado con esas manchas casi esféricas de blanco desde (0,100,0) coordenadas del ojo, pero quiero que para otro espectador (0,0,0) las esferas que se encuentran en la misma línea de visión está ocluida correctamente, de modo que solo se emiten las partes que subrayé en rojo en la imagen.

¿Es esta una aplicación de raycasting o similar?


Parece que lo que desea es la eliminación de oclusiones, tiene dos opciones principales para implementar la eliminación de oclusiones

Uso de consultas de oclusión GPU

Básicamente, se trata de preguntar al hardware si se extraerá o no un determinado fragmento si no se puede sacrificar el objeto.

Las consultas de oclusión cuentan la cantidad de fragmentos (o muestras) que pasan la prueba de profundidad, que es útil para determinar la visibilidad de los objetos.

Este algoritmo es más complejo de lo que se puede explicar aquí, aquí hay un excelente artículo de Nvidia sobre el tema.

Uso de CPU Ray Raying

Esto es simplemente verificar cada objeto (o posiblemente su volumen delimitador), si un rayo golpea el objeto, posiblemente oculte otros objetos detrás de él. Los objetos deben clasificarse espacialmente usando Octree o BSP Tree, por lo que no terminará revisando cada objeto y solo comprobará los objetos cerca de la cámara.

Para obtener más información sobre las técnicas de sacrificio, consulte mi respuesta aquí .