Рисование пикселя в OpenGL с использованием glDrawPixels () - PullRequest
0 голосов
/ 08 октября 2018

Я хочу сделать функцию makePixel (...) в C ++, которая может поместить пиксель в указанные x и y.Но я понятия не имею, почему мой подход не работает.

#include "glut.h"

int WIDTH, HEIGHT = 400;
GLubyte* PixelBuffer = new GLubyte[WIDTH * HEIGHT * 3];

void display();


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);

    glutInitWindowSize(WIDTH, HEIGHT); 
    glutInitWindowPosition(100, 100); 

    int MainWindow = glutCreateWindow("Hello Graphics!!"); 
    glClearColor(0.5, 0.5, 0.5, 0);

    makePixel(200,200,0,0,0,PixelBuffer);

    glutDisplayFunc(display); 
    glutMainLoop();
    return 0;
}



void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawPixels(WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, PixelBuffer);
    glFlush(); 
}

В "glut.h"

void makePixel(int x, int y, int r, int g, int b, GLubyte* pixels)
{
    if (0 <= x && x < window.width && 0 <= y && y < window.height) {
        int position = (x + y * window.width) * 3;
        pixels[position] = r;
        pixels[position + 1] = g;
        pixels[position + 2] = b;
    }
}

1 Ответ

0 голосов
/ 08 октября 2018

int WIDTH, HEIGHT = 400; только присваивает 400 HEIGHT, а не HEIGHT и WIDTH, как предполагает ваш код.WIDTH остается неинициализированным (или, возможно, созданным по умолчанию, я не уверен, что спецификация C ++ в этом случае требует от моей головы; я получаю 0 в моей системе во время выполнения).

Все вместе:

screenshot of white pixel

#include <GL/glut.h>

int WIDTH = 400;
int HEIGHT = 400;
GLubyte* PixelBuffer = new GLubyte[WIDTH * HEIGHT * 3];

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawPixels(WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, PixelBuffer);
    glutSwapBuffers(); 
}

void makePixel(int x, int y, int r, int g, int b, GLubyte* pixels, int width, int height)
{
    if (0 <= x && x < width && 0 <= y && y < height) {
        int position = (x + y * width) * 3;
        pixels[position] = r;
        pixels[position + 1] = g;
        pixels[position + 2] = b;
    }
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

    glutInitWindowSize(WIDTH, HEIGHT); 
    glutInitWindowPosition(100, 100); 

    int MainWindow = glutCreateWindow("Hello Graphics!!"); 
    glClearColor(0.0, 0.0, 0.0, 0);

    makePixel(200,200,255,255,255,PixelBuffer, WIDTH, HEIGHT);
    glutDisplayFunc(display); 
    glutMainLoop();
    return 0;
...