- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我现在对 glDrawPixels() 函数感到困惑。我知道函数签名是这样的:gl.glDrawPixels(int 宽度, int 高度, 格式, 类型, 数据);
我不知道如何使格式类型数据保持一致。例如,我必须使用 GL2.GL_RGB 格式,我问对于 type=GL2.GL_DOUBLE、GL2.GL_FLOAT、GL2.GL_BYTE 分别,数据是什么样的?在调用 glDrawPixels() 函数之前,我应该如何在 Java 中包装和格式化数据。
最佳答案
首先,你不应该真正使用glDrawPixels。这是一个非常慢的函数,并且在大多数 OpenGL 实现中都不是很优化。您应该使用带纹理的四边形。 但是您的问题也适用于 glTexImage2D 的参数。
那么这些参数是什么意思呢?我们看一下glTexImage2D的签名
C SPECIFICATION
void glTexImage2D( GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid *pixels )
internalformat
指定数据在 OpenGL 内部的格式。
format
是 pixels
中数据的格式,并且与 glDrawPixels 中的同名参数具有完全相同的含义。本质上,format
告诉 OpenGL 一个数据像素有多少个元素,以像素
为单位
type
告诉 OpenGL 包含单个像素的类型。现在这很有趣,因为它很重要。
让我们看看一些组合:
这告诉 OpenGL,一个像素由 4 个元素组成,顺序为蓝色、绿色、红色和 alpha,并且所有四个元素都包含在一个 32 位无符号整数中,分为 4 组,每组 8 位。您可能知道 HTML 的颜色表示法,例如#ffffffff
用于写入。嗯,这本质上是一个十六进制表示的 32 位无符号 int。
您可以有一个 32 位无符号整数数组
uint32_t pixels[] = {
0xffffffff, 0x0000ffff, 0xffffffff,
0x0000ffff, 0xffffffff, 0x0000ffff,
0xffffffff, 0x0000ffff, 0xffffffff,
};
这将是一个 3×3 大小的白底红色钻石图像。
在本例中,我们告诉 OpenGL 一个像素有 3 个元素,红色、绿色和蓝色,并且由于该类型没有指示明确的子大小,因此该类型的每个元素都包含该像素的一个颜色元素
我们的红色钻石看起来像这样
uint8_t pixels[] = {
0xff, 0xff, 0xff, /**/ 0xff, 0x00, 0x00, /**/ 0xff, 0xff, 0xff,
0xff, 0x00, 0x00, /**/ 0xff, 0xff, 0xff, /**/ 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, /**/ 0xff, 0x00, 0x00, /**/ 0xff, 0xff, 0xff
};
在这种情况下,像素的每个元素都是一个单独的 float ,范围为 [0; 1]。钻石看起来像
float pixels[] = {
0., 1., 0.,
1., 0., 1.,
0., 1., 0.
};
对于 GL_DOUBLE,它看起来完全相同,但使用 double
而不是 float
。
我希望您现在了解基本要点
关于java - JOGL 中 glDrawPixels() 的数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14843955/
我一直在尝试使用 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 |
我是一名优秀的程序员,十分优秀!