要检测三维对象上的水平面,请使用OpenGL着色语言或
GLSL
可以使用。
Qt3D material
与一起上课
Qt3D effect
类可用于实现任何自定义glsl代码。一
Q & A
演示如何使用这些类。
要检测三维对象上的水平面并用红色显示,请使用OpenGL的片段明暗器。
二
可以在一个
QT3D
定制材料/效果:
#define FP highp
varying FP vec3 worldNormal;
void main()
{
vec3 n = normalize(worldNormal);
vec3 z = vec3(0.0, 0.0, -1.0); // Normalized already
float zDotN = dot(z, n);
if ( zDotN > 0.7 ) { // 0.7 is my threshold/criterion
vec3 oc = vec3(1.0, 0.0, 0.0); // Use red color!
gl_FragColor = vec4(oc, 1.0);
} else {
vec3 oc = vec3(0.0, 0.0, 1.0); // Use blue color!
gl_FragColor = vec4(oc, 1.0 );
}
}
在上述代码中,
DOT产品
表面
normal
矢量与
(0.0, 0.0, -1.0)
用于确定表面是否水平。
对于OpenGL
三
,将按如下方式修改glsl代码:
#version 150 core
in vec3 worldNormal;
out vec4 fragColor;
void main()
{
vec3 n = normalize(worldNormal);
vec3 z = vec3(0.0, 0.0, -1.0); // Normalized already
float zDotN = dot(z, n);
if ( zDotN > 0.7 ) { // 0.7 is my threshold/criterion
vec3 oc = vec3(1.0, 0.0, 0.0); // Use red color!
fragColor = vec4( oc, 1.0);
} else {
vec3 oc = vec3(0.0, 0.0, 1.0); // Use blue color!
fragColor = vec4( oc, 1.0 );
}
}