博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opengl混合效果
阅读量:4972 次
发布时间:2019-06-12

本文共 4137 字,大约阅读时间需要 13 分钟。

效果如下图:

   

上图为不同画图顺序下混合的出来的效果图 。

源码:

#include 
#include
static int leftFirst = GL_TRUE;static void init(void){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glShadeModel(GL_FLAT); glClearColor(0.0,0.0,0.0,0.0);}static void drawLeft(){ glBegin(GL_TRIANGLES); glColor4f(1.0f,1.0f,0.0f,0.75f); glVertex3f(0.1f,0.9f,0.0f); glVertex3f(0.1f,0.1f,0.0f); glVertex3f(0.7f,0.5,0.0f); glEnd();}static void drawRight(){ glBegin(GL_TRIANGLES); glColor4f(0.0f,1.0f,1.0f,0.75f); glVertex3f(0.9f,0.9f,0.0f); glVertex3f(0.3f,0.5f,0.0f); glVertex3f(0.9f,0.1,0.0f); glEnd();}void display(void){ glClear(GL_COLOR_BUFFER_BIT); if(leftFirst){ drawLeft(); drawRight(); } else{ drawRight(); drawLeft(); } glFlush();}void reshape(int w,int h){ glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w

 例二:

效果图如下:

左图为按下按键a初始效果图;右图为按下r键后物体逐渐互换z轴位置,注意两个效果中混合度跟深度的关系。

源码:

#include 
#include
#define MAXZ 8.0#define MINZ -8.0#define ZINC 0.4static float solidZ = MAXZ;static float transparentZ = MINZ;static GLuint sphereList,cubeList;static void init(void){ GLfloat mat_specular [] ={
1.0,1.0,1.0,0.15}; GLfloat mat_shininess [] ={
100.0}; GLfloat position [] ={
0.5,0.5,1.0,0.0}; glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_POSITION,position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); sphereList = glGenLists(1); glNewList(sphereList,GL_COMPILE); glutSolidSphere(0.4,16,16); glEndList(); cubeList = glGenLists(1); glNewList(cubeList,GL_COMPILE); glutSolidCube(0.6); glEndList();}void display(void){ GLfloat mat_solid [] ={
0.75,0.75,0.0,1.0}; GLfloat mat_zero[] = {
0.0,0.0,0.0,1.0}; GLfloat mat_transparent [] ={
0.0,0.8,0.8,0.6}; GLfloat mat_emission [] ={
0.0,0.3,0.3,0.6}; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(-0.15,-0.15,solidZ); glMaterialfv(GL_FRONT,GL_EMISSION,mat_zero); glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_solid); glCallList(sphereList); glPopMatrix(); glPushMatrix(); glTranslatef(0.15,0.15,transparentZ); glRotatef(15.0,1.0,1.0,0.0); glRotatef(30.0,0.0,1.0,0.0); glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission); glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_transparent); glEnable(GL_BLEND); glDepthMask(GL_FALSE); glBlendFunc(GL_SRC_ALPHA,GL_ONE); glCallList(cubeList); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glPopMatrix(); glutSwapBuffers();}void reshape(int w,int h){ glViewport(0,0,(GLint)w,(GLint)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h){ glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0); }else{ glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void animate(void){ if(solidZ<=MINZ ||transparentZ >= MAXZ) glutIdleFunc(NULL); else{ solidZ-=ZINC; transparentZ+=ZINC; glutPostRedisplay(); }}void keyboard(unsigned char key,int x,int y){ switch(key){ case 'a': case 'A': solidZ = MAXZ; transparentZ = MINZ; glutIdleFunc(animate); break; case 'r': case 'R': solidZ =MAXZ; transparentZ = MINZ; glutPostRedisplay(); break; case 27: exit(0); break; default: break; }}int main(int argc,char **argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(500,500); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutDisplayFunc(display); glutMainLoop(); return 0;}

 

转载于:https://www.cnblogs.com/L-Arikes/p/5342907.html

你可能感兴趣的文章
leetcode【67】-Bulb Switcher
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>
[Voice communications] 声音的滤波
查看>>
SQL语言之概述(一)
查看>>
Learning Cocos2d-x for XNA(2)——深入剖析Hello World
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
[SDOI2008]洞穴勘测
查看>>
Difference between Linearizability and Serializability
查看>>
IDEA使用操作文档
查看>>
UIView
查看>>