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

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


调用

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);
	}
}

原文地址:https://www.cnblogs.com/wlsandwho/p/4202168.html