首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyOpengl,重叠纹理

PyOpengl,重叠纹理
EN

Stack Overflow用户
提问于 2021-07-08 10:06:25
回答 1查看 26关注 0票数 1

我是使用python和PyOpengl的opengl的新手,我有一个问题,我正在使用一些图像渲染一个立方体并对其进行纹理处理,立方体有(面,背,右,左)问题是最后绘制的纹理与所有其他纹理重叠:

link to视频显示了该问题

我的代码:

代码语言:javascript
复制
import pygame
import sys
from OpenGL.GL import *
from OpenGL.GLU import *
import numpy as np
import sys
import cv2


pygame.init()

screen = pygame.display.set_mode(
    (1024,1024),pygame.DOUBLEBUF|
    pygame.OPENGL|pygame.OPENGLBLIT)


texture=None
def cube():
    
    glBindTexture(GL_TEXTURE_2D, texture[0])
    glBegin(GL_QUADS)
    glTexCoord2f(0.0,0.0); glVertex3fv((-0.5,-0.5,1))
    glTexCoord2f(1.0,0.0); glVertex3fv((0.5,-0.5,1))
    glTexCoord2f(1.0,1.0); glVertex3fv((0.5,0.5,1))
    glTexCoord2f(0.0,1.0); glVertex3fv((-0.5,0.5,1))
    glEnd()
    
    glBindTexture(GL_TEXTURE_2D, texture[1])
    glBegin(GL_QUADS)
    glTexCoord2f(0.0,0.0); glVertex3fv((-0.5,-0.5,-1))
    glTexCoord2f(1.0,0.0); glVertex3fv((0.5,-0.5,-1))
    glTexCoord2f(1.0,1.0); glVertex3fv((0.5,0.5,-1))
    glTexCoord2f(0.0,1.0); glVertex3fv((-0.5,0.5,-1))
    glEnd()
    
    glBindTexture(GL_TEXTURE_2D, texture[2])
    glBegin(GL_QUADS)
    glTexCoord2f(0.0,0.0); glVertex3fv((0.5,-0.5,1))
    glTexCoord2f(1.0,0.0); glVertex3fv((0.5,-0.5,-1))
    glTexCoord2f(1.0,1.0); glVertex3fv((0.5,0.5,-1))
    glTexCoord2f(0.0,1.0); glVertex3fv((0.5,0.5,1))
    glEnd()
    
    glBindTexture(GL_TEXTURE_2D, texture[3])
    glBegin(GL_QUADS)
    glTexCoord2f(0.0,0.0); glVertex3fv((-0.5,-0.5,1))
    glTexCoord2f(1.0,0.0); glVertex3fv((-0.5,-0.5,-1))
    glTexCoord2f(1.0,1.0); glVertex3fv((-0.5,0.5,-1))
    glTexCoord2f(0.0,1.0); glVertex3fv((-0.5,0.5,1))
    glEnd()
    glFlush()
    
    
images=['src','shab','milan','raja']
def loadimgae():
    global texture 
    
    texture = glGenTextures(len(images))
    for i in range(len(images)):
        im = cv2.imread(images[i]+'.jpg');
        im=cv2.flip(im,0)
        im=cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
        im=im.astype(np.float32)
    
    
        glBindTexture(GL_TEXTURE_2D, texture[i])
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    
        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, im.shape[0], im.shape[1], 0, GL_RGB, 
GL_UNSIGNED_BYTE, im)

    
    
def init():
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(45, 1, 0.1, 100.0)
    
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    glTranslatef(0.0,0.0,-5.0)
    
    glEnable(GL_TEXTURE_2D);
    
    loadimgae()
    
   
    
init()
while True:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
            
    glClear(GL_COLOR_BUFFER_BIT|
            GL_DEPTH_BUFFER_BIT)
    glRotatef(1.0,0.0,1.0,0.0)

    cube()
    
    pygame.display.flip()
    pygame.time.wait(10)

我是个乞儿,也许我忘了写什么东西,你能帮帮我吗?

有人对此有解决方案吗?

感谢兄弟们:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 12:33:04

您需要启用Depth Test。深度测试将新片段的深度与深度缓冲器中存储的深度进行比较。根据深度测试的结果丢弃碎片。默认深度函数为GL_LESS。因此,“背面”中的片段将被丢弃。

代码语言:javascript
复制
def init():

    # [...]

    glEnable(GL_DEPTH_TEST)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68294754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档