Frage

Hey Jungs, ich habe meinen Grund L-System arbeiten bekommen und ich beschlossen, zu versuchen, die Wiedergabe der Anwendung zu optimieren. Zurück i wurde Looping durch die ganze Kette des L-Systems mit einem Schaltergehäuse und Zeichnung ... besser noch zeige ich Ihnen, was ich tat.

for(unsigned int stringLoop = 0; stringLoop < _buildString.length(); stringLoop++)
{

        switch(_buildString.at(stringLoop))
        {
        case'X':
            //Do Nothing
            //X is there just to facilitate the Curve of the plant
            break;
        case'F':

            _prevState = _currState;
            _currState.position += _currState.direction * stdBranchLength; 
            //Set the previous state to the current state
            _graphics.SetColour3f(0.0f, 1.0f, 0.0f);

            _graphics.Begin(OGLFlags::LINE_STRIP);
                _graphics.Vertex3f(_prevState.position.X(), _prevState.position.Y(), _prevState.position.Z());
                _graphics.Vertex3f(_currState.position.X(), _currState.position.Y(), _currState.position.Z());
            _graphics.End();

            break;
        case'[':
            _prevStack.push(_currState);
            break;
        case']':
            _prevState = _currState;
            _currState = _prevStack.top();
            _prevStack.pop();               
            break;
        case'-':

            _currState.direction = _currState.direction.RotatedAboutZ(-(ROTATION) * Math::DegreesToRadians);

            break;
        case'+':
            _currState.direction = _currState.direction.RotatedAboutZ(ROTATION * Math::DegreesToRadians);

            break;
        };

}

ich dies alles entfernt, weil ich buchstäblich den Baum jeden einzelnen Frame-Lösung wurde, ich diese Schleife geändert, so dass sie alle der verticies in einem std Vektor retten würden.

    for(unsigned int stringLoop = 0; stringLoop < _buildString.length(); stringLoop++)
{

        switch(_buildString.at(stringLoop))
        {
        case'X':
            break;
        case'F':

            //_prevState = _currState;
            _currState.position += _currState.direction * stdBranchLength;
            _vertexVector.push_back(_currState.position);

            break;
        case'[':
            _prevStack.push(_currState);
            break;
        case']':
            _currState = _prevStack.top();
            _prevStack.pop();               
            break;
        case'-':            
            _currState.direction = _currState.direction.RotatedAboutZ(-(ROTATION) * Math::DegreesToRadians);
            break;
        case'+':
            _currState.direction = _currState.direction.RotatedAboutZ(ROTATION * Math::DegreesToRadians);
            break;
        };
}

Nun änderte ich meine Schleife machen, damit ich aus der Vektor-Array nur gerade lesen.

    DesignPatterns::Facades::OpenGLFacade _graphics = DesignPatterns::Facades::openGLFacade::Instance();

_graphics.Begin(OGLFlags::LINE_STRIP);
    for(unsigned int i = 0; i < _vertexVector.size(); i++)
    {
        _graphics.Vertex3f(_vertexVector.at(i).X(), _vertexVector.at(i).Y(), _vertexVector.at(i).Z());
    }
_graphics.End();

Nun mein Problem ist, dass wenn ich ein Vektorfeld verwenden und ich verwende Linie Stip i zusätzliche Artefakt zu bekommen. Das erste Bild wird das Original machen, dass das nicht optimierten ist, dann wird die zweite ist die neuere machen, die schneller läuft, und die Terzen ist eine Darstellung von einem Drachen Kurve, die keine Push verwendet und erscheint wie die ersten beiden verwenden (ich bin ziemlich die Push- und Pop-sicher ist, wo die Probleme kommen in). Ist das Problem mit meiner Logik hier zu speichern verticies, oder ist es, weil ich einen Schnurzughauptkörpers verwendet? Ich würde nur Linien verwenden, aber es ist nicht wirklich überhaupt nicht funktioniert, es endet eher einen line_stipple suchen. Auch traurig über die Länge von diesem Beitrag.

alt text http://img197.imageshack.us/img197/8030/bettera .jpg alt text http://img23.imageshack.us/img23/3924/buggyrender.jpg alt text http://img8.imageshack.us/img8/627/dragoncurve.jpg

War es hilfreich?

Lösung

Sie erhalten diese zusätzliche Linien, weil Sie eine LINE_STRIP verwenden.

In Ihrem ‚F‘ Fall, drücken Sie beiden Endpunkte Ihrer Linie in den Vektor (wie Sie ursprünglich taten).

_vertexVector.push_back(_prevState.position);
_vertexVector.push_back(_currState.position);

Und wenn Sie zeichnen, Verwendung LINE_LIST statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top