OpenGL: 透明

代码如下:

#include <gl/glut.h>
#pragma comment(lib, "glut32.lib")

void Initialization()
{
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

	GLfloat lightSpecular[]={1.0, 1.0, 1.0, 1.0};
	GLfloat lightPosition[]={0.5, 0.5, 4.0, 0.0};

	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //指定混合函数
	glShadeModel(GL_SMOOTH);

	glMaterialfv(GL_FRONT, GL_SPECULAR, lightSpecular);
	glMaterialf(GL_FRONT, GL_SHININESS, 100.0);
	glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

	glEnable(GL_BLEND);		//启用混合状态
	glEnable(GL_LIGHTING);		//启用光照
	glEnable(GL_LIGHT0);		//打开光源0
	glEnable(GL_DEPTH_TEST);	//启用深度检测
	glEnable(GL_COLOR_MATERIAL);//材质跟踪当前绘图色
}

void OnDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glPushMatrix();
	{
		glTranslatef(0.0f, 0.0f, -3.0f);
		glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
		glutSolidTorus(1.0f, 2.0f, 30.0f, 30.0f);//绘制圆环
	}
	glPopMatrix();


	glPushMatrix();
	{
		glTranslatef(1.0f, 1.0f, 3.0f);
		glColor4f(0.0f, 1.0f, 0.0f, 0.4f);
		glutSolidSphere(2.0f, 30.0f, 30.0f);//绘制球体
	}
	glPopMatrix();

	glutSwapBuffers();
}

void OnReShape(int w,int h)
{
	glViewport(0, 0, w, h);

	glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式
	glLoadIdentity();

	if (h != 0)
	{
		GLfloat aspect = GLfloat(w) / GLfloat(h);

		if(w < h)
		{
			glOrtho(-6.0f, 6.0f, -6.0f * aspect, 6.0f * aspect, -6.0f, 6.0f);//三维正交投影
		}
		else
		{
			glOrtho(-6.0f / aspect, 6.0f / aspect, -6.0f, 6.0f, -6.0f, 6.0f);
		}
	}
	glMatrixMode(GL_MODELVIEW);

}


void main(int argc,char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(600, 480);
	glutCreateWindow("OpenGL透明");

	glutReshapeFunc(OnReShape);
	glutDisplayFunc(OnDisplay);

	Initialization();

	glutMainLoop();
}

运行效果如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值