|
想?有位大哥教我,如何做到像上升??庖?影逊旁卺崦娴?|西扭曲,就是把背景先生成位?D後再扭曲...
但?在有一些???...
1. 用gluLookAt(....)可以做到些效果?
2. 把背景扭曲的?程是否如下...
i) 先用gluLookAt(...)
ii) 把??r的?面生成位?D
iii) 在gluLookAt(...)前生成一矩形,?K把位?D扭曲後?上矩形上
<以上?程瞬??韧瓿?gt;
3. 但如果用此?程是否??霈F???(?下?下)?
4. 以下是我在2.ii)中所用的...
CImageCapture.h
class CImageCapture
{
public:
CImageCapture();
virtual ~CImageCapture();
bool CaptureGLBufferToBMP(CString filname,int x, int y, int width, int height);
int WriteBitmapFile(CString filename, int width, int height, unsigned char *imageDate);
};
CImageCapture.cpp
...
CImageCapture::CImageCaptureCapture()
{
}
CImageCapture::~CImageCapture()
{
}
bool CImageCapture::CaptureGLBufferToBMP(CString filename, int x, int y, int widht, int height)
{
void* imageDate=malloc(width*height*3);
memset(imageDate, 0, width*height*3);
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, (unsigned char*)imageDate);
WriteBitmapFile(filename, width, height, (unsigned char*)imageDate);
free(imageDate);
reture true;
}
int CImageCapture::WriteBitmapFile(CString filename, int width, int height, unsigned char *imageDate)
{
FILE *filePtr;
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapInfoHeader;
int imageIdx;
unsigned char tempRGB;
filePtr=fopen(filename,"wb");
if (!filePtr)
return 0;
bitmapFileHeader.bfSize=sizeof(BITMAPFILEHEADER);
bitmapFileHeader.bfType=0x4d42;
bitmapFileHeader.bfReserved1=0;
bitmapFileHeader.bfReserved2=0;
bitmapFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biPlanes=1;
bitmapInfoHeader.biBitCount=24;
bitmapInfoHeader.biSizeImage=width*height*3;
bitmapInfoHeader.biXPelsPerMeter=0;
bitmapInfoHeader.biYPelsPerMeter=0;
bitmapInfoHeader.biClrUsed=0;
bitmapInfoHeader.biClrImportant=0;
bitmapInfoHeader.biWidth=width;
bitmapInfoHeader.biHeight=height;
for (imageIdx=0; imageIdx < bitmapInfoHeader.biSizeImage; imageIdx+=3)
{
tempRGB=imageDate[imageIdx];
imageDate[imageIdx]=imageDate[imageIdx + 2];
imageDate[imageIdx + 2]=tempRGB;
}
fwrite(&bitmapFileHeader, 1, sizeof(BITMAPFILEHEADER), filePtr);
fwrite(&bitmapInfoHeader, 1, sizeof(BITMAPINFOHEADER), filePtr);
fwrite(imageDate, 1, bitmapInfoHeader.biSizImage, filePtr);
fclose(filePtr);
return 1;
}
???.cpp
...
CDC *dc=GetDC();
wglMakeCurrent(dc->m_hDC, m_hRC);
...
BeginWaitCursor();
int viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
bool success=false;
...
success=m_imagecapture.CaptureGLBufferToBMP(filename, viewport[0], viewport[1], viewport[2], viewport[3]);
...
EndWaitCursor();
...
wglMakeCurrent(0, 0);
ReleaseDC(dc);
}
?大家?拖旅?.. [em13] |
|