图片纹理设置代码 picture=glGenLists(1);
glNewList(picture,GL_COMPILE);
glBindTexture(GL_TEXTURE_2D,texture);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0x0);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f);glVertex3f(-0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 0.0f);glVertex3f(0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f(0.4f,0.8f,0.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(-0.4f,0.8f,0.0f);
glEnd();
glDisable(GL_ALPHA_TEST);
glDisable(GL_TEXTURE_2D);
glEndList();
光照属性设置
GLfloat light_position1[] = { 0.0, 10.0, 10.0, 1.0 };
GLfloat light_position2[] = {-10.0, 10.0,-10.0, 1.0 };
GLfloat light_position3[] = { 10.0, 10.0,-10.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, light_position1);
glLightfv(GL_LIGHT1, GL_POSITION, light_position2);
glLightfv(GL_LIGHT2, GL_POSITION, light_position3);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
为什么当图片在旋转的时候有一面是黑的看不见呢···我想要它无论在哪个角度都能够看得见怎么办???
glNewList(picture,GL_COMPILE);
glBindTexture(GL_TEXTURE_2D,texture);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0x0);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f);glVertex3f(-0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 0.0f);glVertex3f(0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f(0.4f,0.8f,0.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(-0.4f,0.8f,0.0f);
glEnd();
glDisable(GL_ALPHA_TEST);
glDisable(GL_TEXTURE_2D);
glEndList();
光照属性设置
GLfloat light_position1[] = { 0.0, 10.0, 10.0, 1.0 };
GLfloat light_position2[] = {-10.0, 10.0,-10.0, 1.0 };
GLfloat light_position3[] = { 10.0, 10.0,-10.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, light_position1);
glLightfv(GL_LIGHT1, GL_POSITION, light_position2);
glLightfv(GL_LIGHT2, GL_POSITION, light_position3);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
为什么当图片在旋转的时候有一面是黑的看不见呢···我想要它无论在哪个角度都能够看得见怎么办???
glNormal3f(0.0, 0.0, -1.0);
glNormal3f(0.0, 0.0, 1.0);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f);glVertex3f(-0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 0.0f);glVertex3f(0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f(0.4f,0.8f,0.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(-0.4f,0.8f,0.0f);
glEnd();
加入两个法向量,但是好像不起作用
GLfloat mat[]={0.5,0.5,0.5,1};
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f);glVertex3f(-0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 0.0f);glVertex3f(0.4f,0.0f,0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f(0.4f,0.8f,0.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(-0.4f,0.8f,0.0f);
glEnd(); 但是出现一个问题,我原有两张纹理贴图,一张是显示只有一面的图片,另一个是一个球状物体,现在按各位的说法我解决了图片的问题,但是按这样设置球状物体的纹理又显得太亮了,现在能不能这样,运用材料发射的东西glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat);作用于不同的纹理贴图上,在图片上把DIFFUSE和AMBIENT设置的高一些,而球状的那个就设置的低一些,请问这样怎么实现???
有两种方法可以实现:
1,使用
gglPushMatrix();
设置材质属性...
画一些图形(如你的贴图)
glPopMatrix();然后gglPushMatrix();
设置材质属性...
画另一些图形(如你的球体)
glPopMatrix();2,使用glColorMaterial(GLenum face,GLenum mode);注意:这个函数说明了两个独立的值,第一个参数说明哪一个面和哪些面被修改,而第二个参数说明这些面的哪一个或哪些材质成分要被修改。OpenGL并不为每一种face保持独立的mode变量。在调用glColorMterial()以后,首先需要用GL_COLOR_MATERIAL作为参数调用glEnable()来启动颜色材质,然后在绘图时调用glColor*()来改变当前颜色,或用glMaterial()来改变材质成分。当不用这种方式来改变材质时,可调用glDisable(GL_COLOR_MATERIAL)来关闭取消
方法如下:
glColorMaterial(GL_FRONT,GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.3,0.5,0.7);
/* draw some objects here. */
glcolor3f(0.0,1.0,0.0);
/* draw other objects here.*/
glDisable(GL_COLOR_MATERIAL);