PyVista は素晴らしいので、便利なことをたくさんやってみましょう。グリッド線のある平面に 3D オブジェクトの影を落としたいと思います。これが私が望むものです、影を差し引いたものです, shadows=False
,gridlines=True
グリッド線なしで影を有効にできます: gridlines=False
,shadows=True
gridlines=True
しかし、両方を実行しようとshadows=True
すると、以下のように大量のエラー トレースが表示され、上記のような結果が表示されます。シャドウは表示されますが、グリッド ラインは表示されません。
質問: 私がしようとしていることは可能ですか? グリッドとシャドウを誤解しているのですか、コーディングが間違っているのですか、それともバグですか? より多くのグラフィカルエンティティを含む私のより大きなプログラムは、セグメンテーション違反になります。MacOS 10.15.7 で PyVista 0.29.0、Python 3.8.5 を実行しています。に影を付けようとすると、同様の問題が発生しStructuredGrid
ます。
以下は私の最小限のコード例です
import pyvista as pv
import vtk
import numpy as np
# change these values
gridlines = True
shadows = False
plotter = pv.Plotter(polygon_smoothing=True, window_size=(2000,2000))
plotter.disable_parallel_projection()
sphere = pv.Sphere(radius=0.3, center=(0,0,1))
plotter.add_mesh(sphere, ambient=0.2, diffuse=0.5, specular=0.8, specular_power=30,
smooth_shading=True, color='dodgerblue')
# add the grid
grid = pv.Plane(i_size=5, j_size=5)
plotter.add_mesh(grid, show_edges=gridlines, ambient=0, diffuse=0.5, specular=0.8, color='red', edge_color='white')
if shadows:
# do the shadows
shadows = vtk.vtkShadowMapPass()
seq = vtk.vtkSequencePass()
passes = vtk.vtkRenderPassCollection()
passes.AddItem(shadows.GetShadowMapBakerPass())
passes.AddItem(shadows)
seq.SetPasses(passes)
# Tell the renderer to use our render pass pipeline
cameraP = vtk.vtkCameraPass()
cameraP.SetDelegatePass(seq)
plotter.renderer.SetPass(cameraP)
plotter.set_background('white')
plotter.show()
エラー トレース:
(dev) [233 ~...code/RVC3-python/tools] % /Users/corkep/opt/miniconda3/envs/dev/bin/python /Users/corkep/Dropbox/code/RVC3-python/chapter8/pvbug.py
2021-03-11 19:57:38.908 ( 0.621s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b5f90): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:38.908 ( 0.622s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b6840): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:38.908 ( 0.622s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7120): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:38.908 ( 0.622s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7a00): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:38.908 ( 0.622s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b82e0): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:38.990 ( 0.704s) [ 84DF2C] vtkShaderProgram.cxx:452 ERR| vtkShaderProgram (0x7fee29ba49b0): 1: #version 150
2: #ifdef GL_ES
3: #ifdef GL_FRAGMENT_PRECISION_HIGH
4: precision highp float;
5: precision highp sampler2D;
6: precision highp sampler3D;
7: #else
8: precision mediump float;
9: precision mediump sampler2D;
10: precision mediump sampler3D;
11: #endif
12: #define texelFetchBuffer texelFetch
13: #define texture1D texture
14: #define texture2D texture
15: #define texture3D texture
16: #else // GL_ES
17: #define highp
18: #define mediump
19: #define lowp
20: #if __VERSION__ == 150
21: #define texelFetchBuffer texelFetch
22: #define texture1D texture
23: #define texture2D texture
24: #define texture3D texture
25: #endif
26: #endif // GL_ES
27: #define varying in
28:
29:
30: /*=========================================================================
31:
32: Program: Visualization Toolkit
33: Module: vtkPolyDataFS.glsl
34:
35: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
36: All rights reserved.
37: See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
38:
39: This software is distributed WITHOUT ANY WARRANTY; without even
40: the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
41: PURPOSE. See the above copyright notice for more information.
42:
43: =========================================================================*/
44: // Template for the polydata mappers fragment shader
45:
46: uniform int PrimitiveIDOffset;
47:
48:
49:
50: // VC position of this fragment
51: //VTK::PositionVC::Dec
52:
53: // Camera prop
54: uniform int cameraParallel;
55:
56:
57: // optional color passed in from the vertex shader, vertexColor
58: uniform float ambientIntensity; // the material ambient
59: uniform float diffuseIntensity; // the material diffuse
60: uniform float opacityUniform; // the fragment opacity
61: uniform vec3 ambientColorUniform; // ambient color
62: uniform vec3 diffuseColorUniform; // diffuse color
63:
64:
65: // optional surface normal declaration
66: //VTK::Normal::Dec
67:
68: // extra lighting parameters
69: uniform vec3 lightColor0;
70: uniform vec3 lightDirectionVC0; // normalized
71: uniform vec3 lightColor1;
72: uniform vec3 lightDirectionVC1; // normalized
73: uniform vec3 lightColor2;
74: uniform vec3 lightDirectionVC2; // normalized
75: uniform vec3 lightColor3;
76: uniform vec3 lightDirectionVC3; // normalized
77: uniform vec3 lightColor4;
78: uniform vec3 lightDirectionVC4; // normalized
79:
80: uniform float depthC;
81: vec2 calcShadow(in vec4 vert,
82: in sampler2D shadowMap,
83: in mat4 shadowTransform,
84: in float attenuation,
85: in int shadowParallel,
86: in float sNearZ, in float sFarZ)
87: {
88: vec4 shadowCoord = shadowTransform*vert;
89: float expFactor = 8.0;
90: float thickness = 0.0;
91: if(shadowCoord.w > 0.0)
92: {
93: vec2 projected = shadowCoord.xy/shadowCoord.w;
94: if(projected.x >= 0.0 && projected.x <= 1.0
95: && projected.y >= 0.0 && projected.y <= 1.0)
96: {
97: float ldepth = shadowCoord.z;
98: if (shadowParallel == 0) { ldepth = (shadowCoord.w - sNearZ)/(sFarZ - sNearZ); }
99: float depthCExpActual = exp(- depthC*ldepth);
100: float depthCExpBlured = texture2D(shadowMap,projected).r;
101: expFactor = depthCExpBlured * depthCExpActual;
102: float depth = log(depthCExpBlured)/depthC;
103: thickness = clamp(ldepth - depth, 0.0, 1.0)*(sFarZ - sNearZ);
104: if (expFactor > 1.0) { expFactor = 1.0; }
105: }
106: }
107: return vec2(1.0 - attenuation + attenuation*expFactor, thickness);
108: }
109: uniform int shadowParallel0;
110: uniform float shadowNearZ0;
111: uniform float shadowFarZ0;
112: uniform float shadowAttenuation0;
113: uniform sampler2D shadowMap0;
114: uniform mat4 shadowTransform0;
115: uniform int shadowParallel1;
116: uniform float shadowNearZ1;
117: uniform float shadowFarZ1;
118: uniform float shadowAttenuation1;
119: uniform sampler2D shadowMap1;
120: uniform mat4 shadowTransform1;
121: uniform int shadowParallel2;
122: uniform float shadowNearZ2;
123: uniform float shadowFarZ2;
124: uniform float shadowAttenuation2;
125: uniform sampler2D shadowMap2;
126: uniform mat4 shadowTransform2;
127: uniform int shadowParallel3;
128: uniform float shadowNearZ3;
129: uniform float shadowFarZ3;
130: uniform float shadowAttenuation3;
131: uniform sampler2D shadowMap3;
132: uniform mat4 shadowTransform3;
133:
134:
135: // Texture maps
136: //VTK::TMap::Dec
137:
138: // Texture coordinates
139: //VTK::TCoord::Dec
140:
141: // picking support
142: //VTK::Picking::Dec
143:
144: // Depth Peeling Support
145: //VTK::DepthPeeling::Dec
146:
147: // clipping plane vars
148: //VTK::Clip::Dec
149:
150: // the output of this shader
151: out vec4 fragOutput0;
152:
153:
154: // Apple Bug
155: //VTK::PrimID::Dec
156:
157: // handle coincident offsets
158: uniform float cCValue;
159: uniform float cSValue;
160: uniform float cDValue;
161:
162: // Value raster
163: //VTK::ValuePass::Dec
164:
165: void main()
166: {
167: // VC position of this fragment. This should not branch/return/discard.
168: //VTK::PositionVC::Impl
169:
170: // Place any calls that require uniform flow (e.g. dFdx) here.
171: //VTK::UniformFlow::Impl
172:
173: // Set gl_FragDepth here (gl_FragCoord.z by default)
174: float Zdc = gl_FragCoord.z*2.0 - 1.0;
175: float Z2 = -1.0*cDValue/(Zdc + cCValue) + cSValue;
176: float Zdc2 = -1.0*cCValue - cDValue/Z2;
177: gl_FragDepth = Zdc2*0.5 + 0.5;
178:
179:
180: // Early depth peeling abort:
181: //VTK::DepthPeeling::PreColor
182:
183: // Apple Bug
184: //VTK::PrimID::Impl
185:
186: //VTK::Clip::Impl
187:
188: //VTK::ValuePass::Impl
189:
190: vec3 ambientColor = ambientIntensity * ambientColorUniform;
191: vec3 diffuseColor = diffuseIntensity * diffuseColorUniform;
192: float opacity = opacityUniform;
193:
194:
195: // Generate the normal if we are not passed in one
196: //VTK::Normal::Impl
197:
198: vec2 factor0 = vec2(1.0);
199: vec2 factor1 = calcShadow(vertexVC, shadowMap0, shadowTransform0, shadowAttenuation0, shadowParallel0, shadowNearZ0, shadowFarZ0);
200: vec2 factor2 = calcShadow(vertexVC, shadowMap1, shadowTransform1, shadowAttenuation1, shadowParallel1, shadowNearZ1, shadowFarZ1);
201: vec2 factor3 = calcShadow(vertexVC, shadowMap2, shadowTransform2, shadowAttenuation2, shadowParallel2, shadowNearZ2, shadowFarZ2);
202: vec2 factor4 = calcShadow(vertexVC, shadowMap3, shadowTransform3, shadowAttenuation3, shadowParallel3, shadowNearZ3, shadowFarZ3);
203: fragOutput0 = vec4(ambientColor + diffuseColor, opacity);
204: //VTK::Light::Impl
205:
206:
207:
208: //VTK::TCoord::Impl
209:
210: if (fragOutput0.a <= 0.0)
211: {
212: discard;
213: }
214:
215: //VTK::DepthPeeling::Impl
216:
217: //VTK::Picking::Impl
218:
219: // handle coincident offsets
220: //VTK::Coincident::Impl
221: }
ERROR:root:1: #version 150
2021-03-11 19:57:38.991 ( 0.705s) [ 84DF2C] vtkShaderProgram.cxx:453 ERR| vtkShaderProgram (0x7fee29ba49b0): ERROR: 0:199: Use of undeclared identifier 'vertexVC'
ERROR: 0:200: Use of undeclared identifier 'vertexVC'
ERROR: 0:201: Use of undeclared identifier 'vertexVC'
ERROR: 0:202: Use of undeclared identifier 'vertexVC'
ERROR:root:ERROR: 0:199: Use of undeclared identifier 'vertexVC'
2021-03-11 19:57:39.023 ( 0.737s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b5f90): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.023 ( 0.737s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b6840): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.023 ( 0.737s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7120): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.023 ( 0.737s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7a00): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.023 ( 0.737s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b82e0): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.024 ( 0.738s) [ 84DF2C] vtkShaderProgram.cxx:437 ERR| vtkShaderProgram (0x7fee29ba49b0): 1: #version 150
2: #ifndef GL_ES
3: #define highp
4: #define mediump
5: #define lowp
6: #endif // GL_ES
7: #define attribute in
8: #define varying out
9:
10:
11: /*=========================================================================
12:
13: Program: Visualization Toolkit
14: Module: vtkPolyDataVS.glsl
15:
16: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
17: All rights reserved.
18: See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
19:
20: This software is distributed WITHOUT ANY WARRANTY; without even
21: the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
22: PURPOSE. See the above copyright notice for more information.
23:
24: =========================================================================*/
25:
26: in vec4 vertexMC;
27:
28:
29:
30: // frag position in VC
31: //VTK::PositionVC::Dec
32:
33: // optional normal declaration
34: //VTK::Normal::Dec
35:
36: // extra lighting parameters
37: //VTK::Light::Dec
38:
39: // Texture coordinates
40: //VTK::TCoord::Dec
41:
42: // material property values
43: //VTK::Color::Dec
44:
45: // clipping plane vars
46: //VTK::Clip::Dec
47:
48: // camera and actor matrix values
49: uniform mat4 MCDCMatrix;
50:
51: // Apple Bug
52: //VTK::PrimID::Dec
53:
54: // Value raster
55: //VTK::ValuePass::Dec
56:
57: // picking support
58: //VTK::Picking::Dec
59:
60: void main()
61: {
62: //VTK::Color::Impl
63:
64: //VTK::Normal::Impl
65:
66: //VTK::TCoord::Impl
67:
68: //VTK::Clip::Impl
69:
70: //VTK::PrimID::Impl
71:
72: gl_Position = MCDCMatrix * vertexMC;
73:
74:
75: //VTK::ValuePass::Impl
76:
77: //VTK::Light::Impl
78:
79: //VTK::Picking::Impl
80: }
ERROR:root:1: #version 150
2021-03-11 19:57:39.025 ( 0.739s) [ 84DF2C] vtkShaderProgram.cxx:438 ERR| vtkShaderProgram (0x7fee29ba49b0):
WARNING:root:ERROR: In /Users/tjcorona/Development/vtk/source/Rendering/OpenGL2/vtkShaderProgram.cxx, line 438
vtkShaderProgram (0x7fee29ba49b0):
2021-03-11 19:57:39.292 ( 1.006s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b5f90): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.292 ( 1.006s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b6840): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.292 ( 1.006s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7120): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.292 ( 1.006s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b7a00): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.292 ( 1.006s) [ 84DF2C] vtkLightActor.cxx:285 ERR| vtkLightActor (0x7fee299b82e0): not a spotlight.
ERROR:root:not a spotlight.
2021-03-11 19:57:39.293 ( 1.007s) [ 84DF2C] vtkShaderProgram.cxx:437 ERR| vtkShaderProgram (0x7fee29ba49b0): 1: #version 150
2: #ifndef GL_ES
3: #define highp
4: #define mediump
5: #define lowp
6: #endif // GL_ES
7: #define attribute in
8: #define varying out
9:
10:
11: /*=========================================================================
12:
13: Program: Visualization Toolkit
14: Module: vtkPolyDataVS.glsl
15:
16: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
17: All rights reserved.
18: See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
19:
20: This software is distributed WITHOUT ANY WARRANTY; without even
21: the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
22: PURPOSE. See the above copyright notice for more information.
23:
24: =========================================================================*/
25:
26: in vec4 vertexMC;
27:
28:
29:
30: // frag position in VC
31: //VTK::PositionVC::Dec
32:
33: // optional normal declaration
34: //VTK::Normal::Dec
35:
36: // extra lighting parameters
37: //VTK::Light::Dec
38:
39: // Texture coordinates
40: //VTK::TCoord::Dec
41:
42: // material property values
43: //VTK::Color::Dec
44:
45: // clipping plane vars
46: //VTK::Clip::Dec
47:
48: // camera and actor matrix values
49: uniform mat4 MCDCMatrix;
50:
51: // Apple Bug
52: //VTK::PrimID::Dec
53:
54: // Value raster
55: //VTK::ValuePass::Dec
56:
57: // picking support
58: //VTK::Picking::Dec
59:
60: void main()
61: {
62: //VTK::Color::Impl
63:
64: //VTK::Normal::Impl
65:
66: //VTK::TCoord::Impl
67:
68: //VTK::Clip::Impl
69:
70: //VTK::PrimID::Impl
71:
72: gl_Position = MCDCMatrix * vertexMC;
73:
74:
75: //VTK::ValuePass::Impl
76:
77: //VTK::Light::Impl
78:
79: //VTK::Picking::Impl
80: }
ERROR:root:1: #version 150
2021-03-11 19:57:39.294 ( 1.008s) [ 84DF2C] vtkShaderProgram.cxx:438 ERR| vtkShaderProgram (0x7fee29ba49b0):
WARNING:root:ERROR: In /Users/tjcorona/Development/vtk/source/Rendering/OpenGL2/vtkShaderProgram.cxx, line 438
vtkShaderProgram (0x7fee29ba49b0):