You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyOpenGL中通过textureID获取纹理尺寸?

获取PyOpenGL中已加载纹理的尺寸

在PyOpenGL中,glGetTextureLevelParameteriv无法直接使用Python普通列表接收返回值,你需要用ctypes类型变量来传递可写入的内存地址给OpenGL API。以下是可行的实现方式:

1. 依赖准备

先导入必要的模块:

import ctypes
from OpenGL.GL import *

2. 查询纹理宽高的代码

假设你已经有了加载完成的texture_id,直接通过纹理ID查询即可(无需绑定纹理,这是OpenGL 4.5+的直接纹理操作特性):

# 查询宽度
width = ctypes.c_int()
glGetTextureLevelParameteriv(texture_id, 0, GL_TEXTURE_WIDTH, ctypes.byref(width))
# 查询高度
height = ctypes.c_int()
glGetTextureLevelParameteriv(texture_id, 0, GL_TEXTURE_HEIGHT, ctypes.byref(height))

# 提取实际数值
tex_width = width.value
tex_height = height.value

为什么列表不行?

Python列表是高层数据结构,并不对应C语言的指针/连续内存块。OpenGL的C风格API需要一块可直接写入的内存地址,ctypes.byref()能正确提供这个地址,让API直接修改变量内部的值,而普通列表做不到这一点。

兼容旧版OpenGL的方案

如果你的PyOpenGL版本不支持glGetTextureLevelParameteriv,可以用旧版的绑定后查询方式:

glBindTexture(GL_TEXTURE_2D, texture_id)

width = ctypes.c_int()
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, ctypes.byref(width))

height = ctypes.c_int()
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, ctypes.byref(height))

tex_width = width.value
tex_height = height.value

内容的提问来源于stack exchange,提问作者AndreaTerenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:12