mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-28 09:47:20 +02:00
[qt6] Add QT6 support for wireframe on nvidia
This commit is contained in:
parent
5a0b1c0c95
commit
5953ed5767
8 changed files with 49 additions and 287 deletions
|
@ -39,7 +39,7 @@ class SimpleFarmSubmitter(BaseSubmitter):
|
|||
# logging.info('REZ: {}'.format(str(r)))
|
||||
v = r.split('-')
|
||||
# logging.info(' v: {}'.format(str(v)))
|
||||
if len(v) == 2:
|
||||
if len(v) >= 2:
|
||||
resolvedVersions[v[0]] = v[1]
|
||||
for p in packages:
|
||||
if p.startswith('~'):
|
||||
|
|
|
@ -55,10 +55,10 @@ Entity {
|
|||
name: "Solid"
|
||||
PropertyChanges { target: m; material: solid }
|
||||
},
|
||||
/* State {
|
||||
State {
|
||||
name: "Wireframe"
|
||||
PropertyChanges { target: m; material: wireframe }
|
||||
}, */
|
||||
},
|
||||
State {
|
||||
name: "Textured"
|
||||
PropertyChanges {
|
||||
|
@ -105,15 +105,11 @@ Entity {
|
|||
}
|
||||
}
|
||||
|
||||
/* WireframeMaterial {
|
||||
WireframeMaterial {
|
||||
id: wireframe
|
||||
objectName: "WireframeMaterial"
|
||||
effect: WireframeEffect {}
|
||||
ambient: root.ambient
|
||||
diffuse: root.diffuseColor
|
||||
shininess: 0
|
||||
specular: root.specular
|
||||
} */
|
||||
}
|
||||
|
||||
SphericalHarmonicsMaterial {
|
||||
id: shMaterial
|
||||
|
|
|
@ -5,10 +5,6 @@ Effect {
|
|||
id: root
|
||||
|
||||
parameters: [
|
||||
Parameter { name: "ka"; value: Qt.vector3d(0.1, 0.1, 0.1) },
|
||||
Parameter { name: "kd"; value: Qt.vector3d(0.7, 0.7, 0.7) },
|
||||
Parameter { name: "ks"; value: Qt.vector3d(0.95, 0.95, 0.95) },
|
||||
Parameter { name: "shininess"; value: 150.0 }
|
||||
]
|
||||
|
||||
techniques: [
|
||||
|
@ -23,17 +19,12 @@ Effect {
|
|||
filterKeys: [ FilterKey { name: "renderingStyle"; value: "forward" } ]
|
||||
|
||||
parameters: [
|
||||
Parameter { name: "light.position"; value: Qt.vector4d(0.0, 0.0, 0.0, 1.0) },
|
||||
Parameter { name: "light.intensity"; value: Qt.vector3d(1.0, 1.0, 1.0) },
|
||||
Parameter { name: "line.width"; value: 1.0 },
|
||||
Parameter { name: "line.color"; value: Qt.vector4d(1.0, 1.0, 1.0, 1.0) }
|
||||
]
|
||||
|
||||
renderPasses: [
|
||||
RenderPass {
|
||||
shaderProgram: ShaderProgram {
|
||||
vertexShaderCode: loadSource(Qt.resolvedUrl("shaders/robustwireframe.vert"))
|
||||
geometryShaderCode: loadSource(Qt.resolvedUrl("shaders/robustwireframe.geom"))
|
||||
fragmentShaderCode: loadSource(Qt.resolvedUrl("shaders/robustwireframe.frag"))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,25 +4,8 @@ import Qt3D.Render 2.6
|
|||
Material {
|
||||
id: root
|
||||
|
||||
property color ambient: Qt.rgba(0.05, 0.05, 0.05, 1.0)
|
||||
property color diffuse: Qt.rgba(0.7, 0.7, 0.7, 1.0)
|
||||
property color specular: Qt.rgba(0.95, 0.95, 0.95, 1.0)
|
||||
property real shininess: 1.0
|
||||
property real lineWidth: 0.8
|
||||
property color lineColor: Qt.rgba(0.2, 0.2, 0.2, 1.0)
|
||||
property vector3d lightIntensity: Qt.vector3d(0.7, 0.7, 0.7)
|
||||
property vector4d lightPosition: Qt.vector4d(0.0, 0.0, 0.0, 1.0)
|
||||
|
||||
effect: WireframeEffect {}
|
||||
|
||||
parameters: [
|
||||
Parameter { name: "ka"; value: Qt.vector3d(root.ambient.r, root.ambient.g, root.ambient.b) },
|
||||
Parameter { name: "kd"; value: Qt.vector3d(root.diffuse.r, root.diffuse.g, root.diffuse.b) },
|
||||
Parameter { name: "ksp"; value: Qt.vector3d(root.specular.r, root.specular.g, root.specular.b) },
|
||||
Parameter { name: "shininess"; value: root.shininess },
|
||||
Parameter { name: "line.width"; value: root.lineWidth },
|
||||
Parameter { name: "line.color"; value: root.lineColor },
|
||||
Parameter { name: "light.intensity"; value: root.lightIntensity },
|
||||
Parameter { name: "light.position"; value: root.lightPosition }
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,112 +1,17 @@
|
|||
#version 330 core
|
||||
#version 450
|
||||
|
||||
uniform struct LightInfo {
|
||||
vec4 position;
|
||||
vec3 intensity;
|
||||
} light;
|
||||
#extension GL_NV_fragment_shader_barycentric : require
|
||||
|
||||
uniform struct LineInfo {
|
||||
float width;
|
||||
vec4 color;
|
||||
} line;
|
||||
|
||||
uniform vec3 ka; // Ambient reflectivity
|
||||
uniform vec3 kd; // Diffuse reflectivity
|
||||
uniform vec3 ks; // Specular reflectivity
|
||||
uniform float shininess; // Specular shininess factor
|
||||
|
||||
in WireframeVertex {
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
noperspective vec4 edgeA;
|
||||
noperspective vec4 edgeB;
|
||||
flat int configuration;
|
||||
} fs_in;
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
vec3 adsModel( const in vec3 pos, const in vec3 n )
|
||||
{
|
||||
// Calculate the vector from the light to the fragment
|
||||
vec3 s = normalize( vec3( light.position ) - pos );
|
||||
|
||||
// Calculate the vector from the fragment to the eye position (the
|
||||
// origin since this is in "eye" or "camera" space
|
||||
vec3 v = normalize( -pos );
|
||||
|
||||
// Calculate the diffus component
|
||||
vec3 diffuse = vec3( max( dot( s, n ), 0.0 ) );
|
||||
|
||||
// Calculate the specular component
|
||||
vec3 specular = vec3(0.0, 0.0, 0.0);
|
||||
if(shininess > 0)
|
||||
{
|
||||
// Refleft the light beam using the normal at this fragment
|
||||
vec3 r = reflect( -s, n );
|
||||
vec3( pow( max( dot( r, v ), 0.0 ), shininess ) );
|
||||
}
|
||||
|
||||
// Combine the ambient, diffuse and specular contributions
|
||||
return light.intensity * ( ka + kd * diffuse + ks * specular );
|
||||
}
|
||||
|
||||
|
||||
vec4 shadeLine( const in vec4 color )
|
||||
{
|
||||
// Find the smallest distance between the fragment and a triangle edge
|
||||
float d;
|
||||
if ( fs_in.configuration == 0 )
|
||||
{
|
||||
// Common configuration
|
||||
d = min( fs_in.edgeA.x, fs_in.edgeA.y );
|
||||
d = min( d, fs_in.edgeA.z );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Handle configuration where screen space projection breaks down
|
||||
// Compute and compare the squared distances
|
||||
vec2 AF = gl_FragCoord.xy - fs_in.edgeA.xy;
|
||||
float sqAF = dot( AF, AF );
|
||||
float AFcosA = dot( AF, fs_in.edgeA.zw );
|
||||
d = abs( sqAF - AFcosA * AFcosA );
|
||||
|
||||
vec2 BF = gl_FragCoord.xy - fs_in.edgeB.xy;
|
||||
float sqBF = dot( BF, BF );
|
||||
float BFcosB = dot( BF, fs_in.edgeB.zw );
|
||||
d = min( d, abs( sqBF - BFcosB * BFcosB ) );
|
||||
|
||||
// Only need to care about the 3rd edge for some configurations.
|
||||
if ( fs_in.configuration == 1 || fs_in.configuration == 2 || fs_in.configuration == 4 )
|
||||
{
|
||||
float AFcosA0 = dot( AF, normalize( fs_in.edgeB.xy - fs_in.edgeA.xy ) );
|
||||
d = min( d, abs( sqAF - AFcosA0 * AFcosA0 ) );
|
||||
}
|
||||
|
||||
d = sqrt( d );
|
||||
}
|
||||
|
||||
// Blend between line color and phong color
|
||||
float mixVal;
|
||||
if ( d < line.width - 1.0 )
|
||||
{
|
||||
mixVal = 1.0;
|
||||
}
|
||||
else if ( d > line.width + 1.0 )
|
||||
{
|
||||
mixVal = 0.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
float x = d - ( line.width - 1.0 );
|
||||
mixVal = exp2( -2.0 * ( x * x ) );
|
||||
}
|
||||
|
||||
return mix( color, line.color, mixVal );
|
||||
}
|
||||
layout(location = 0) out vec4 fragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Calculate the color from the phong model
|
||||
vec4 color = vec4( adsModel( fs_in.position, normalize( fs_in.normal ) ), 1.0 );
|
||||
fragColor = shadeLine( color );
|
||||
vec3 barycentric = gl_BaryCoordNV;
|
||||
|
||||
float mindist = min(min(barycentric.x, barycentric.y), barycentric.z);
|
||||
|
||||
if (mindist < 0.05)
|
||||
{
|
||||
fragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,131 +0,0 @@
|
|||
#version 330 core
|
||||
|
||||
layout( triangles ) in;
|
||||
layout( triangle_strip, max_vertices = 3 ) out;
|
||||
|
||||
in EyeSpaceVertex {
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
} gs_in[];
|
||||
|
||||
out WireframeVertex {
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
noperspective vec4 edgeA;
|
||||
noperspective vec4 edgeB;
|
||||
flat int configuration;
|
||||
} gs_out;
|
||||
|
||||
uniform mat4 viewportMatrix;
|
||||
|
||||
const int infoA[] = int[]( 0, 0, 0, 0, 1, 1, 2 );
|
||||
const int infoB[] = int[]( 1, 1, 2, 0, 2, 1, 2 );
|
||||
const int infoAd[] = int[]( 2, 2, 1, 1, 0, 0, 0 );
|
||||
const int infoBd[] = int[]( 2, 2, 1, 2, 0, 2, 1 );
|
||||
|
||||
vec2 transformToViewport( const in vec4 p )
|
||||
{
|
||||
return vec2( viewportMatrix * ( p / p.w ) );
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
gs_out.configuration = int(gl_in[0].gl_Position.z < 0) * int(4)
|
||||
+ int(gl_in[1].gl_Position.z < 0) * int(2)
|
||||
+ int(gl_in[2].gl_Position.z < 0);
|
||||
|
||||
// If all vertices are behind us, cull the primitive
|
||||
if (gs_out.configuration == 7)
|
||||
return;
|
||||
|
||||
// Transform each vertex into viewport space
|
||||
vec2 p[3];
|
||||
p[0] = transformToViewport( gl_in[0].gl_Position );
|
||||
p[1] = transformToViewport( gl_in[1].gl_Position );
|
||||
p[2] = transformToViewport( gl_in[2].gl_Position );
|
||||
|
||||
if (gs_out.configuration == 0)
|
||||
{
|
||||
// Common configuration where all vertices are within the viewport
|
||||
gs_out.edgeA = vec4(0.0);
|
||||
gs_out.edgeB = vec4(0.0);
|
||||
|
||||
// Calculate lengths of 3 edges of triangle
|
||||
float a = length( p[1] - p[2] );
|
||||
float b = length( p[2] - p[0] );
|
||||
float c = length( p[1] - p[0] );
|
||||
|
||||
// Calculate internal angles using the cosine rule
|
||||
float alpha = acos( ( b * b + c * c - a * a ) / ( 2.0 * b * c ) );
|
||||
float beta = acos( ( a * a + c * c - b * b ) / ( 2.0 * a * c ) );
|
||||
|
||||
// Calculate the perpendicular distance of each vertex from the opposing edge
|
||||
float ha = abs( c * sin( beta ) );
|
||||
float hb = abs( c * sin( alpha ) );
|
||||
float hc = abs( b * sin( alpha ) );
|
||||
|
||||
// Now add this perpendicular distance as a per-vertex property in addition to
|
||||
// the position and normal calculated in the vertex shader.
|
||||
|
||||
// Vertex 0 (a)
|
||||
gs_out.edgeA = vec4( ha, 0.0, 0.0, 0.0 );
|
||||
gs_out.normal = gs_in[0].normal;
|
||||
gs_out.position = gs_in[0].position;
|
||||
gl_Position = gl_in[0].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
// Vertex 1 (b)
|
||||
gs_out.edgeA = vec4( 0.0, hb, 0.0, 0.0 );
|
||||
gs_out.normal = gs_in[1].normal;
|
||||
gs_out.position = gs_in[1].position;
|
||||
gl_Position = gl_in[1].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
// Vertex 2 (c)
|
||||
gs_out.edgeA = vec4( 0.0, 0.0, hc, 0.0 );
|
||||
gs_out.normal = gs_in[2].normal;
|
||||
gs_out.position = gs_in[2].position;
|
||||
gl_Position = gl_in[2].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
// Finish the primitive off
|
||||
EndPrimitive();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Viewport projection breaks down for one or two vertices.
|
||||
// Calculate what we can here and defer rest to fragment shader.
|
||||
// Since this is coherent for the entire primitive the conditional
|
||||
// in the fragment shader is still cheap as all concurrent
|
||||
// fragment shader invocations will take the same code path.
|
||||
|
||||
// Copy across the viewport-space points for the (up to) two vertices
|
||||
// in the viewport
|
||||
gs_out.edgeA.xy = p[infoA[gs_out.configuration]];
|
||||
gs_out.edgeB.xy = p[infoB[gs_out.configuration]];
|
||||
|
||||
// Copy across the viewport-space edge vectors for the (up to) two vertices
|
||||
// in the viewport
|
||||
gs_out.edgeA.zw = normalize( gs_out.edgeA.xy - p[ infoAd[gs_out.configuration] ] );
|
||||
gs_out.edgeB.zw = normalize( gs_out.edgeB.xy - p[ infoBd[gs_out.configuration] ] );
|
||||
|
||||
// Pass through the other vertex attributes
|
||||
gs_out.normal = gs_in[0].normal;
|
||||
gs_out.position = gs_in[0].position;
|
||||
gl_Position = gl_in[0].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
gs_out.normal = gs_in[1].normal;
|
||||
gs_out.position = gs_in[1].position;
|
||||
gl_Position = gl_in[1].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
gs_out.normal = gs_in[2].normal;
|
||||
gs_out.position = gs_in[2].position;
|
||||
gl_Position = gl_in[2].gl_Position;
|
||||
EmitVertex();
|
||||
|
||||
// Finish the primitive off
|
||||
EndPrimitive();
|
||||
}
|
||||
}
|
|
@ -1,21 +1,39 @@
|
|||
#version 330 core
|
||||
#version 450 core
|
||||
|
||||
in vec3 vertexPosition;
|
||||
in vec3 vertexNormal;
|
||||
layout(location = 0) in vec3 vertexPosition;
|
||||
|
||||
out EyeSpaceVertex {
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
} vs_out;
|
||||
layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
|
||||
mat4 viewMatrix;
|
||||
mat4 projectionMatrix;
|
||||
mat4 uncorrectedProjectionMatrix;
|
||||
mat4 clipCorrectionMatrix;
|
||||
mat4 viewProjectionMatrix;
|
||||
mat4 inverseViewMatrix;
|
||||
mat4 inverseProjectionMatrix;
|
||||
mat4 inverseViewProjectionMatrix;
|
||||
mat4 viewportMatrix;
|
||||
mat4 inverseViewportMatrix;
|
||||
vec4 textureTransformMatrix;
|
||||
vec3 eyePosition;
|
||||
float aspectRatio;
|
||||
float gamma;
|
||||
float exposure;
|
||||
float time;
|
||||
float yUpInNDC;
|
||||
float yUpInFBO;
|
||||
};
|
||||
|
||||
uniform mat4 modelView;
|
||||
uniform mat3 modelViewNormal;
|
||||
uniform mat4 mvp;
|
||||
layout(std140, binding = 1) uniform qt3d_command_uniforms {
|
||||
mat4 modelMatrix;
|
||||
mat4 inverseModelMatrix;
|
||||
mat4 modelViewMatrix;
|
||||
mat3 modelNormalMatrix;
|
||||
mat4 inverseModelViewMatrix;
|
||||
mat4 modelViewProjection;
|
||||
mat4 inverseModelViewProjectionMatrix;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
vs_out.normal = normalize( modelViewNormal * vertexNormal );
|
||||
vs_out.position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
|
||||
|
||||
gl_Position = mvp * vec4( vertexPosition, 1.0 );
|
||||
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4( vertexPosition, 1.0 );
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ Item {
|
|||
// Available render modes
|
||||
readonly property var renderModes: [ // Can't use ListModel because of MaterialIcons expressions
|
||||
{"name": "Solid", "icon": MaterialIcons.crop_din },
|
||||
/* {"name": "Wireframe", "icon": MaterialIcons.details }, */
|
||||
{"name": "Wireframe", "icon": MaterialIcons.details },
|
||||
{"name": "Textured", "icon": MaterialIcons.texture },
|
||||
{"name": "Spherical Harmonics", "icon": MaterialIcons.brightness_7}
|
||||
]
|
||||
|
|
Loading…
Add table
Reference in a new issue