В моята сцена имам куб в сфера. Бих искал да приложа RGB текстура към сфера и да я направя полупрозрачна. Мога да импортирам текстурата, да я приложа към сферата и да я направя полупрозрачна, но не получавам резултата, който искам.
Моята функция за смесване е glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
Моят метод на теглене е следният:
def DrawGLScene():
rotation1 = 60
rotation2 = 60
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_BLEND)
glLoadIdentity()
glTranslatef(0.0, 0.0, -8.0)
glRotatef(rotation1, 1.0, 0.0, 0.0)
glRotatef(rotation2, 0.0, 1.0, 0.0)
glColor4f(1.0,1.0,1.0,1.0)
glutSolidCube(2);
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D,1)
glColor4f(1.0,1.0,1.0,0.3)
Q=gluNewQuadric()
gluQuadricNormals(Q, GL_SMOOTH)
gluQuadricTexture(Q, GL_TRUE)
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)
gluSphere(Q, 2.35, 32, 16)
glDisable(GL_TEXTURE_2D)
glutSwapBuffers()
Резултатът изглежда така:
Изглежда имаше проблеми с дълбочината, тъй като можех да видя задната страна на сферата само на части в долния десен ъгъл. След това зададох glDepthFunc(GL_LESS) за изчертаване на куба и glDepthFunc(GL_ALWAYS) за изчертаване на сферата, което доведе до:
Сега задната страна на сферата се показва през куба.
Опитах множество комбинации от glDepthFunc() за обектите, но без резултат. Проблемът свързан ли е с това как боравя с дълбочината, смесването или нещо друго?
РЕДАКТИРАНЕ:
Използването на glEnable(GL_CULL_FACE)
и glCullFace(GL_BACK)
в първия пример ми дава следното, което все още не е правилно, тъй като сега изобщо не можете да видите гърба на сферата.