コード例 #1
0
EntityNode* LTree::generate() {
	std::string rule = prop.rules[prop.startRule];

	rule = evalRule(rule, prop.iterations - 1);
	EntityNode *modelData = new EntityNode();
	modelData->vertices = new std::vector<Verts*>();
	
	GLuint woodtex;
	glGenTextures(1, &woodtex);
	glBindTexture(GL_TEXTURE_2D, woodtex);
	int w, h;
	unsigned char *img = SOIL_load_image("Resources/Textures/treebark.jpg", &w, &h, 0, SOIL_LOAD_RGB);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glBindTexture(GL_TEXTURE_2D, 0);
	modelData->drawData.texture = new Texture(woodtex);

	std::vector<CylinderMesh*>* raw = draw(rule);
	for( int i = 0; i < raw->size(); ++i ) {
		Verts *mesh = (*raw)[i]->ExportGLTriangleStrip();
		modelData->vertices->push_back(mesh);
	}

	return modelData;
}
コード例 #2
0
std::string LTree::evalRule(std::string &rule, int iteration) {
	if (iteration > 0) {
		for (std::size_t i = 0; i < rule.length(); ++i) {
			if (prop.rules.count(rule[i])) {
				char key = rule[i];
				rule.replace(i, 1, prop.rules[key]);
				int len = prop.rules[key].length() - 1;
				i += len;
			}
		}
		rule = evalRule(rule, iteration - 1);
	} 
	return rule;
}
コード例 #3
0
ファイル: eval.cpp プロジェクト: FlatIO/faudiostream
/**
 * Evaluates each rule of the list
 */
static Tree	evalRuleList(Tree rules, Tree env)
{
    //cerr << "evalRuleList "<< *rules << " in " << *env << endl;
	if (isNil(rules)) return gGlobal->nil;
	else return cons(evalRule(hd(rules), env), evalRuleList(tl(rules), env));
}