Hi, Yeah, the GL stuff doesn't use the same colour maps as the 2D images. I can't see any documentation on the shaders ( http://www.pyqtgraph.org/documentation/3dgraphics/glmeshitem.html) that are used to colour the surface. Looking at the code under shaders.py does help though. For the "heightColor" shader, the 9 numbers in the array that are used (as in the Surface Plot example) are variables used in a formula to compute the RGB colour.
>From comment in code: ## colors fragments by z-value. ## This is useful for coloring surface plots by height. ## This shader uses a uniform called "colorMap" to determine how to map the colors: ## red = pow(z * colorMap[0] + colorMap[1], colorMap[2]) ## green = pow(z * colorMap[3] + colorMap[4], colorMap[5]) ## blue = pow(z * colorMap[6] + colorMap[7], colorMap[8]) ## (set the values like this: shader['uniformMap'] = array([...]) I assume the output RGB values are expressed as a range from 0 to 1. So to tweak the example to work with ranges from say zmin to zmax, I think something like: p4.shader()['colorMap'] = np.array([0.2*(zmax - zmin), 2 - zmin, 0.5, 0.2*(zmax - zmin), 1 - zmin, 1, 0.2*(zmax - zmin), 0 - zmin, 2]) Patrick On Saturday, 27 April 2019 00:55:42 UTC+9:30, Mostafa wrote: > > Hi Partick, > > It works well when we set the following parameters for the > GLSurfacePlotItem: > > computeNormals=False, smooth=False > > > However, I have a problem with the colorMap since the default mapping > seems to be for data which is in [-1,1]. I have to change the mapping for > an arbitrary data range since in general, I do not know the range but I can > retrieve it when the code runs. I looked to the documentation for the > colorMap > <http://www.pyqtgraph.org/documentation/widgets/imageview.html?highlight=colormap#pyqtgraph.ImageView.setColorMap> > > but I barely understood how to define it and set in GLSurfacePlotItem. > Besides, I want to add x,y axes which are fixed and they are necessary for > getting meaning to the surface plot. Any recommendations will be > appreciated. > > Best, > Mostafa > > > On Tuesday, April 23, 2019 at 11:44:41 PM UTC-4, Patrick wrote: >> >> Hi, >> >> I don't use the 3D capabilities of pyqtgraph, but the example under 3D >> Graphics/Surface Plot ( >> https://github.com/pyqtgraph/pyqtgraph/blob/develop/examples/GLSurfacePlot.py) >> >> has an animated 3D surface that looks to be rendering at 100+ FPS on my >> machine. Does that help? Otherwise if you can post a minimum working >> example then we might be able to suggest some ideas. >> >> Patrick >> >> On Tuesday, 23 April 2019 13:27:59 UTC+9:30, Mostafa wrote: >>> >>> Hello, >>> >>> My eventual goal is to have a surface like the one that Matlab has for >>> plotting a 2D array of size N by M. For my application, M and N are not >>> greater than 256, so the greatest matrix I have has less than 100K entries. >>> However, I could not find a remedy for the slow updating of the >>> GLSurfacePlotItem. Basically, as the human eye perception is limited, the >>> frame update speed should be around 25-30 frame per second. Besides, the >>> surface plot is much far away from the nice representation in Matlab where >>> the plot has x and y axes with an option to add a colorbar to show the >>> color code values. There should be tricks to speed up the process similar >>> to the suggestion for 2D plot to disable autoscale in order to update the >>> graph much faster. >>> >>> Any idea? >>> >>> Best regards, >>> Mostafa >>> >>> >> -- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/98de2679-65fa-4add-ade8-9ef412745124%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
