Mengapa koordinat z digunakan pada strip segitiga terbuka gl

Saya baru saja mulai menggunakan openGL yang saya pelajari sendiri dari sebuah buku. Dalam buku saya, saya diberitahu untuk membuat paha depan menggunakan strip segitiga karena lebih efisien. Buku ini menggunakan simpul-simpul ini untuk membuat segi empat.

    vertices.push_back(-0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(0.0f);

    vertices.push_back(0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(0.0f);

    vertices.push_back(-0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(-1.0f);

    vertices.push_back(0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(-1.0f);

Saya tidak mengerti mengapa sumbu z tidak konstan, sepertinya sumbu z harus tetap konstan dan sumbu y harus berubah untuk membuat tampilan persegi dalam 2d. Saya tidak mengerti mengapa sumbu z digunakan.

Ini sisa kodenya

Untuk memuat simpul dalam buffer

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertices.size(), &vertices[0], GL_STATIC_DRAW);

Untuk menampilkan persegi

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 5.0, 0.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);

Meskipun saya tidak memahaminya, kotak tersebut masih ditampilkan dengan benar, jadi pasti berfungsi.


person Popgalop    schedule 01.12.2013    source sumber


Jawaban (2)


Agar sebuah segiempat masuk akal, keempat titik harus terletak pada sebuah bidang. Tidak harus berupa bidang dengan z=const. Jika Anda melihat simpul-simpul tersebut, Anda mungkin menemukan bahwa y selalu bernilai 0 untuk ketiga titik tersebut, sehingga segi empat didefinisikan pada bidang xz. Anda juga dapat melihat bahwa kamera ditempatkan pada (0, 5, 0,1), melihat ke bawah ke titik asal, jadi menggunakan bidang xz memang masuk akal.

person derhass    schedule 01.12.2013
comment
Buku saya belum membahas gluLookAt, tapi itu masuk akal, terima kasih - person Popgalop; 01.12.2013
comment
@Popgalop: perhatikan bahwa penggunaan gluLookAt() di sini cukup buruk. Mereka menggunakan retas pengaturan z posisi kamera ke 0,1 untuk menghindari melihat lurus ke bawah, karena mereka menggunakan vektor yang salah untuk situasi itu. Juga bukan berarti gluLookAt() dan banyak hal lain dalam kode yang Anda posting sudah tidak digunakan lagi dan telah dihapus dari profil inti OpenGL modern. ANDA mungkin mempertimbangkan untuk belajar dengan cara modern... - person derhass; 01.12.2013

Anda melihat sepanjang sumbu y, oleh karena itu y konstan untuk membuat persegi tegak lurus terhadap area pandang. Dengan panggilan ke gluLookAt(), Anda menentukan posisi kamera dan arah tampilan. Anda dapat mengubah argumen gluLookAt, sehingga kamera terlihat sepanjang arah z. Dalam hal ini, z harus konstan dalam definisi kuadrat Anda.

Lihat http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml .

person Jasper    schedule 01.12.2013