Sahnede birkaç nesnem var ve A nesnesinin y = 10 (en yüksek nesne) olduğunu belirtsem bile, TOP kamerasından alt nesneleri A nesnesinden görebilirsiniz. benim sahnemden bir görüntü. Çekme sırası nesnelerin konumunu derinlemesine etkiler mi? (resimler dahil)
Ve ancak bugün
Ben modeller sırası önemli çizmek ilginç özelliği bulunan, yanlış olabilir. İşte "ship1" çekme sırasını değiştirdiğim başka bir resim, dikkat: "ship1" yolumun körüklügüdür, eğership1.draw();
önce yaparsam, gemi kaybolur (dogru), ama
ship1.draw();
nihayetinde yaparsam üst (yanlış).
video: Opengl Depth Problem video
- Q1) çizim sırası her zaman önemli mi?
- S2) Bunu nasıl düzeltirim, kamera pozisyonunu her değiştirdiğimde çizim düzenini değiştirmeliyim?
Düzenleme: Ben de sadece benim projeksiyon Matrix IT'S değil sorun emin olmak için, glm kütüphanesi ile Perspektif Projeksiyon dersimde karşılaştırdı. Her şey doğru.
Edit1: Ben git benim projem var: Arkanoid git repository (VS yüklü olan pencereler, proje herhangi bir bilgisayardan çalıştırmak için hazırdır)
Edit2
: Ben kullanım normaller veya doku istemezsin. Sadece köşe ve endeksler.Edit3: sahnede her nesne aynı dosyadan (pay) köşeleri kullanıyorsa bir sorun var mı?
Edit4: Ayrıca Perspektif Projeksiyonu değerlerini de değiştirdim. Ben 0.0f yakın düzlem vardı, şimdi yakın 20.0f ve uzak = 500.0f, açı = 60º var. Ama hiçbir şey değişmez, görüş derinliği değil, ama yapar. =/
Edit5: İşte benim Vertex ve Fragment shader'larım.
Edit6: her zaman buradayım, buradayım bütün gün buradayım, bana bir şey sorun. Şu anda tüm projeyi sıfırdan yeniden yazıyorum. İyi işleyen iki küp var, biri diğerinin önünde. Zaten benim için mayın sınıfını ekledim: kamera, projeksiyonlar, gölgelendiriciler için işleyici. Nesneleri oluşturan ve çizen sınıfa taşıma.
// Vertex shader
in vec4 in_Position;
out vec4 color;
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Projection;
void main(void)
{
color = in_Position;
gl_Position = Projection * View * Model * in_Position;
}
// Fragment shader
#version 330 core
in vec4 color;
out vec4 out_Color;
void main(void)
{
out_Color = color;
}
Bazı kod: Sana sorunu başka bir yerde bulunduğu olmadığını görmek bağladığınız deposunu klonlamışlar
void setupOpenGL() {
std::cerr << "CONTEXT: OpenGL v" << glGetString(GL_VERSION) << std::endl;
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
glDepthRange(0.0, 1.0);
glClearDepth(1.0);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
}
void display()
{
++FrameCount;
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
renderScene();
glutSwapBuffers();
}
void renderScene()
{
wallNorth.draw(shader);
obstacle1.draw(shader);
wallEast.draw(shader);
wallWest.draw(shader);
ship1.draw(shader);
plane.draw(shader);
}
Derinlik tamponunuz var mı? Derinlik testi etkin mi? –
Evet. Her kareden önce bunu yapıyorum: 'GlClearColor (0.1f, 0.1f, 0.1f, 1.0f); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Daha sonra, programın başında bir kez çalıştırıyorum: 'glEnable (GL_DEPTH_TEST); \t glDepthFunc (GL_LEQUAL); \t glDepthMask (GL_TRUE); \t glDepthRange (0.0, 1.0); \t glClearDepth (1.0); ' –
Ve glutInitDisplayMode()' öğesine iletilen bayraklarda GLUT_DEPTH öğesini ekleyerek bir derinlik arabelleği istediniz? –