我有一些代码在过剩窗口中使用PyOpenGL显示图形.在视网膜Macbook Pro上,此窗口以低分辨率模式显示,其中一个OpenGL像素由四个物理像素表示.如果它以完整的原始分辨率显示会更好.
我的问题
有没有办法在Retina显示器上使用过剩或其他方式在Python中获取原生分辨率OpenGL上下文?
问题示例
下面是PyOpenGL程序的最小工作示例.没有什么特别之处 - 任何有效的PyOpenGL代码都会展示这个问题.这是屏幕截图的放大细节.请注意,构成白色三角形的像素是OS X小部件像素大小的四倍.这是不是专门为Retina设备设计的程序的默认设置.我想知道如何为PyOpenGL程序关闭它.

这是代码:
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
import os
def initFunc():
glDisable(GL_DEPTH_TEST)
glClearColor(0.0, 0.0, 0.0, 0.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 400.0, 0.0, 400.0)
def displayFunc():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_TRIANGLES)
glVertex2f(10.0, 10.0)
glVertex2f(10.0, 100.0)
glVertex2f(100.0, 100.0)
glEnd()
glFlush()
if __name__ == '__main__':
glutInit()
glutInitWindowSize(400,400)
glutCreateWindow("GL test")
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutDisplayFunc(displayFunc)
initFunc()
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
# …Run Code Online (Sandbox Code Playgroud) 我正在使用XCode在OS X Mountain Lion上使用C++进行开发,以便在本地计算机上运行.我遇到与非正规数有关的性能问题,我希望设置FTZ标志,以便将它们刷新为零.(我已经检查过denormals确实是问题,将它们刷新为零不会导致我的情况下的准确性问题.)但是,我找不到任何关于如何在XCode中实现这一点的信息.这是我可以在构建设置中更改的选项吗?或者我应该在某处输入一些代码?任何帮助将非常感激.
我正在编写一些数字代码,其中使用基于 0 的索引比使用 Julia 的默认基于 1 的索引更方便。Julia 确实支持基于 0 的索引,但它的文档直接针对开发人员,所以我对如何使用它有点困惑。
具体来说:如果我打电话,rand(10,10)我会得到一个索引从 1 到 10 的 10x10 数组。是否有一个简单的等效命令将返回一个索引从 0 到 9 的数组?或者,我可以轻松地将其转换为基于 0 的数组而不是基于 1 的数组吗?
我想将 Python 浮点数转换为字节数组,将其编码为 32 位小端 IEEE 浮点数,以便将其写入二进制文件。
在 Python 3 中执行此操作的现代 Pythonic 方法是什么?对于整数我可以这样做,但是对于浮点数my_int.to_bytes(4,'little')没有方法。to_bytes
如果我可以一次性为 numpy 数组中的每个浮点执行此操作(使用 dtype numpy.float32),那就更好了。但请注意,我需要将其作为字节数组获取,而不仅仅是立即将数组写入文件。
有一些听起来类似的问题,但它们似乎主要是关于获取十六进制数字,而不是写入二进制文件。
Pillow ImageFont文档有几个使用不同字体的示例,但它们在 Mac 上不能“开箱即用”。找出我的系统字体所在的位置可能并不难,但我很懒惰,想要一个我可以编辑的简单示例。
那么:如何在 Mac 上使用 Pillow 以与默认字体和大小不同的字体编写一些文本?
我有以下Python代码:
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['figure.figsize'] = [12, 7]
n = 100
m = 100
X = np.arange(-n/2,n/2,1)
Y = np.arange(-m/2,m/2,1)
X, Y = np.meshgrid(X, Y)
landscape = np.exp(-0.01 * (X*X + Y*Y) )
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(X, Y, landscape,
linewidth=0,
antialiased=False
)
Run Code Online (Sandbox Code Playgroud)
在笔记本中运行它会生成此图像
如果仔细观察,您会发现高斯峰的左侧比右侧稍微亮一些。不过,这种照明效果几乎不可见,我想增加它,以便 3D 形状变得容易可见。
我知道matplotlib.colors.LightSource,但无论我做什么,我都无法让它产生我想要的效果。理想情况下,我只想增加“默认”照明的强度,而不是摆弄它。但如果有人能解释如何使用 LightSource 来处理此图像,那也会有帮助。
请注意,我不想对图像应用高度图,也不想在其上绘制网格线 - 我只是想增加照明效果,同时保持表面颜色均匀。
还值得一提的是,我有点坚持使用 MatPlotLib,因为我使用Jupyterlite与没有安装 Python 的学生共享笔记本,所以我需要一个适用于它的解决方案。
我正在准备一些科学论文的图表,这些图片需要宽而短,才能符合页面限制.但是,当我将它们保存为pdf时,缺少x轴标签,因为(我认为)它们位于边界框之外.
将以下内容放入iPython笔记本中可以重现该问题.
%pylab inline
pylab.rcParams['figure.figsize'] = (8.0, 2.0)
plot([1,5,2,4,6,2,1])
xlabel("$x$")
ylabel("$y$")
savefig("test.pdf")
Run Code Online (Sandbox Code Playgroud)
生成的pdf文件如下所示:

如何更改pdf文件的边界框?理想情况下,我想要一个"做得恰到好处"的解决方案,即自动调整大小,使一切都整齐,包括摆脱左右不必要的空间 - 但我很匆忙,所以我会以任何方式改变边界框,我会猜测数字,直到它看起来正确,如果我必须.
我在 Mac 笔记本电脑上使用 VS Code。如果我使用 Python,我可以通过按右上角的小箭头来运行代码,
但是,我似乎找不到为此的键盘快捷键。有一个老问题,如何从 Visual Studio Code 中执行 Python 代码,但那里的所有答案似乎要么已过时,要么不适用于 Mac。其中一位说 F5 键应该可以使用,但我的 Mac 有一个无用的触摸栏而不是功能键,所以这对我没有帮助。
tl;dr 除了 F5 之外,还有在现代 VS Code 安装上运行 Python 代码的快捷方式吗?或者是一种简单的设置方法?
我是Haskell的初学者,我遇到过我想使用状态monad的情况.(或者至少,我认为我就是我想要使用的.)状态monad有一百万个教程,但所有这些教程似乎都认为我的主要目标是在深层次的概念层面理解它,并且因此,他们在他们说如何用它实际开发软件的部分之前就停止了.所以我正在寻求一个简化的实际例子的帮助.
下面是我当前代码的简单版本.正如您所看到的,我正在通过我的函数来处理状态,我的问题就是如何使用do符号重新编写代码,这样我就不必这样做了.
data Machine = Register Int
addToState :: Machine -> Int -> Machine
addToState (Register s) a = Register $ s+a
subtractFromState :: Machine -> Int -> Machine
subtractFromState (Register s) a = Register (s-a)
getValue :: Machine -> Int
getValue (Register s) = s
initialState = Register 0
runProgram = getValue (subtractFromState (addToState initialState 6) 4)
Run Code Online (Sandbox Code Playgroud)
代码模拟一个简单的抽象机器,它具有一个寄存器,以及添加到寄存器的指令,从中减去并获取其值.最后的"程序"将寄存器初始化为0,向其中加6,减去4并返回结果,当然为2.
我理解状态monad的目的(或者至少认为我这样做),并且我希望它能让我重新编写这个,这样我最终会得到像
runProgram :: ???????
runProgram = do
put 0
addToState 6
subtractFromState 4
value <- getValue
return value
Run Code Online (Sandbox Code Playgroud)
然而,尽管我读过所有教程,但我仍然不太清楚如何将代码转换为这种形式. …
我目前正在为一篇论文制作一个图形,它看起来像这样:
以上非常接近我想要的样子,但我有一种强烈的感觉,我没有以“正确的方式”做这件事,因为它的制作真的很繁琐,而且我的代码充满了各种魔法我手动微调定位的数字。因此我的问题是,产生这样的情节的正确方法是什么?
以下是该图难以制作的重要特征:
三个子图的纵横比由数据固定,但图像的分辨率并不相同。
我希望所有三个地块都占据人物的全部高度
我希望 (a) 和 (b) 靠得很近,因为它们共享 y 轴,而 (c) 离得更远
理想情况下,我希望顶部颜色条的顶部与三个图像的顶部完全匹配,并且与底部颜色条的底部类似。(实际上它们并没有完全对齐,因为我通过猜测数字并重新编译图像来做到这一点。)
在生成此图时,我首先尝试使用GridSpec,但我无法控制三个主要子图之间的相对间距。然后我尝试了 ImageGrid,它是AxisGrid 工具包的一部分,但三个图像之间的不同分辨率导致其行为异常。深入研究 AxesGrid,我能够使用append_axes函数,但我仍然必须手动定位三个颜色条。(我手动创建了颜色条。)
我宁愿不发布我现有的代码,因为它是一个可怕的黑客和神奇数字的集合。相反,我的问题是,在 MatPlotLib 中是否有任何方法可以指定图形的逻辑布局(即上面项目符号的内容)并自动为我计算布局?
python ×6
matplotlib ×3
axes ×1
axis-labels ×1
binary-data ×1
gcc ×1
glut ×1
haskell ×1
julia ×1
monads ×1
numpy ×1
osx-lion ×1
performance ×1
pyopengl ×1
state-monad ×1
xcode ×1