के बिना OpenGL में किसी अन्य के शीर्ष पर एक पंक्ति को कैसे आकर्षित करें मुझे निम्न समस्या है। जबकि glPolygonOffset
मेष के लिए पूरी तरह से काम करता है, उदाहरण के लिए जब मैं ऑब्जेक्ट के शीर्ष पर वायरफ़्रेम रूपरेखा खींचने की कोशिश कर रहा हूं, तो यह सरल रेखाओं के लिए काम नहीं करता है।जेड-फाइटिंग
यहाँ कैसे यह meshes के लिए काम करता है:
// draw object
mTexture.enableAndBind();
gl::color(Colorf(1, 1, 1));
gl::draw(mVboMesh);
mTexture.unbind();
// overlay wireframe
gl::enableWireframe();
glLineWidth(1);
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-1, -1);
glColor3f(0, 0, 1);
gl::draw(mVboMesh);
glDisable(GL_POLYGON_OFFSET_LINE);
gl::disableWireframe();
किसी कारण यह लाइनों के लिए काम नहीं करता है। जो मैं प्राप्त करने की कोशिश कर रहा हूं वह एक ग्रिड पर एक समन्वय फ्रेम के तीर खींचना है। मैं उसी GL_POLYGON_OFFSET_LINE
मोड का उपयोग कर रहा हूं जब मैं लाइनों को चित्रित कर रहा था, जैसे कि मैं ऑब्जेक्ट पर वायरफ़्रेम के लिए कर रहा था। हालांकि इस मामले में glPolygonOffset(-1, -1);
बिल्कुल कोई फर्क नहीं पड़ता है। मैंने इसे 100 जैसे विशाल मूल्यों से आजमाया है और यह वही है। बिल्कुल कोई प्रभाव नहीं।
// enable 3D rendering
gl::enable(GL_CULL_FACE);
gl::enableDepthRead();
gl::enableDepthWrite();
// drawing the grid
int size = 2000;
int step = 25;
gl::color(Colorf(0.2f, 0.2f, 0.2f));
for(float i = -size; i <= size; i += step)
{
glBegin(GL_LINES);
glVertex3f(i, 0, -size);
glVertex3f(i, 0, size);
glVertex3f(-size, 0, i);
glVertex3f(size, 0, i);
glEnd();
}
// drawing the arrows
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-1, -1);
glBegin(GL_LINES);
gl::color(Colorf(1, 0, 0));
glVertex3f(0, 0, 0);
glVertex3f(100, 0, 0);
gl::color(Colorf(0, 1, 0));
glVertex3f(0, 0, 0);
glVertex3f(0, 100, 0);
gl::color(Colorf(0, 0, 1));
glVertex3f(0, 0, 0);
glVertex3f(0, 0, 100);
glEnd();
glDisable(GL_POLYGON_OFFSET_LINE);
// disable 3D rendering
gl::disableDepthWrite();
gl::disableDepthRead();
gl::disable(GL_CULL_FACE);
और Z- फ़ाइटिंग मैं का एक उदाहरण:
एक हैक मैं कोशिश की है और क्या पूरी तरह से काम किया है:
यहाँ मैं क्या कर रहा है- अक्षम गहराई पढ़ा, सक्षम गहराई लिखने
- ड्रा ग्रिड
- ड्रा तीर
- गहराई पढ़
- अन्य वस्तुओं
हालांकि यह एक बहुत ही विशेष मामला है और जब तक यह एक फ्लैट ग्रिड और तीर के लिए काम करता है, इसके साथ कुछ और काफी कुछ भी के लिए काम नहीं करेगा आकर्षित करने के लिए सक्षम एक जटिल आकार।
मेरे प्रश्न हैं:
- क्यों glPolygonOffset लाइनों-लाइनों पर के लिए काम नहीं करता है, जबकि यह लाइनों-ऑन-बहुभुज के लिए काम करता है?
- उपरोक्त हैक का उपयोग किए बिना, मैं इसे कैसे ठीक कर सकता हूं, केवल विशिष्ट मामलों में क्या काम करता है?
// मैं एक ढांचे के रूप में भस्म का उपयोग कर रहा है, लेकिन जब से मैं कच्चे ओपन उपयोग कर रहा हूँ इससे कोई फर्क नहीं करना चाहिए आदेश
अद्यतन
मैं जवाब देख लिया है पहली टिप्पणी में, और उस विधि को भी आजमाया, हालांकि कोई भी काम नहीं करता है, क्योंकि परिणाम कैमरे से दूरी पर निर्भर करता है।
//// draw coordinate frame and grid
glDepthRange (0.01, 1.0);
drawGrid(2000.0f, 25.0f);
glDepthRange (0.0, 0.99);
gl::drawCoordinateFrame(100.0f, 5.0f, 2.0f);
glDepthRange (0.0, 1.0);
// draw object
लाइनों के साथ [glpolygonOffset() बग के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2020451/glpolygonoffset-bugs-with- लाइनों) – genpfault