I need an approach to draw a 3D fractal tree with modern OpenGL. Any suggestions?
I don’t necessarily require full source code, just an idea how to do it.
What I'm trying to do is to make a 3D tree. In fixed-function OpenGL it's not so difficult to draw a good looking realistic tree, but I don't know how to do it in modern Opengl.
I thought it would be a good idea to use a cylinder model for every branch and use glm
to transform it in the right place and size because in this case I could use the texture coordinates and normals of the model, but I got stuck and I don't know how to do it.
Here is fractal 2D tree made in fixed function OpenGL with recursion. If anyone interested I can send the entire source code.
void drawTree(int currentDepth, int maxDepth)
{
if (currentDepth > maxDepth)
return;
if (currentDepth <= maxDepth - 2)
{
glColor3d(0.45, 0.2, 0.05);
glLineWidth(10 * static_cast<GLfloat>(pow(TREE_FACTOR, currentDepth)));
}
else
{
glColor3d(0, 0.5, 0);
glLineWidth(30 * static_cast<GLfloat>(pow(TREE_FACTOR, currentDepth)));
}
double lineLen = TREE_LINE_BASE_LEN * pow(TREE_FACTOR, currentDepth);
glBegin(GL_LINES);
glVertex2d(0, 0);
glVertex2d(0, lineLen);
glEnd();
int angle1 = 10 + rand() % 40;
int angle2 = 10 + rand() % 40;
glTranslated(0, lineLen, 0);
glRotated(-angle1, 0, 0, 1);
drawTree(currentDepth + 1, maxDepth);
glRotated(angle1 + angle2, 0, 0, 1);
drawTree(currentDepth + 1, maxDepth);
glRotated(-angle2, 0, 0, 1);
glTranslated(0, -lineLen, 0);
}
How can I make something like this in modern OpenGL with VAOs and VBOs and shaders?