- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 numpy 和 OpenGL 可视化 mandelbrot 集。但是我在绘制代码时遇到问题,即 glDrawPixels。
当我使用 glDrawPixels 绘制时,我得到一些黑色的东西,而且一切都困惑了,但是当使用较慢的 glBegin 和 glEnd 方法时,我得到了正确的结果。代码:
#!/usr/bin/env python3
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from pylab import *
from numpy import *
from time import clock
w,h = 80,60
eps = 2
max_iter = 30
def draw():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
t = clock()
print("Being calculation")
x = linspace(-1.5, 0.5, w)
y = linspace(-1,1,h)
a, b = meshgrid(x,y)
M = (a + 1j*b).T
Alive = ones((w,h), dtype=bool)
C = M.copy()
esc = max_iter * ones((w,h), dtype=int32)
for k in range(max_iter):
M[Alive] = square(M[Alive]) + C[Alive]
esc[logical_and(Alive, abs(M) > eps)] = k
Alive = abs(M) < eps
colorsMap = array([0x8B0000FF, 0xA52A2AFF, 0xB22222FF, 0xDC143CFF, 0xFF0000FF, 0xFF6347FF, 0xFF7F50FF, 0xCD5C5CFF, 0xF08080FF, 0xE9967AFF, 0xFA8072FF, 0xFFA07AFF, 0xFF4500FF, 0xFF8C00FF, 0xFFA500FF, 0xFFD700FF, 0xB8860BFF, 0xDAA520FF, 0xEEE8AAFF, 0xBDB76BFF, 0xF0E68CFF, 0x808000FF, 0xFFFF00FF, 0x9ACD32FF, 0x556B2FFF, 0x6B8E23FF, 0x7CFC00FF, 0x7FFF00FF, 0xADFF2FFF, 0x006400FF, 0x008000FF, 0x228B22FF, 0x00FF00FF, 0x32CD32FF, 0x90EE90FF, 0x98FB98FF, 0x8FBC8FFF, 0x00FA9AFF, 0x00FF7FFF, 0x2E8B57FF, 0x66CDAAFF, 0x3CB371FF, 0x20B2AAFF, 0x2F4F4FFF, 0x008080FF, 0x008B8BFF, 0x00FFFFFF, 0x00FFFFFF, 0xE0FFFFFF, 0x00CED1FF, 0x40E0D0FF, 0x48D1CCFF, 0xAFEEEEFF, 0x7FFFD4FF, 0xB0E0E6FF, 0x5F9EA0FF, 0x4682B4FF, 0x6495EDFF, 0x00BFFFFF, 0x1E90FFFF, 0xADD8E6FF, 0x87CEEBFF, 0x87CEFAFF, 0x191970FF, 0x000080FF, 0x00008BFF, 0x0000CDFF, 0x0000FFFF, 0x4169E1FF, 0x8A2BE2FF, 0x4B0082FF, 0x483D8BFF, 0x6A5ACDFF, 0x7B68EEFF, 0x9370DBFF, 0x8B008BFF, 0x9400D3FF, 0x9932CCFF, 0xBA55D3FF, 0x800080FF, 0xD8BFD8FF, 0xDDA0DDFF, 0xEE82EEFF, 0xFF00FFFF, 0xDA70D6FF, 0xC71585FF, 0xDB7093FF, 0xFF1493FF, 0xFF69B4FF, 0xFFB6C1FF, 0xFFC0CBFF, 0xFAEBD7FF, 0xF5F5DCFF, 0xFFE4C4FF, 0xFFEBCDFF, 0xF5DEB3FF, 0xFFF8DCFF, 0xFFFACDFF, 0xFAFAD2FF, 0xFFFFE0FF, 0x8B4513FF, 0xA0522DFF, 0xD2691EFF, 0xCD853FFF, 0xF4A460FF, 0xDEB887FF, 0xD2B48CFF, 0xBC8F8FFF, 0xFFE4B5FF, 0xFFDEADFF, 0xFFDAB9FF, 0xFFE4E1FF, 0xFFF0F5FF, 0xFAF0E6FF, 0xFDF5E6FF, 0xFFEFD5FF, 0xFFF5EEFF, 0xF5FFFAFF, 0x708090FF, 0x778899FF, 0xB0C4DEFF, 0xE6E6FAFF, 0xFFFAF0FF, 0xF0F8FFFF, 0xF8F8FFFF, 0xF0FFF0FF, 0xFFFFF0FF, 0xF0FFFFFF, 0xFFFAFAFF], dtype=uint32)
cmap = zeros((w,h), dtype=uint32)
for k in range(max_iter):
cmap[esc == k] = colorsMap[k]
print("Finish Calculation: {:.2f}".format(clock() - t))
t = clock()
print("Begin Drawing")
if True: #Change for effect
glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, cmap.data)
else:
#Primite drawing numpy array
def transform(cl):
r = ((cl >> 24) & 0xFF) / 256.0
b = ((cl >> 16) & 0xFF) / 256.0
g = ((cl >> 8) & 0xFF) / 256.0
return (r,b,g)
glBegin(GL_POINTS)
for y in range(0,h):
for x in range(0,w):
glColor3f(*transform(cmap[x,y]))
glVertex2i(x,y)
glEnd()
glFlush()
print("Finish drawing: {:.2f}".format(clock() - t))
def idle():
glutPostRedisplay()
def reshape(width, height):
global w,h
w,h =width, height
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, width, height, 0)
glClearColor( 1., 1., 1., 0.)
glClear( GL_COLOR_BUFFER_BIT )
glPointSize(1.0)
glColor3f(0., 0., 0.)
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(w,h)
glutInitWindowPosition(100,100)
glutCreateWindow("Fraktali")
glutReshapeFunc(reshape)
glutDisplayFunc(draw)
glutMainLoop()
最佳答案
glDrawPixels() 期望数据按行优先(“光栅扫描”)顺序排列,而我的数组则按列优先顺序排列。不知道 numpy 是如何在内存中保存数据的。这解决了问题:
glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ascontiguousarray(cmap.transpose()).data)
感谢 openGL 论坛上的用户 GClements。
关于python - glDrawPixels 和 numpy 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547086/
我一直在尝试使用 java 和 lwjgl 在 opengl 中绘制 320 x 240 全屏分辨率的图像。我将分辨率设置为 640 x 480,并将像素大小加倍以填充空间。经过大量的谷歌搜索后,我发
基本上我正在做一些测试来模拟场景中的各种窗口。一切正常,直到我尝试更好地定位我在场景中绘制的窗口。 重要代码在这里: // camFront = glReadPixels ... glMatrixMo
我是图形编程新手。我正在尝试使用 glDrawPixels 进行绘图,但我的程序没有任何输出。我在网上进行了研究,关于我应该将哪些数据传递给 glDrawPixels,我不断得到不同的答案。我看过 d
我正在尝试使用 OpenGL 函数 glDrawPixels() 渲染体积数据 #define SIZE 480 unsigned int rgbPixels[SIZE][SIZE] ..
我有一张像这样渲染的图像: glDrawPixels(image->width, image->height, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);
我必须使用 glDrawPixels 来实现光栅算法。 现在我只是想得到一个 glDrawPixels 工作但有问题的简单示例。 GLint height, width, size = 0; GLby
这是代码。输出是一个灰色的方 block ——一直都是,不管输入是什么,而且明显是错误的。我的目标是能够将所有像素存储在某个地方并显示它们,这样我就可以继续使用简单的光线追踪器,但我似乎无法弄清楚这个
我已经使用 OpenGL 和 GLUT 编写了一个小示例程序,以使用 glDrawPixels 函数显示由四个彩色方 block 组成的 2×2 网格。不幸的是,我发现: 网格中的颜色显示不正确;和
将 glDrawPixels() 与 glRasterPos2*() 和 glPixelZoom() 结合使用时,我得到了非常奇怪的结果。我有一张照片,我想像过去的旧帧缓冲区一样显示它,即 (0,0)
我的团队目前仅限于在 opengl 1.4 平台上绘制图像,这意味着我们不能使用任何漂亮的纹理映射来绘制图像(是的,我们仅限于使用 intel 集成图形平台,这很烦人)。到目前为止,我们能够绘制、缩放
根据 opengl 规范 4.0 glDrawPixels 已弃用。 对于 cuda 互操作性,似乎最好使用“opengl 缓冲区对象”。 (替代方案可以是纹理或表面,但它们存在缓存/并发问题,因此无
我正在尝试用opengl画康威的生命游戏。它在常规 pygame 中工作得很好,但我读到 glTexImage2D 是快速绘制数组中已有内容的方法。我已经查看了the examples and doc
这个问题已经有答案了: glDrawArrays only updates when i exit (1 个回答) 已关闭 2 年前。 我创建了要使用 glDrawPixels 绘制的像素缓冲区。代码
以下代码不向 Intel 集成视频卡(例如 MacBook)的后台缓冲区写入任何数据。在 ATI 卡上,例如在 iMac 上,它绘制到后台缓冲区。宽度和高度正确(和 800x600 缓冲区)并且 m_
谁能看出这段代码有什么问题? SIZE_BG 是 6MB,因为我正在尝试绘制大型位图图像 (3366x600)。我使用 malloc 来防止我的图像溢出堆栈。我在调用 glDrawPixels() 时
我目前正在使用 OpenGL 开发适用于 Windows 的视频播放器。效果很好,但我的主要目标之一是准确性。也就是说,显示的图像应该与保存为视频的图像完全相同。 去掉所有与视频/文件/输入相关的东西
我现在对 glDrawPixels() 函数感到困惑。我知道函数签名是这样的:gl.glDrawPixels(int 宽度, int 高度, 格式, 类型, 数据); 我不知道如何使格式类型数据保持一
我正在尝试使用 numpy 和 OpenGL 可视化 mandelbrot 集。但是我在绘制代码时遇到问题,即 glDrawPixels。 当我使用 glDrawPixels 绘制时,我得到一些黑色的
我有一个函数可以在窗口上逐一绘制像素,但我想知道的是如何让像素以红色以外的其他颜色绘制。提前致谢。我已经尝试了一些东西,例如 glSetColor、glColor3f 等。只是尝试让像素以不同的颜色显
我有一个三维数组 unsigned int window_RGBData[3][640][480]; void display(){ glClear(GL_COLOR_BUFFER_BIT |
我是一名优秀的程序员,十分优秀!