برنامج OpenGL L-نظام التقديم
سؤال
يا رفاق, لقد حصلت لي الأساسية L-نظام العمل وقررت أن محاولة تحسين تقديم الطلب.في السابق كنت حلقات عبر كامل سلسلة L-نظام التبديل القضية الرسم...والأفضل من ذلك سوف تظهر لك ما كنت أفعله.
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;
};
}
أزلت كل هذا لأنني كنت حرفيا حل شجرة كل إطار واحد ، لقد غيرت هذه الحلقة حتى أنه حفظ كل من verticies في ناقلات الأمراض المنقولة جنسيا.
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;
};
}
الآن لقد غيرت بلدي تقديم حلقة لذلك أنا فقط قراءة مباشرة من ناقلات مجموعة.
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();
الآن مشكلتي هي أنه عندما أنا باستخدام ناقلات مجموعة يمكنني استخدام خط ستيب أنا الحصول على المزيد من القطع الأثرية.الصورة الأولى هو الأصل تقديم هذا غير محسن واحدة ، ثم الثانية هو أحدث تجسيد التي يعمل بشكل أسرع ، و ثلثي هو تقديم التنين المنحنى الذي يستخدم أي دفع الملوثات العضوية الثابتة مثل الأولين تستخدم (أنا متأكد من دفع والبوب حيث المشاكل قادمة).هي المشكلة مع بلدي المنطق هنا تخزين verticies, أو لأن أنا باستخدام خط القطاع ؟ أنا فقط استخدام خطوط ، ولكنها لا تنجح في كل شيء ، فإنه ينتهي يبحث أكثر من line_stipple.أيضا أعتذر عن طول هذا المنصب.
النص البديل http://img197.imageshack.us/img197/8030/bettera.jpg النص البديل http://img23.imageshack.us/img23/3924/buggyrender.jpg النص البديل http://img8.imageshack.us/img8/627/dragoncurve.jpg
المحلول
كنت الحصول على تلك خطوط إضافية لأنك تستخدم LINE_STRIP.
في 'و' حالة دفع كل نقطة نهاية الخط الخاص بك في ناقلات (كما كنت تفعل في الأصل).
_vertexVector.push_back(_prevState.position);
_vertexVector.push_back(_currState.position);
و عند رسم استخدام LINE_LIST بدلا من ذلك.