我有一个体积数据,它的尺寸为 W x H x D,除了包含 1 的小球形体积之外,其他地方都是零。
我编写了着色器来提取该三维体积与由顶点构成的通用对象的“交集”。
顶点着色器
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;
}
片元着色器
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);
}
在OpenGL程序中,我正在从(0,100,0)的眼坐标查看带有几乎球形白色补丁的居中对象,但我希望针对另一个观察者(0,0,0),位于同一视线上的圆球正确被遮挡,以便只发出我在图片中用红色下划线标记的部分。
这是否是射线投射或类似技术的应用?
#version
指令在哪里? - genpfault