Как изменить цвет пикселей при использовании glDrawPixels, мои пиксели всегда красные

У меня есть функция, которая рисует пиксели 1 на 1 в окне, но я хочу знать, как заставить пиксели рисовать другим цветом, отличным от красного. Заранее спасибо. Я пробовал некоторые вещи, такие как glSetColor, glColor3f и т. Д. Просто, чтобы попытаться заставить пиксели отображать разные цвета, но пока ничего не получалось.

#include <GL/glut.h>
#include <iostream>

using namespace std;

float *PixelBuffer;
void setPixel(int, int);

void display();

int size = 400 * 400 * 3;

int main(int argc, char *argv[])
{

PixelBuffer = new float[400 * 400 * 3];

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(400, 400);

glutInitWindowPosition(100, 100);
glColor3f(0, 1.0, 0);

int firstWindow = glutCreateWindow("First Color");glClearColor(0, 0, 0, 0); //clears the buffer of OpenGL

for(int i = 0; i < 20; i++)
{
setPixel(i, 10);
}glutDisplayFunc(display);

glutMainLoop();return 0;
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();

glDrawPixels(400, 400, GL_RGB, GL_FLOAT, PixelBuffer);
glFlush();
}

void setPixel(int x, int y)
{
int pixelLocation;
int width = 400;
pixLocation = (y * width * 3) + (x * 3);
PixelBuffer[pixelLocation] = 1;
};

2

Решение

Вы указываете GL_RGB как формат при звонке glDrawPixels,

Затем вы вычисляете правильную позицию пикселя в вашем буфере на строке:

pixLocation = (y * width * 3) + (x * 3);

Но тогда вы устанавливаете только значение интенсивности красного пикселя на следующей строке.
Вы можете получить доступ к другим значениям цвета в вашем буфере следующим образом:

PixelBuffer[pixelLocation + 0] = 1; // Red pixel intensity
PixelBuffer[pixelLocation + 1] = 1; // Green pixel intensity
PixelBuffer[pixelLocation + 2] = 1; // Blue pixel intensity
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]