我在OpenGL+Python+Pyside中创建了一个场景。我有一个问题,平滑的颜色变化,当我旋转我的对象和使用灯光。你知道吗
物体的每一边都有一个角度,当这一边的颜色从另一边跳到另一边时。对于其他法向量的边,这个角度是不同的。你知道吗
我不是在转动相机,而是在转动物体。你知道吗
我录制了一个GIF,它显示了我在说什么: https://imgur.com/a/zRxdHxB
我就是这样初始化OpenGL的:
def initializeGL(self):
self.qglClearColor(QtGui.QColor.fromRgb(42, 11, 0))
GL.glEnable(GL.GL_DEPTH_TEST)
GL.glEnable(GL.GL_CULL_FACE)
if ENABLE_LIGHT:
GL.glEnable(GL.GL_LIGHTING)
GL.glEnable(GL.GL_LIGHT0)
ambient0 = [0.2, 0.2, 0.2, 1];
diffuse0 = [0.9, 0.9, 0.9, 1];
specular0 = [0.7, 0.7, 0.7, 1];
GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, self.light_pos)
GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, ambient0);
GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, diffuse0);
GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, specular0);
glob_ambient = [0.7, 0.7, 0.7, 0.7];
GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, glob_ambient);
GL.glEnable(GL.GL_COLOR_MATERIAL);
GL.glShadeModel(GL.GL_FLAT);
GL.glViewport(0,0, self.width, self.heigh)
GL.glMatrixMode(GL.GL_PROJECTION)
GLU.gluPerspective(40.0, self.width/self.heigh, 0.01, 10000.0);
GL.glMatrixMode(GL.GL_MODELVIEW)
self.initialized = True
我就是这样画的:
def paintGL(self):
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
GL.glMatrixMode(GL.GL_MODELVIEW);
GL.glLoadIdentity();
GLU.gluLookAt(*self.eyePos.getEyePos())
GL.glTranslated(0.0, 0.0, 0)
GL.glRotated(self.xRot, 1.0, 0.0, 0.0)
GL.glRotated(self.yRot, 0.0, 1.0, 0.0)
GL.glRotated(self.zRot, 0.0, 0.0, 1.0)
if self.scene:
self.scene.renderScene()
GL.glPushMatrix();
GL.glLoadIdentity();
GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, self.light_pos)
GL.glPopMatrix()
GL.glFlush()
我这样设置材质:
(...)
GL.glBegin(GL.GL_POLYGON)
GL.glColor4fv([0.25, 0.25, 0.35, 1])
GL.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, [0.2, 0.2, 0.2, 1])
GL.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, [0.2, 0.2, 0.2, 1])
GL.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, [0.2, 0.2, 0.2, 1])
GL.glNormal3fv(self.Normals[n])
(...)
光的位置是[-100, 100, 200]
眼睛的位置是[0, 0, 50];
对象位置是[0, 0, 0]
物体宽20个单位,高20个单位。你知道吗
如何摆脱这种烦人的影响?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐