从零开始简单 3D 光栅化之画点

本文介绍了如何在Qt环境中从零开始实现3D光栅化,通过封装QImage类来简化画点操作,提供了一个自定义颜色类,并修改render函数以展示画出的点。在代码实现过程中,详细展示了颜色类和QImage封装的步骤,最终成功展示了一个点。
摘要由CSDN通过智能技术生成

从零开始简单 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值