Я слежу за книгой «Трассировка лучей на выходных», в которой автор создает небольшой трассировщик лучей, используя простой C ++, и в результате получается PPM-изображение .
Авторский код
, который производит это изображение PPM.
Поэтому автор предлагает в качестве упражнения сделать его такимпрограмма создает JPG-изображение через библиотеку stb_image .До сих пор я пытался изменить исходный код следующим образом:
#include <fstream>
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
struct RGB{
unsigned char R;
unsigned char G;
unsigned char B;
};
int main(){
int nx = 200;
int ny = 100;
struct RGB data[nx][ny];
for(int j = ny - 1 ; j >= 0 ; j-- ){
for(int i = 0; i < nx ; i++){
float r = float(i) / float(nx);
float g = float(j) / float(ny);
float b = 0.2;
int ir = int(255.99 * r);
int ig = int(255.99 * g);
int ib = int(255.99 * b);
data[i][j].R = ir;
data[i][j].G = ig;
data[i][j].B = ib;
}
}
stbi_write_jpg("image.jpg", nx, ny, 3, data, 100);
}
И вот результат:
Как видите, мой результат немного отличается, а я нетзнаю, почему.Основные проблемы:
Что черный цвет отображается в левом верхнем углу экрана, и, как правило, цвета не отображаются в правильном порядке слева направо, сверху вниз.
Изображение «разделено» пополам, и в результате получается исходное изображение автора, но полученное в паре ????
Вероятно, я что-то неправильно понимаю относительно способа использования STB_IMAGE_WRITE , так что если кто-то, имеющий опыт работы с этой библиотекой, может сказать мне, что происходит, я был бы благодарен.
РЕДАКТИРОВАТЬ 1 Я реализовал изменения, предложенные @ 1201ProgramAlarm в комментариях, плюс я изменил struct RGB data[nx][ny]
на struct RGB data[ny][nx]
, , поэтому результат теперь таков: .