2017-02-08 14 views
2

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

#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 
+0

О, это то, почему, когда я создал pixLocation без «* 3» части он дает мне какие-то странные цвета? Также спасибо за очень быстрый ответ. – Eldandor