PDA

Tam Sürümünü Görmek İçin : (opengl) begin end arası Loadmatrix


elix
22/01/2007, 15:19
oyun programlama ile ilgili bir bölüm olmadığı için buraya yazıyorum.

opengl'de bir poligonun (mesela) ilk iki köşesini bir modelview matrisde üçüncü köşesini başka bir modelview matrisde çizmek istiyorum.

glBegin(gl_polygon)
glVertex3f(0,0,1)
glVertex3f(0,0,1)
glLoadMatrixf(matrx)
glVertex3f(0,0,1)
glEnd()

yazdığımda ilk iki köşe için geçerli olan modelview matris değişmiyor. loadmatrix, begin end arası çalışmıyor anladığım kadarıyla.

bunun bir yolu var mı?


mr1yh1
22/01/2007, 16:19
redbook appendix G :
OpenGL 1.1 ignores matrix operations invoked between
glBegin() and glEnd() commands, but a future version might not

bluebook ( hangi versiyodan bahsediyor bilmiyorum ) :
http://www.rush3d.com/reference/opengl-bluebook-1.0/ch05.html#id5450783
Only a subset of GL commands can be used between glBegin and glEnd. The commands are glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glMaterial, and glEdgeFlag. Also, it is acceptable to use glCallList or glCallLists to execute display lists that include only the preceding commands. If any other GL command is called between glBegin and glEnd, the error flag is set and the command is ignored.

bence error flag ı test edebilirsin.
http://www.rush3d.com/reference/opengl-bluebook-1.0/ch05.html#id5488181
glGetError() fonksiyonu,
yukarıdaki durum hala bir hata ise GL_INVALID_OPERATION döndürmeli.
değer glGetError ile bir kez okunduktan sonra temizleniyor.

elix
23/01/2007, 08:19
teşekkürler tam olarak buydu aradığım.
jogl kullanıyorum. O sanırım, opengl 2.0 ı destekliyor.

geterror yöntemini öğrettiğin için çok sağol, dediğin gibi invalid operation döndürüyor.

başka yerlerde de invalid operation yapıyormuşum :).

mr1yh1
25/01/2007, 10:52
jogl kütüphanesini inceledim.
glGetError dan çok daha pratik bir yöntem var.

GL yerine DebugGL nesnesini kullanırsan,
her opengl çağrısından sonra hata olup olmadığını kontrol ediyor.
ve hata var ise hatanın nedenini içeren bir GLException fırlatıyor.
( yakalamak zorunda değilsin. )

init fonksiyonu içerisinde şu satır olmalı:

public void init(GLAutoDrawable drawable) {
drawable.setGL(new DebugGL(drawable.getGL()));
//...