游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1866|回复: 3

一些?於OpenGL的???~~!!

[复制链接]

21

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
QQ
发表于 2004-5-30 22:08:00 | 显示全部楼层 |阅读模式
想?有位大哥教我,如何做到像上升??庖?影逊旁卺崦娴?|西扭曲,就是把背景先生成位?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]

18

主题

135

帖子

143

积分

注册会员

Rank: 2

积分
143
发表于 2004-5-31 08:42:00 | 显示全部楼层

Re:一些?於OpenGL的???~~!!

看不懂  帮你顶

1

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2004-5-31 10:56:00 | 显示全部楼层

Re:一些?於OpenGL的???~~!!

可以把屏幕分成一张栅格,这个栅格由一系列矩形组成。改变栅格上点阵的位置,再把背景作为贴图按一一对应的关系贴到这个栅格上

21

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
QQ
 楼主| 发表于 2004-5-31 21:34:00 | 显示全部楼层

Re:一些?於OpenGL的???~~!!

romonosov...
即是如何??
因?槲铱梢哉f是一菜?...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 20:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表