opengl 单色透明
来源:互联网 发布:数据库系统怎么学 编辑:程序博客网 时间:2024/04/28 06:11
先要将图的alpha值设置一下,即将透明的地方先用但一色表示,然后遇到该颜色
则将其alpha值设为1,其他可以保持不变
这样就可以在opengl夏读入了,注意激活融合
关于画树:
void DrawTree()//绘制树
{
/////////////////////////////
/////////画树程序////////////
/////////////////////////////
AUX_RGBImageRec* myimage;
unsigned char *image;
myimage=auxDIBImageLoad("tree1.bmp");
//makeTexture(myimage);
int width,height;
width=myimage->sizeX;
height=myimage->sizeY;
FILE *fp;
fp=fopen("tree1.bmp","rb");
if(!fp) return;
fseek(fp,54,SEEK_SET);////读取24位真彩色位图
image=(unsigned char *)malloc(width*height*3);
int rc;
rc=fread(image,sizeof(unsigned char),width*height*3,fp);
fclose(fp);
BYTE texture[256][256][4];//注意:每个像素占用4个字节,不是原来的3个。
for(int i=0;i<width;i++)
{
for(int j=0;j<height;j++)
{
//把颜色值写入
texture[i][j][0] = (GLubyte)*(image+i*width*3+j*3);
texture[i][j][1] = (GLubyte)*(image+i*width*3+j*3+1);
texture[i][j][2] = (GLubyte)*(image+i*width*3+j*3+2);
//设置alpha值,假设黑色为透明色
if(texture[i][j][0]==0 && texture[i][j][1]==0 && texture[i][j][2]==0)
texture[i][j][3] = 0; //透明,设为 0
else
texture[i][j][3] = 255; //不透明,设为 255, 也就是以后用的1.0
}
}
//映射纹理
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexImage2D(GL_TEXTURE_2D,0,4,width,height,0, GL_RGBA, GL_UNSIGNED_BYTE,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,width,height,GL_RGBA,GL_UNSIGNED_BYTE,texture);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER ,0.5f); //0.5可以换成任何在0~1之间的数
glTranslatef(0.0f,0.0f,-50.0f);
glBegin(GL_QUADS);
glTexCoord2d(0,0);
glVertex3d(-10.0f, -10.0f, 1.0f);
glTexCoord2d(1,0);
glVertex3d(10.0f, -10.0f, 1.0f);
glTexCoord2d(1,1);
glVertex3d(10.0f, 10.0f, 1.0f);
glTexCoord2d(0,1);
glVertex3d(-10.0f, 10.0f, 1.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_BLEND);
}
用图像软件把透明的地方全改成一种单一的颜色,如上面的黑色!
- opengl 单色透明
- OpenGL透明
- OpenGL: 透明
- OpenGL 透明
- opengl 透明
- OpenGL窗体背景透明
- Opengl png 透明
- OpenGL es 透明问题
- OpenGL 融合和透明
- 实现透明位图时对单色位图与颜色位图转换的思考
- 【浅墨Unity3D Shader编程】之十三 单色透明Shader & 标准镜面高光Shader
- Unity3D Shader编程】之十三 单色透明Shader & 标准镜面高光Shader
- OpenGl中使用透明贴图
- android openGL使用透明背景
- OpenGL如何显示透明PNG
- 单色三角形
- 透明立方体有一面没办法透明的解决OpenGL
- [OpenGL] 基于纹理绘制的透明精灵(透明纹理)
- JAVA中的内省
- python编码风格
- JAVA的StringBuffer类
- Xcode 4 Project Refactor小技巧
- js 操作控件disabled,readonly属性
- opengl 单色透明
- DevExpress控件使用大全之GridControl
- e-Commerce Bot Attacks! Learn How To Protect Your Website From Price Scraping
- VS2008错误Error spawning 'cmd.exe'的解决方法
- 关于 initWithNibName 和 loadNibNamed 的区别和联系
- 四大主流CA机构——沃通占据其一
- 11.2.0.4,ASM实例异常宕机,ORA-29740: evicted by instance number 2
- 关于Wamp配置运行中的一些问题
- SQLServer更改sa用户名