- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到了用 pyglet 渲染立方体的代码,我观看了代码附带的视频,它在 Nvidia 显卡上正确显示了立方体渲染。当我在我的 AMD 显卡上尝试代码时它坏了,我该如何解决这个问题?
github链接:https://github.com/obiwac/python-minecraft-clone/tree/master/episode-7
视频链接:https://www.youtube.com/watch?v=U9Ldr_PeRA8
我得到了什么:
视频显示:
main.py 中的代码
import math
import ctypes
import pyglet
pyglet.options["shadow_window"] = False
pyglet.options["debug_gl"] = False
import pyglet.gl as gl
import matrix
import shader
import camera
import block_type
import texture_manager
class Window(pyglet.window.Window):
def __init__(self, **args):
super().__init__(**args)
# create blocks
self.texture_manager = texture_manager.Texture_manager(16, 16, 256)
self.cobblestone = block_type.Block_type(self.texture_manager, "cobblestone", {"all": "cobblestone"})
self.grass = block_type.Block_type(self.texture_manager, "grass", {"top": "grass", "bottom": "dirt", "sides": "grass_side"})
self.dirt = block_type.Block_type(self.texture_manager, "dirt", {"all": "dirt"})
self.stone = block_type.Block_type(self.texture_manager, "stone", {"all": "stone"})
self.sand = block_type.Block_type(self.texture_manager, "sand", {"all": "sand"})
self.planks = block_type.Block_type(self.texture_manager, "planks", {"all": "planks"})
self.log = block_type.Block_type(self.texture_manager, "log", {"top": "log_top", "bottom": "log_top", "sides": "log_side"})
self.texture_manager.generate_mipmaps()
# create vertex array object
self.vao = gl.GLuint(0)
gl.glGenVertexArrays(1, ctypes.byref(self.vao))
gl.glBindVertexArray(self.vao)
# create vertex position vbo
self.vertex_position_vbo = gl.GLuint(0)
gl.glGenBuffers(1, ctypes.byref(self.vertex_position_vbo))
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertex_position_vbo)
gl.glBufferData(
gl.GL_ARRAY_BUFFER,
ctypes.sizeof(gl.GLfloat * len(self.grass.vertex_positions)),
(gl.GLfloat * len(self.grass.vertex_positions)) (*self.grass.vertex_positions),
gl.GL_STATIC_DRAW)
gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0)
gl.glEnableVertexAttribArray(0)
# create tex coord vbo
self.tex_coord_vbo = gl.GLuint(0)
gl.glGenBuffers(1, ctypes.byref(self.tex_coord_vbo))
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coord_vbo)
gl.glBufferData(
gl.GL_ARRAY_BUFFER,
ctypes.sizeof(gl.GLfloat * len(self.grass.tex_coords)),
(gl.GLfloat * len(self.grass.tex_coords)) (*self.grass.tex_coords),
gl.GL_STATIC_DRAW)
gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0)
gl.glEnableVertexAttribArray(1)
# create shading value vbo
self.shading_value_vbo = gl.GLuint(0)
gl.glGenBuffers(1, ctypes.byref(self.shading_value_vbo))
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.shading_value_vbo)
gl.glBufferData(
gl.GL_ARRAY_BUFFER,
ctypes.sizeof(gl.GLfloat * len(self.grass.shading_values)),
(gl.GLfloat * len(self.grass.shading_values)) (*self.grass.shading_values),
gl.GL_STATIC_DRAW)
gl.glVertexAttribPointer(2, 1, gl.GL_FLOAT, gl.GL_FALSE, 0, 0)
gl.glEnableVertexAttribArray(2)
# create index buffer object
self.ibo = gl.GLuint(0)
gl.glGenBuffers(1, self.ibo)
gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ibo)
gl.glBufferData(
gl.GL_ELEMENT_ARRAY_BUFFER,
ctypes.sizeof(gl.GLuint * len(self.grass.indices)),
(gl.GLuint * len(self.grass.indices)) (*self.grass.indices),
gl.GL_STATIC_DRAW)
# create shader
self.shader = shader.Shader("vert.glsl", "frag.glsl")
self.shader_sampler_location = self.shader.find_uniform(b"texture_array_sampler")
self.shader.use()
# pyglet stuff
pyglet.clock.schedule_interval(self.update, 1.0 / 60)
self.mouse_captured = False
# camera stuff
self.camera = camera.Camera(self.shader, self.width, self.height)
def on_draw(self):
self.camera.update_matrices()
# bind textures
gl.glActiveTexture(gl.GL_TEXTURE0)
gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_manager.texture_array)
gl.glUniform1i(self.shader_sampler_location, 0)
# draw stuff
gl.glEnable(gl.GL_DEPTH_TEST)
gl.glClearColor(0.0, 0.0, 0.0, 1.0)
self.clear()
gl.glDrawElements(
gl.GL_TRIANGLES,
len(self.grass.indices),
gl.GL_UNSIGNED_INT,
None)
*注:部分相机移动代码已被省略,查看完整代码请引用github链接。
最佳答案
您必须确保 pyglet 窗口的默认帧缓冲区具有深度缓冲区。见 Creating an OpenGL context :
config = pyglet.gl.Config(depth_size = 24)
window = pyglet.window.Window(config = config)
如果您的硬件不支持 24 位深度缓冲区,您可能需要尝试 16 位:
config = pyglet.gl.Config(depth_size = 16)
window = pyglet.window.Window(config = config)
关于python - openGL(pyglet) 3d 场景无法在 AMD 显卡上正确渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64828949/
我想为我的应用程序设计背景图像。图像应填满 iPhone 屏幕。什么图像尺寸适用于 3G 和 4G? A) 320 x 480。B) 640 x 960。 我更喜欢使用 B,因为它的质量更高,3G 会
我需要为我的类(class)作业编写一些关于低级视频卡控制的应用程序。例如 - 温度、工作 SM、管理对它们的访问等。操作系统 linux、tesla c1060。 你能给我一些建议在哪里搜索这类信息
我目前在安装带有 gpu 支持的 tensorflow 时遇到一些问题。 这是我遵循的指南。 安装 NVIDIA CUDA(预装) 安装 NVIDIA cuDNN(预装) 安装 bazel wget
我对如何使用一些视频卡驱动程序 API 读取 GPU 温度(图形处理单元,显卡主芯片)的方法感兴趣? 每个人都知道有两个不同的芯片制造商(至少是流行的)- ATI 和 nVIDIA - 因此有两种不同
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我的笔记本电脑有两个显卡,一个是高性能 NVIDIA 显卡,另一个是板载 Intel 显卡。然而,当我调用 IDirect3D9::GetAdapterCount 时,它只找到板载 Intel 适配器
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我想使用两个 xserver,每个都在一个单独的显卡上运行,实际上我正在使用两个显示器,我的计算机上安装了两个不同的显卡,如下所示: root@ziomario-Z87-HD3:/home/zioma
当我在我的容器中时,我运行 lspci | grep -i nvidia 并没有显示。 当我从 NVIDIA 提供的示例中运行 ./deviceQuery 时,我得到 no CUDA-capabl
我有一台带有 Intel GMA 3150 显卡的 Asus Eee PC,操作系统是 Windows 7 Starter,并且安装了 DirectX 11。 当我运行我的项目时,它使用 XNA 4.
我知道 Quadro 2000 是 CUDA 2.1。我的电脑规范如下: Quadro 2000,配备 16GB RAM。 至强(R) CPU W3520 @2.67GHz 2.66GHz Windo
我需要帮助将 C++ 头文件转换为 Delphi。 下面是原始头文件和我的Delphi翻译。 C++ header : #if _MSC_VER > 1000 #pragma once #endif
我在配备 Radeon Pro 560X 4096 MB 和 Intel UHD Graphics 630 1536 MB 的 MacBook Pro 上用 python 运行一些 Keras/ten
如何在 c sharp 中获取我的显卡的共享系统内存、总可用内存和系统显存? 最佳答案 我会考虑使用 WMI ,特别是 Win32_VideoController目的。 WMI Code Creato
PowerVR SGX 卡中与纹理内存相关的“共享内存”到底是什么。没有与此相关的适当文档。 通常对于 iphone 上的应用程序(假设 3gs/ipad PowerVR SGX 卡),它被限制为使用
以防我购买带有集成英特尔® UHD 显卡 620 的 Thinkpad 并在其下安装 Ubuntu Linux 和 TensorFlow。然后,稍后我添加带有 Nvidia GPU 的 eGPU。我应
我是 TF 新手,想从源代码编译,因为我的桌面没有支持 AVX 指令的 CPU 或 GPU。我的系统有一个 Intel i7 930 处理器(来自 nehalem 家族的 Bloomfield)和一个
因此,在 64 位 Ubuntu 上,我正在使用 LWJGL 进行开发,但是在 Windows(和 Mac,尽管我测试的更少)上运行良好的代码在我的新机器上出现了问题。 基本上,如果我尝试初始化全屏模
我是一名优秀的程序员,十分优秀!