Opengl es 使用GLSL的透明着色器
我有一个碎片着色器的问题,你可以在下图中看到 我不想渲染图像中的红色部分 我必须通过顺时针和逆时针选择的通道 我得到了法线和相机位置的点积 如果小于0,则设置一个透明片段 否则丢弃碎片 这是着色器Opengl es 使用GLSL的透明着色器,opengl-es,shader,opengl-es-2.0,Opengl Es,Shader,Opengl Es 2.0,我有一个碎片着色器的问题,你可以在下图中看到 我不想渲染图像中的红色部分 我必须通过顺时针和逆时针选择的通道 我得到了法线和相机位置的点积 如果小于0,则设置一个透明片段 否则丢弃碎片 这是着色器 #version 100 precision mediump float; varying float lightDiffuse; void main() { float light = ( 1.0 - lightDiffuse) * 0.5; vec3 lightColor
#version 100
precision mediump float;
varying float lightDiffuse;
void main()
{
float light = ( 1.0 - lightDiffuse) * 0.5;
vec3 lightColor = vec3(0.0,1.0,1.0);
vec3 diffuseColor = lightColor * light ;
vec4 c;
if(lightDiffuse <0.0 )
{
// back faces, opaque
// front faces, very transparent
c = vec4(diffuseColor, 0.2);
}
else
{
discard;
}
gl_FragColor = c;
}
这是材料脚本
material 44267_1508405690_0##carpaint
{
technique
{
pass
{
cull_hardware anticlockwise
scene_blend alpha_blend
vertex_program_ref char_shader2_vs100
{
param_named_auto modelViewProjectionMatrix worldviewproj_matrix
param_named_auto normalMatrix inverse_transpose_world_matrix
param_named_auto modelView worldview_matrix
param_named_auto camera_world_position camera_position
}
fragment_program_ref char_shader2_fs100
{
}
}
pass
{
cull_hardware clockwise
vertex_program_ref char_shader2_vs100
{
param_named_auto modelViewProjectionMatrix worldviewproj_matrix
param_named_auto normalMatrix inverse_transpose_world_matrix
param_named_auto modelView worldview_matrix
param_named_auto camera_world_position camera_position
}
fragment_program_ref char_shader2_fs100
{
}
}
}
}
如果要剔除被遮挡的三角形,请分配深度缓冲区并使用深度测试,这就是它的用途
不要在片段着色器中进行面对面测试,这不是必需的,而且代价非常昂贵,只需启用
GL\u CULL\u FACE
并正确设置正面即可。请注意,并非所有从internet下载的模型都正确,因此您可能有一个输入模型,其中一些三角形的绕组断裂。。。。有什么问题吗?“你说你在做什么,但你没有说你有什么问题。”尼古拉斯在照片中,我看到两张脸重叠。。我想放弃那种效果。。我只是想看看我的眼睛看什么,而不是看到两个面在图像中重叠。您描述的算法仅在顶点的法线为平面法线时有效。如果有平滑网格,则顶点法线不一定与面法线相同。另外,如果一个顶点在多个面上使用,您也会遇到问题。@BDL那么这个问题的解决方案是什么?感谢您的输入,例如,您可以使用几何体着色器并计算真实面法线。或者,由于您只是在模拟背面消隐,请启用真正的背面消隐。
material 44267_1508405690_0##carpaint
{
technique
{
pass
{
cull_hardware anticlockwise
scene_blend alpha_blend
vertex_program_ref char_shader2_vs100
{
param_named_auto modelViewProjectionMatrix worldviewproj_matrix
param_named_auto normalMatrix inverse_transpose_world_matrix
param_named_auto modelView worldview_matrix
param_named_auto camera_world_position camera_position
}
fragment_program_ref char_shader2_fs100
{
}
}
pass
{
cull_hardware clockwise
vertex_program_ref char_shader2_vs100
{
param_named_auto modelViewProjectionMatrix worldviewproj_matrix
param_named_auto normalMatrix inverse_transpose_world_matrix
param_named_auto modelView worldview_matrix
param_named_auto camera_world_position camera_position
}
fragment_program_ref char_shader2_fs100
{
}
}
}
}