나는 C++을 사용하여 ogre 프로젝트 작업을하고 있습니다. 일반적으로 나는 뷰포트를 사용합니다 : setbackground()하지만 이것은 전체 창을 같은 색으로 만듭니다. 이번에는 각 뷰포트 픽셀에 대해 다른 R, G, B 값을로드하려고합니다. 내 창은 600 * 600이고 각 픽셀에 대해 RGB 값을로드해야합니다. 이 질문을 어떻게 풀 수 있습니까?뷰포트에 접근하기 오우거의 픽셀 값
2
A
답변
4
당신은 당신이 할 수있는 배경 설정하려면 :
지금
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");
복사 할 수
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);
는 재료와 질감을 만들고 모든 뷰포트를 채울 사각형을 만들기를 RGB 데이터를 텍스처 프레임 버퍼에 직접 전송 :
texture->getBuffer()->blitFromMemory(PixelBox(600, 600, 1, PF_R8G8B8, (void*) data));
,515,
EDIT 2011-11-10
원시 RGB 데이터를 프레임 버퍼로 유효한 포인터이어야한다. 다음과 같이 초기화 할 수 있습니다.
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;
또는 에 직접 쓰기 텍스쳐 -> getBuffer() (Ogre API: HardwarePixelBuffer)
unsigned char* data = (unsigned char*)texture->getBuffer()->lock();
... pixelbuffer에 직접 쓰기
texture->getBuffer()->unlock();
이 예제가 될 수 있습니다 다른 너비, 길이, 형식 등에 대해 일반화됩니다. 더 최적화 된 코드를 사용하여 버퍼 내부의 픽셀을 찾을 수 있습니다. 단지 예입니다.
멋진 코드 부분이지만 전체 텍스처에 대해 동일한 RGB 값이 아닌 텍스처의 각 픽셀마다 다른 RGB 값을 설정하고 싶습니다. 어떻게해야합니까? – barzos
내가 설명한 것은 픽셀 버퍼에 직접 쓰는 방법을 보여주기 때문에 원하는 것을 바꿀 수 있습니다. 이제 좌표를주는 픽셀을 찾고이를 쓰는 방법에 대한 정보를 추가했습니다. –
이 코드에 따르면 각 픽셀에 값을 할당 할 수 없습니다. 먼저 * 빨강, * 파랑 및 * 녹색에 위치 값을 지정합니다. 그 후에 * red에 색상 값을 지정합니다. 즉, 빨간색으로 위치가 사라집니다. 이 부분의 의미는 없습니다. unsigned char * red = data [(x + y * width) * 3]; – barzos