读书笔记——添加光照之后再应用纹理贴图以保证镜面亮点

辅助镜面颜色:在纹理贴图之后再应用镜面亮点。(通过加法而不是乘法。)


调用

glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);

想要恢复则调用

glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR);

void SetupRC()
{
	glClearColor(fLowLight[0],fLowLight[1],fLowLight[2],fLowLight[3]);
	
	glClearStencil(0);
	glStencilFunc(GL_EQUAL,0x0,0x1);
	glStencilOp(GL_INCR,GL_INCR,GL_INCR);

	glCullFace(GL_BACK);
	glFrontFace(GL_CCW);
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);
	glEnable(GL_MULTISAMPLE_ARB);

	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);

	glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);//<-------就是这一句啦

	glLightModelfv(GL_LIGHT_MODEL_AMBIENT,fNoLight);
	glLightfv(GL_LIGHT0,GL_AMBIENT,fLowLight);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,fBrightLight);
	glLightfv(GL_LIGHT0,GL_SPECULAR,fBrightLight);

	m3dGetPlaneEquation(mPlaneEquation,vPlanePoints[0],vPlanePoints[1],vPlanePoints[2]);
	m3dMakePlanarShadowMatrix(mShadowEquation,mPlaneEquation,fLightPos);

	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
	glMaterialfv(GL_FRONT,GL_SPECULAR,fBrightLight);
	glMateriali(GL_FRONT,GL_SHININESS,128);

	for (GLint i=0;i<nNumSpheres;i++)
	{
		Sphere[i].SetOrigin(((float)((rand() % 400) - 200) * 0.1f), 0.0, (float)((rand() % 400) - 200) * 0.1f);
	}

	glEnable(GL_TEXTURE_2D);
	glGenTextures(nNumTexture,unTexturesObj);
	glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
	for (GLint i=0;i<nNumTexture;i++)
	{
		GLbyte *pBytes;
		GLint iWidth, iHeight, iComponents;
		GLenum eFormat;
		glBindTexture(GL_TEXTURE_2D,unTexturesObj[i]);
		pBytes=gltLoadTGA(szTextures[i],&iWidth,&iHeight,&iComponents,&eFormat);
		gluBuild2DMipmaps(GL_TEXTURE_2D,iComponents,iWidth,iHeight,eFormat,GL_UNSIGNED_BYTE,pBytes);
		free(pBytes);

		glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
		glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
		glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值