2011-11-20 62 views
2

我想將圖像映射到NURBS曲面上。我在(-1,-1),(-1,1),(1,1),(1,-1)平方中有一個13x13的等距控制點陣列。我想一個紋理映射到通過使用下面的代碼的控制點控制的NURBS曲面:重複紋理問題

gluNurbsSurface(nurbs_object,no_knots,&knots[0],no_knots,&knots[0],u_stride,v_stride,&ctr_points[0][0],u_order,v_order,GL_MAP2_TEXTURE_COORD_2); 
gluNurbsSurface(nurbs_object,no_knots,&knots[0],no_knots,&knots[0],u_stride,v_stride,&ctr_points[0][0],u_order,v_order,GL_MAP2_VERTEX_3); 
gluNurbsSurface(nurbs_object,no_knots,&knots[0],no_knots,&knots[0],u_stride,v_stride,&ctr_points[0][0],u_order,v_order,GL_MAP2_NORMAL); 

以下是我初始化我的程序與參數:

gluNurbsProperty(nurbs_object, GLU_SAMPLING_TOLERANCE, 50.0); 
gluNurbsProperty(nurbs_object, GLU_DISPLAY_MODE, GLU_FILL); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); 

這個問題我我所面對的是,我在原點周圍重複4次紋理圖像,而不是2x2紋理,我有4個1x1紋理。

我哪裏錯了?我該如何解決它?

回答

1

該紋理的座標範圍爲[0,0] - > [1,1]。由於默認紋理環繞設置爲GL_REPEAT,因此使用的座標會產生您觀察到的2x2平鋪。

編輯:

你需要擴展用於紋理座標NURBS曲面,或縮放紋理座標一些其他的方式。後者可能侵擾性較小:

GLint mmode; 

glGetIntegerv(GL_MATRIX_MODE, & mmode); /* save active matrix stack. */ 
glMatrixMode(GL_TEXTURE); 
glPushMatrix(); 
glLoadIdentity(); 
glScalef(0.5, 0.5, 1.0); 

/* ... draw ... */ 

glPopMatrix(); 
glMatrixMode((GLenum) mmode); /* restore active matrix stack. */ 
+0

我該如何解決它? – Anand