gpt4 book ai didi

macos - 循环遍历所有像素并在OpenGL中获取/设置单个像素颜色?

转载 作者:行者123 更新时间:2023-12-01 04:25:39 25 4
gpt4 key购买 nike

我用 Processing 写了一些东西,现在我想制作一个 Mac OS X 屏幕保护程序。然而,深入研究 OpenGL 并不像我想象的那么容易。

基本上我想遍历屏幕上的所有像素,并根据该像素颜色设置另一种像素颜色。

处理代码如下所示:

void setup(){
size(500,500, P2D);
frameRate(30);
background(255);
}

void draw(){
for(int x = 0; x<width; x++){
for(int y = 0; y<height; y++){
float xRand2 = x+random(2);
float yRand2 = y+random(2);

int xRand = int(xRand2);
int yRand = int(yRand2);

if(get(x,y) == -16777216){
set(x+xRand, y+yRand, #FFFFFF);
}
else if(get(x,y) == -1){
set(x+xRand, y+yRand, #000000);
}
}
}
}

它不是很漂亮,也不是很有效。但是,我想知道如何用 OpenGL 做一些类似的事情。我什至不知道从哪里开始。

最佳答案

OpenGL 的基本思想是永远不要手动设置单个像素的值,因为这通常太慢了。相反,你渲染三角形并用它们做各种技巧,比如纹理、混合等。

为了自由编程每个像素在 OpenGL 中的作用,您需要使用一种称为着色器的技术。如果您以前没有做过类似的事情,这并不容易。着色器的想法是由 GPU 代替 CPU 执行它们,这会产生非常好的性能并减轻 CPU 的负载。但是在您的情况下,使用 CPU 而不是使用着色器和 OpenGL 可能是一个更好的主意,因为这种方法更容易开始。

我建议您使用像 SDL(或者可能是 glfw)这样的库,它可以让您在没有硬件加速的情况下处理像素。不过,您仍然可以使用 OpenGL 来做到这一点。通过使用函数 glDrawPixels。该函数将原始像素数据绘制到屏幕上。但这可能不是很快。

例如,首先阅读一些有关 SDL 的教程。

编辑:如果您想使用着色器,它们的困难(除其他外)是您无法指定设置像素值的坐标。而且您也不能直接从屏幕上获取像素值。使用着色器的一种方法如下:

  • 设置两个纹理:纹理 A 和纹理 B
  • 将其中一个纹理绑定(bind)为您将所有内容渲染到
  • 的目标
  • 绑定(bind)另一个纹理作为着色器的输入纹理
  • 使用着色器渲染全屏四边形并在屏幕上显示结果
  • 交换纹理 A 和 B,这样您就可以使用以前的结果作为下一个输入
  • 再次渲染
  • 关于macos - 循环遍历所有像素并在OpenGL中获取/设置单个像素颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765596/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com