2011-11-02 2 views
2

나는 C++을 사용하여 ogre 프로젝트 작업을하고 있습니다. 일반적으로 나는 뷰포트를 사용합니다 : setbackground()하지만 이것은 전체 창을 같은 색으로 만듭니다. 이번에는 각 뷰포트 픽셀에 대해 다른 R, G, B 값을로드하려고합니다. 내 창은 600 * 600이고 각 픽셀에 대해 RGB 값을로드해야합니다. 이 질문을 어떻게 풀 수 있습니까?뷰포트에 접근하기 오우거의 픽셀 값

답변

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(); 

이 예제가 될 수 있습니다 다른 너비, 길이, 형식 등에 대해 일반화됩니다. 더 최적화 된 코드를 사용하여 버퍼 내부의 픽셀을 찾을 수 있습니다. 단지 예입니다.

+0

멋진 코드 부분이지만 전체 텍스처에 대해 동일한 RGB 값이 아닌 텍스처의 각 픽셀마다 다른 RGB 값을 설정하고 싶습니다. 어떻게해야합니까? – barzos

+0

내가 설명한 것은 픽셀 버퍼에 직접 쓰는 방법을 보여주기 때문에 원하는 것을 바꿀 수 있습니다. 이제 좌표를주는 픽셀을 찾고이를 쓰는 방법에 대한 정보를 추가했습니다. –

+0

이 코드에 따르면 각 픽셀에 값을 할당 할 수 없습니다. 먼저 * 빨강, * 파랑 및 * 녹색에 위치 값을 지정합니다. 그 후에 * red에 색상 값을 지정합니다. 즉, 빨간색으로 위치가 사라집니다. 이 부분의 의미는 없습니다. unsigned char * red = data [(x + y * width) * 3]; – barzos