请教如何实现OpenGL背景贴图

请教如何实现OpenGL背景贴图,第1张

如果你想做3d场景的背景,请画背景前先关闭深度测试,不然的话就直接这么写就行.别忘了程序下放一张bmp图片

#include<gl/glut.h>

#define FileName "yh.bmp"

static GLint ImageWidth

static GLint ImageHeight

static GLint PixelLength

static GLubyte* PixelData

#include<stdio.h>

#include<stdlib.h>

void Display()

{

glClear(GL_COLOR_BUFFER_BIT)

glDrawPixels(ImageWidth,ImageHeight,GL_BGR_EXT,GL_UNSIGNED_BYTE,PixelData)

glutSwapBuffers()

}

int main(int argc,char *argv[])

{

FILE* pFile=fopen("yh.bmp","rb")

if(pFile==0)

{

exit(0)

}

fseek(pFile,0x0012,SEEK_SET)

fread(&ImageWidth,sizeof(ImageWidth),1,pFile)

fread(&ImageHeight,sizeof(ImageHeight),1,pFile)

PixelLength=ImageWidth*3

while(PixelLength%4!=0)

++PixelLength

PixelLength*=ImageHeight

PixelData=(GLubyte*)malloc(PixelLength)

if(PixelData==0)

exit(0)

fseek(pFile,54,SEEK_SET)

fread(PixelData,PixelLength,1,pFile)

fclose(pFile)

glutInit(&argc, argv)

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA)

glutInitWindowPosition(100, 100)

glutInitWindowSize(ImageWidth, ImageHeight)

glutCreateWindow(FileName)

glutDisplayFunc(&Display)

glutMainLoop()

}

使用Photoshop软件打开你要处理的图片。

打开图片时图片默认为背景图层。此时应用鼠标双击图层工具栏(一般在右下方)的“背景”二字,将图片放到一个新建的图层上。

上述 *** 作执行完毕后,原来写有“背景”字样的图层会被改写为“图层0”

这时找到最左侧的“魔棒”工具,然后找到上面对应魔棒属性栏中的“容差”输入框调节魔棒的容差。容差越大,魔棒选择的相近颜色范围就会越大。

此时按下键盘上的Delete键,就可以删除魔棒所选择的区域了。适当的调节容差属性,可以更加方便有效地选择要透明化的背景区域。

对于剩下的一些魔棒工具难以处理的情况,可以直接使用工具栏中的矩形选择工具或套索工具进行选定。选定后按下Delete键就可以将所选区域删去了。

如果还有一些不满意的小细节,可以使用放大镜工具放大图片,并将一些顽固的污点用橡皮擦或步骤6中的选择区域手工去掉。

首先你要建一个3D框架相信你己经有了。

接着建一个文件夹,把你要用到的图像放到你的程序文件中。用到纹理 *** 作和加载图像 *** 作:以下是两个主要函数

voidbaisic::Ground()

{

glPushMatrix()

glEnable(GL_TEXTURE_2D)

glBegin(GL_QUADS)

glTexCoord2f(1.0f,1.0f)glVertex3f(-80.0f,0.0f,-80.0f)

glTexCoord2f(0.0f,1.0f)glVertex3f(80.0f,0.0f,-80.0f)

glTexCoord2f(1.0f,0.0f)glVertex3f(-80.0f,0.0f,80.0f)

glTexCoord2f(0.0f,0.0f)glVertex3f(80.0f,0.0f,80.0f)

glDisable(GL_TEXTURE_2D)

glPopMatrix()

}

intbaisic::Load(char*fliename,GLuint&texture)

{

AUX_RGBImageRec*pImage=NULL

pImage=auxDIBImageLoad(fliename)

if(pImage==NULL)

returnfalse

glGenTextures(1,&texture)

glBindTexture(GL_TEXTURE_2D,texture)

gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data)

free(pImage->data)

free(pImage)

returnTRUE

}

至于贴图的角度问题:你用旋转函数glRotatef()函数即可.

窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了;

很久没编写OpenGL程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11919450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存