Beispiel #1
0
void CFeatureDrawer::DrawFadeFeaturesSet(std::set<CFeature*>& fadeFeatures, int modelType)
{
	for (std::set<CFeature*>::const_iterator fi = fadeFeatures.begin(); fi != fadeFeatures.end(); ) {
		std::set<CFeature*>::const_iterator fiNext(fi); fiNext++;

		const float cols[] = {1.0f, 1.0f, 1.0f, (*fi)->tempalpha};

		if (modelType == MODELTYPE_S3O) {
			glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cols);
		}

		// hack, sorting objects by distance would look better
		glAlphaFunc(GL_GREATER, (*fi)->tempalpha / 2.0f);
		glColor4fv(cols);

		if (!DrawFeatureNow(*fi)) {
			fadeFeatures.erase(*fi);
			fi = fiNext;
		} else {
			fi++;
		}
	}
}
void CFeatureDrawer::DrawOpaqueFeatures(int modelType)
{
	FeatureRenderBin& featureBin = opaqueModelRenderers[modelType]->GetFeatureBinMutable();

	FeatureRenderBin::iterator featureBinIt;
	FeatureSet::iterator featureSetIt;

	for (featureBinIt = featureBin.begin(); featureBinIt != featureBin.end(); ++featureBinIt) {
		if (modelType != MODELTYPE_3DO) {
			texturehandlerS3O->SetS3oTexture(featureBinIt->first);
		}

		FeatureSet& featureSet = featureBinIt->second;

		for (featureSetIt = featureSet.begin(); featureSetIt != featureSet.end(); ) {
			if (!DrawFeatureNow(featureSetIt->first)) {
				featureSetIt = set_erase(featureSet, featureSetIt);
			} else {
				++featureSetIt;
			}
		}
	}
}