mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-21 23:01:45 +08:00
ovis: add updateTexture function and allow grayscale texture format
This commit is contained in:
@@ -281,6 +281,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices,
|
|||||||
* @param segments number of segments per side
|
* @param segments number of segments per side
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1));
|
CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* updates an existing texture
|
||||||
|
*
|
||||||
|
* A new texture can be created with @ref createPlaneMesh
|
||||||
|
* @param name name of the texture
|
||||||
|
* @param image the image data
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void updateTexture(const String& name, InputArray image);
|
||||||
//! @}
|
//! @}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,11 +31,28 @@ WindowScene::~WindowScene() {}
|
|||||||
|
|
||||||
void _createTexture(const String& name, Mat image)
|
void _createTexture(const String& name, Mat image)
|
||||||
{
|
{
|
||||||
|
PixelFormat format;
|
||||||
|
switch(image.type())
|
||||||
|
{
|
||||||
|
case CV_8UC4:
|
||||||
|
format = PF_BYTE_BGRA;
|
||||||
|
break;
|
||||||
|
case CV_8UC3:
|
||||||
|
format = PF_BYTE_BGR;
|
||||||
|
break;
|
||||||
|
case CV_8UC1:
|
||||||
|
format = PF_BYTE_L;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CV_Error(Error::StsBadArg, "currently only CV_8UC1, CV_8UC3, CV_8UC4 textures are supported");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
TextureManager& texMgr = TextureManager::getSingleton();
|
TextureManager& texMgr = TextureManager::getSingleton();
|
||||||
TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME);
|
TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME);
|
||||||
|
|
||||||
Image im;
|
Image im;
|
||||||
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, PF_BYTE_BGR);
|
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, format);
|
||||||
|
|
||||||
if (tex)
|
if (tex)
|
||||||
{
|
{
|
||||||
@@ -323,7 +340,7 @@ public:
|
|||||||
|
|
||||||
void setBackground(InputArray image)
|
void setBackground(InputArray image)
|
||||||
{
|
{
|
||||||
CV_Assert(image.type() == CV_8UC3, bgplane);
|
CV_Assert(bgplane);
|
||||||
|
|
||||||
String name = sceneMgr->getName() + "_Background";
|
String name = sceneMgr->getName() + "_Background";
|
||||||
|
|
||||||
@@ -770,5 +787,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v
|
|||||||
if(!set)
|
if(!set)
|
||||||
CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str()));
|
CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateTexture(const String& name, InputArray image)
|
||||||
|
{
|
||||||
|
CV_Assert(_app);
|
||||||
|
TexturePtr tex = TextureManager::getSingleton().getByName(name, RESOURCEGROUP_NAME);
|
||||||
|
CV_Assert(tex);
|
||||||
|
_createTexture(name, image.getMat());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user