在食人魔中访问视口像素值
access viewport pixel values in ogre
我正在用c++做一个食人魔项目。通常我使用viewport:setbackground(),但这会导致整个窗口相同的颜色。这次我想为每个视口的像素加载不同的R, G, B值。我的窗口是600*600,我必须为每个像素加载RGB值。如何解决这个问题?
如果你想设置一个背景,你可以这样做:
创建一个矩形填充整个viewport
Rectangle2D* rect = new Rectangle2D(true);
rect->setCorners(-1.0, 1.0, 1.0, -1.0);
rect->setRenderQueueGroup(RENDER_QUEUE_BACKGROUND);
rect->setBoundingBox(AxisAlignedBox(-100000.0 * Vector3::UNIT_SCALE, 100000.0 * Vector3::UNIT_SCALE));
SceneNode * node = sceneManager->createChildSceneNode("Background");
node->attachObject(rect);
创建材质和纹理
TexturePtr texture = TextureManager::getSingleton().createManual("BackgroundTex", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, 600, 600, 0, PF_R8G8B8, TU_DYNAMIC_WRITE_ONLY_DISCARDABLE);
MaterialPtr material = MaterialManager::getSingleton().create("BackgroundMat", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
Technique* technique = material->createTechnique();
technique->createPass();
technique->getPass(0)->setLightingEnabled(false);
technique->getPass(0)->createTextureUnitState("BackgroundTex");
rect->setMaterial("BackgroundMat");
现在你可以直接复制RGB数据到texture framebuffer:
texture->getBuffer()->blitFromMemory(PixelBox(600, 600, 1, PF_R8G8B8, (void*) data));
编辑2011-11-10
data必须是指向原始RGB的framebuffer的有效指针。你可以初始化它:
unsigned char* data = new unsigned char[600 * 600 * 3];
然后将黄色直接写入x,y位置的像素
unsigned char* red = &data[(x + y * width) * 3];
unsigned char* blue = &data[(x + y * width) * 3 + 1];
unsigned char* green = &data[(x + y * width) * 3 + 2];
*red = 255;
*blue = 0;
*green = 255;
或者直接写入texture->getBuffer() (Ogre API: HardwarePixelBuffer)
unsigned char* data = (unsigned char*)texture->getBuffer()->lock();
…直接写入pixelbuffer…
texture->getBuffer()->unlock();
这个例子可以推广到其他宽度,长度,格式等…您可以使用更优化的代码来查找缓冲区内的像素,这只是一个示例。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- C++win32 API创建多个类似视口的窗口
- 如何从SDL_Surface获取特定像素的颜色
- 使用C++在Qt3D中创建多个视口时出现问题
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 可视化 如何获取图像中像素的颜色(以C++ (sfml) 为单位)
- 可视化/保存大量像素
- Opencv Mat的可视化像素
- 像素到网格可视化
- 基于像素的3D可视化
- 在食人魔中访问视口像素值