颜色透明例子

 

#include <windows.h>  // Header File For Windows
#include <stdio.h>   // Header File For Standard Input/Output
#include <gl\gl.h>   // Header File For The OpenGL32 Library
#include <gl\glu.h>   // Header File For The GLu32 Library
#include <gl\glaux.h>
#include <GL/glut.h>

#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glaux.lib")
void CreatWindow (void)
{
 auxInitDisplayMode (AUX_RGB);
 auxInitPosition (0,0,400,400);
 auxInitWindow ("半透明");
}
 
void myinit(void)
{   
 glEnable(GL_BLEND);   
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);   
 glShadeModel(GL_FLAT);   
 glClearColor(1.0, 1.0, 1.0, 0.0);
}
void CALLBACK display(void)
{   
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);    
 glColor4f(1.0, 0.0, 0.0, 0.3);
 glTranslatef(-0.4,-0.4,0.0);
 glRectf(0.0, 0.0,1.0, 1.0);    
 glColor4f(0.0, 1.0, 0.0, 0);
 glTranslatef(0.4,0.4,0.0);
 glRectf(0.0, 0.0, 1.0, 1.0);
 glColor4f(0.0, 0.0, 1.0, 0.3);
 glTranslatef(0.30,0.30,0.0);
 glRectf(0.0, 0.0, 1.0, 1.0);
 glFlush();
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{   
 glViewport(0, 0, w, h);   
 glMatrixMode(GL_PROJECTION);   
 glLoadIdentity();   
 if (w <= h)        
  glOrtho (-4,4,4,-4,8,-8);   
 else        
  glOrtho (4,-4,-4,4,-8,8);   
}
void main()
{
 CreatWindow();
  myinit();
    auxReshapeFunc(myReshape);
 auxMainLoop(display);
}

### 实现MATLAB中的颜色透明效果 在MATLAB中,可以通过多种方式来设置图形对象的颜色透明度。对于不同类型的图形对象,实现透明效果的方法也有所不同。 #### 使用`Alpha`属性控制面和线条的透明度 对于大多数二维和三维形状(如矩形、圆形等),可以直接通过设置其 `FaceAlpha` 或者 `EdgeAlpha` 属性来调整透明程度[^4]: ```matlab h = rectangle('Position',[2 4 2 2],'Curvature',[1 1]); set(h, 'FaceColor', [0.5 0.75 1], 'FaceAlpha', 0.5); ``` 这段代码创建了一个半径为单位长度的蓝色椭圆,并将其填充色设为了部分不透明的状态。 #### 图像数据的透明处理 当涉及到图像文件特别是PNG格式时,如果希望保留或修改其中某些区域的透明性,则需利用 `AlphaData` 属性[^5]。下面的例子展示了如何读取带有alpha通道的信息并应用到显示过程中: ```matlab img = imread('peppers.png'); if size(img,3)==4 % 如果存在 alpha 通道 imshow(uint8(img)); else img_alpha = cat(3,img(:,:,1),img(:,:,2),img(:,:,3),ones(size(img(:,:,1)))); imshow(uint8(img_alpha)); end ``` 此段脚本检查输入图片是否有预定义好的alpha值;如果没有的话,默认赋予全白即完全可见状态给每一个像素点作为新的第四维数组元素加入原RGB矩阵之中形成RGBA模式再予以呈现。 #### 自定义颜色条的多级色彩过渡 针对更复杂的场景下想要获得平滑变化而非仅限于两端端点间的简单线性插值情况下的渐变效果,在构建自定义colormap的基础上还可以进一步细化中间层次从而达到理想中的视觉表现力[^1]: ```matlab nColors = 256; red = linspace(1,0,nColors)'; green = zeros(nColors,1); blue = linspace(0,1,nColors)'; customMap = [red green blue]; colormap(customMap); [X,Y,Z] = peaks; surf(X,Y,Z,'EdgeColor','none') shading interp colorbar ``` 上述实构造了一张由红至蓝逐渐转变且包含大量细分等级的新映射表应用于表面绘制当中,使得最终渲染出来的结果具备细腻而丰富的色调转换特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值