从零开始简单 3D 光栅化之画点
本人才疏学浅,有什么错误欢迎指出。感激不尽。
封装 QImage
接着上一节。实现一个画点操作。由于上一节的 QImage
使我们得以在 Qt 的窗口中展示一幅图像。在这一节中我们把 QImage
封装成适合我们使用的像素操作 Buffer
。上一节的画个点太麻烦了。不符合设计规范。稍微改造一下 QImage
。本身 QImage
就提供了像素级操作的方法。
void setPixel(int x, int y, uint index_or_rgb);
、
void setPixel(const QPoint &pt, uint index_or_rgb);
、
void setPixelColor(int x, int y, const QColor &c);
和
void setPixelColor(const QPoint &pt, const QColor &c);
;
我们选择使用 void setPixel(int x, int y, uint index_or_rgb);
这个函数,因为看着简洁。在封装 QImage
之前先要封装一个自己的颜色。不废话了,实现颜色类 Color
。
封装 QImage 代码实现
#ifndef COLOR_H
#define COLOR_H
#include "mathdefs.h"
/**
* 颜色类
* @brief The Color class
*/
class Color
{
public:
/**
* red
* @brief r
*/
float r;
/**
* green
* @brief g
*/
float g;
/**
* blue
* @brief b
*/
float b;
/**
* alpha
* @brief a
*/
float a;
public:
/// Opaque white color.
static const Color WHITE;
/// Opaque gray color.
static const Color GRAY;
/// Opaque black color.
static const Color BLACK;
/// Opaque red color.
static const Color RED;
/// Opaque green color.
static const Color GREEN;
/// Opaque blue color.
static const Color BLUE;
/// Opaque cyan color.
static const Color CYAN;
/// Opaque magenta color.
static const Color MAGENTA;
/// Opaque yellow color.
static const Color YELLOW;
/// Opaque tiffany blue color.
static const Color TIFFANYBLUE;
/// Transparent black color (black with no alpha).
static const Color TRANSPARENT_BLACK;
public:
/**
* Construct with default values (opaque white).
* @brief Color
*/
Color() noexcept :
r(1.0f),
g(1.0f),
b(1.0f),
a(1.0f)
{
}
/**
* Construct from RGB values and set alpha fully opaque.
* @brief Color
* @param _r
* @param _g
* @param _b
*/
Color(float _r, float _g, float _b) noexcept :
r(_r),
g(_g),
b(_b),
a(1.0f)
{
}
/**
* Construct from RGBA values.
* @brief Color
* @param _r
* @param _g
* @param _b
* @param _a
*/
Color(float _r, float _g, float _b, float _a) noexcept :
r(_r),
g(_g),
b(_b),
a(_a)
{
}
/**
* Copy-construct from another color.
* @brief Color
**/
Color(const Color