如果你想做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程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)